1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992-2018 Free Software Foundation, Inc.
3 Contributed by Gary Funck (gary@intrepid.com).
4 Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
5 Extensively modified by Jason Merrill (jason@cygnus.com).
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
23 /* TODO: Emit .debug_line header even when there are no functions, since
24 the file numbers are used by .debug_info. Alternately, leave
25 out locations for types and decls.
26 Avoid talking about ctors and op= for PODs.
27 Factor out common prologue sequences into multiple CIEs. */
29 /* The first part of this file deals with the DWARF 2 frame unwind
30 information, which is also used by the GCC efficient exception handling
31 mechanism. The second part, controlled only by an #ifdef
32 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35 /* DWARF2 Abbreviation Glossary:
37 CFA = Canonical Frame Address
38 a fixed address on the stack which identifies a call frame.
39 We define it to be the value of SP just before the call insn.
40 The CFA register and offset, which may change during the course
41 of the function, are used to calculate its value at runtime.
43 CFI = Call Frame Instruction
44 an instruction for the DWARF2 abstract machine
46 CIE = Common Information Entry
47 information describing information common to one or more FDEs
49 DIE = Debugging Information Entry
51 FDE = Frame Description Entry
52 information describing the stack call frame, in particular,
53 how to restore registers
55 DW_CFA_... = DWARF2 CFA call frame instruction
56 DW_TAG_... = DWARF2 DIE tag */
60 #include "coretypes.h"
67 #include "stringpool.h"
68 #include "insn-config.h"
71 #include "diagnostic.h"
72 #include "fold-const.h"
73 #include "stor-layout.h"
81 #include "dwarf2out.h"
82 #include "dwarf2asm.h"
85 #include "tree-pretty-print.h"
86 #include "print-rtl.h"
88 #include "common/common-target.h"
89 #include "langhooks.h"
94 #include "gdb/gdb-index.h"
96 #include "stringpool.h"
98 #include "file-prefix-map.h" /* remap_debug_filename() */
100 static void dwarf2out_source_line (unsigned int, unsigned int, const char *,
102 static rtx_insn
*last_var_location_insn
;
103 static rtx_insn
*cached_next_real_insn
;
104 static void dwarf2out_decl (tree
);
105 static bool is_redundant_typedef (const_tree
);
107 #ifndef XCOFF_DEBUGGING_INFO
108 #define XCOFF_DEBUGGING_INFO 0
111 #ifndef HAVE_XCOFF_DWARF_EXTRAS
112 #define HAVE_XCOFF_DWARF_EXTRAS 0
115 #ifdef VMS_DEBUGGING_INFO
116 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
118 /* Define this macro to be a nonzero value if the directory specifications
119 which are output in the debug info should end with a separator. */
120 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
121 /* Define this macro to evaluate to a nonzero value if GCC should refrain
122 from generating indirect strings in DWARF2 debug information, for instance
123 if your target is stuck with an old version of GDB that is unable to
124 process them properly or uses VMS Debug. */
125 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
127 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
128 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
131 /* ??? Poison these here until it can be done generically. They've been
132 totally replaced in this file; make sure it stays that way. */
133 #undef DWARF2_UNWIND_INFO
134 #undef DWARF2_FRAME_INFO
135 #if (GCC_VERSION >= 3000)
136 #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
139 /* The size of the target's pointer type. */
141 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
144 /* Array of RTXes referenced by the debugging information, which therefore
145 must be kept around forever. */
146 static GTY(()) vec
<rtx
, va_gc
> *used_rtx_array
;
148 /* A pointer to the base of a list of incomplete types which might be
149 completed at some later time. incomplete_types_list needs to be a
150 vec<tree, va_gc> *because we want to tell the garbage collector about
152 static GTY(()) vec
<tree
, va_gc
> *incomplete_types
;
154 /* Pointers to various DWARF2 sections. */
155 static GTY(()) section
*debug_info_section
;
156 static GTY(()) section
*debug_skeleton_info_section
;
157 static GTY(()) section
*debug_abbrev_section
;
158 static GTY(()) section
*debug_skeleton_abbrev_section
;
159 static GTY(()) section
*debug_aranges_section
;
160 static GTY(()) section
*debug_addr_section
;
161 static GTY(()) section
*debug_macinfo_section
;
162 static const char *debug_macinfo_section_name
;
163 static unsigned macinfo_label_base
= 1;
164 static GTY(()) section
*debug_line_section
;
165 static GTY(()) section
*debug_skeleton_line_section
;
166 static GTY(()) section
*debug_loc_section
;
167 static GTY(()) section
*debug_pubnames_section
;
168 static GTY(()) section
*debug_pubtypes_section
;
169 static GTY(()) section
*debug_str_section
;
170 static GTY(()) section
*debug_line_str_section
;
171 static GTY(()) section
*debug_str_dwo_section
;
172 static GTY(()) section
*debug_str_offsets_section
;
173 static GTY(()) section
*debug_ranges_section
;
174 static GTY(()) section
*debug_frame_section
;
176 /* Maximum size (in bytes) of an artificially generated label. */
177 #define MAX_ARTIFICIAL_LABEL_BYTES 40
179 /* According to the (draft) DWARF 3 specification, the initial length
180 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
181 bytes are 0xffffffff, followed by the length stored in the next 8
184 However, the SGI/MIPS ABI uses an initial length which is equal to
185 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
187 #ifndef DWARF_INITIAL_LENGTH_SIZE
188 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
191 #ifndef DWARF_INITIAL_LENGTH_SIZE_STR
192 #define DWARF_INITIAL_LENGTH_SIZE_STR (DWARF_OFFSET_SIZE == 4 ? "-4" : "-12")
195 /* Round SIZE up to the nearest BOUNDARY. */
196 #define DWARF_ROUND(SIZE,BOUNDARY) \
197 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
199 /* CIE identifier. */
200 #if HOST_BITS_PER_WIDE_INT >= 64
201 #define DWARF_CIE_ID \
202 (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
204 #define DWARF_CIE_ID DW_CIE_ID
208 /* A vector for a table that contains frame description
209 information for each routine. */
210 #define NOT_INDEXED (-1U)
211 #define NO_INDEX_ASSIGNED (-2U)
213 static GTY(()) vec
<dw_fde_ref
, va_gc
> *fde_vec
;
215 struct GTY((for_user
)) indirect_string_node
{
217 unsigned int refcount
;
218 enum dwarf_form form
;
223 struct indirect_string_hasher
: ggc_ptr_hash
<indirect_string_node
>
225 typedef const char *compare_type
;
227 static hashval_t
hash (indirect_string_node
*);
228 static bool equal (indirect_string_node
*, const char *);
231 static GTY (()) hash_table
<indirect_string_hasher
> *debug_str_hash
;
233 static GTY (()) hash_table
<indirect_string_hasher
> *debug_line_str_hash
;
235 /* With split_debug_info, both the comp_dir and dwo_name go in the
236 main object file, rather than the dwo, similar to the force_direct
237 parameter elsewhere but with additional complications:
239 1) The string is needed in both the main object file and the dwo.
240 That is, the comp_dir and dwo_name will appear in both places.
242 2) Strings can use four forms: DW_FORM_string, DW_FORM_strp,
243 DW_FORM_line_strp or DW_FORM_strx/GNU_str_index.
245 3) GCC chooses the form to use late, depending on the size and
248 Rather than forcing the all debug string handling functions and
249 callers to deal with these complications, simply use a separate,
250 special-cased string table for any attribute that should go in the
251 main object file. This limits the complexity to just the places
254 static GTY (()) hash_table
<indirect_string_hasher
> *skeleton_debug_str_hash
;
256 static GTY(()) int dw2_string_counter
;
258 /* True if the compilation unit places functions in more than one section. */
259 static GTY(()) bool have_multiple_function_sections
= false;
261 /* Whether the default text and cold text sections have been used at all. */
262 static GTY(()) bool text_section_used
= false;
263 static GTY(()) bool cold_text_section_used
= false;
265 /* The default cold text section. */
266 static GTY(()) section
*cold_text_section
;
268 /* The DIE for C++14 'auto' in a function return type. */
269 static GTY(()) dw_die_ref auto_die
;
271 /* The DIE for C++14 'decltype(auto)' in a function return type. */
272 static GTY(()) dw_die_ref decltype_auto_die
;
274 /* Forward declarations for functions defined in this file. */
276 static void output_call_frame_info (int);
277 static void dwarf2out_note_section_used (void);
279 /* Personality decl of current unit. Used only when assembler does not support
281 static GTY(()) rtx current_unit_personality
;
283 /* Whether an eh_frame section is required. */
284 static GTY(()) bool do_eh_frame
= false;
286 /* .debug_rnglists next index. */
287 static unsigned int rnglist_idx
;
289 /* Data and reference forms for relocatable data. */
290 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
291 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
293 #ifndef DEBUG_FRAME_SECTION
294 #define DEBUG_FRAME_SECTION ".debug_frame"
297 #ifndef FUNC_BEGIN_LABEL
298 #define FUNC_BEGIN_LABEL "LFB"
301 #ifndef FUNC_SECOND_SECT_LABEL
302 #define FUNC_SECOND_SECT_LABEL "LFSB"
305 #ifndef FUNC_END_LABEL
306 #define FUNC_END_LABEL "LFE"
309 #ifndef PROLOGUE_END_LABEL
310 #define PROLOGUE_END_LABEL "LPE"
313 #ifndef EPILOGUE_BEGIN_LABEL
314 #define EPILOGUE_BEGIN_LABEL "LEB"
317 #ifndef FRAME_BEGIN_LABEL
318 #define FRAME_BEGIN_LABEL "Lframe"
320 #define CIE_AFTER_SIZE_LABEL "LSCIE"
321 #define CIE_END_LABEL "LECIE"
322 #define FDE_LABEL "LSFDE"
323 #define FDE_AFTER_SIZE_LABEL "LASFDE"
324 #define FDE_END_LABEL "LEFDE"
325 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
326 #define LINE_NUMBER_END_LABEL "LELT"
327 #define LN_PROLOG_AS_LABEL "LASLTP"
328 #define LN_PROLOG_END_LABEL "LELTP"
329 #define DIE_LABEL_PREFIX "DW"
331 /* Match the base name of a file to the base name of a compilation unit. */
334 matches_main_base (const char *path
)
336 /* Cache the last query. */
337 static const char *last_path
= NULL
;
338 static int last_match
= 0;
339 if (path
!= last_path
)
342 int length
= base_of_path (path
, &base
);
344 last_match
= (length
== main_input_baselength
345 && memcmp (base
, main_input_basename
, length
) == 0);
350 #ifdef DEBUG_DEBUG_STRUCT
353 dump_struct_debug (tree type
, enum debug_info_usage usage
,
354 enum debug_struct_file criterion
, int generic
,
355 int matches
, int result
)
357 /* Find the type name. */
358 tree type_decl
= TYPE_STUB_DECL (type
);
360 const char *name
= 0;
361 if (TREE_CODE (t
) == TYPE_DECL
)
364 name
= IDENTIFIER_POINTER (t
);
366 fprintf (stderr
, " struct %d %s %s %s %s %d %p %s\n",
368 DECL_IN_SYSTEM_HEADER (type_decl
) ? "sys" : "usr",
369 matches
? "bas" : "hdr",
370 generic
? "gen" : "ord",
371 usage
== DINFO_USAGE_DFN
? ";" :
372 usage
== DINFO_USAGE_DIR_USE
? "." : "*",
374 (void*) type_decl
, name
);
377 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
378 dump_struct_debug (type, usage, criterion, generic, matches, result)
382 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
387 /* Get the number of HOST_WIDE_INTs needed to represent the precision
388 of the number. Some constants have a large uniform precision, so
389 we get the precision needed for the actual value of the number. */
392 get_full_len (const wide_int
&op
)
394 int prec
= wi::min_precision (op
, UNSIGNED
);
395 return ((prec
+ HOST_BITS_PER_WIDE_INT
- 1)
396 / HOST_BITS_PER_WIDE_INT
);
400 should_emit_struct_debug (tree type
, enum debug_info_usage usage
)
402 enum debug_struct_file criterion
;
404 bool generic
= lang_hooks
.types
.generic_p (type
);
407 criterion
= debug_struct_generic
[usage
];
409 criterion
= debug_struct_ordinary
[usage
];
411 if (criterion
== DINFO_STRUCT_FILE_NONE
)
412 return DUMP_GSTRUCT (type
, usage
, criterion
, generic
, false, false);
413 if (criterion
== DINFO_STRUCT_FILE_ANY
)
414 return DUMP_GSTRUCT (type
, usage
, criterion
, generic
, false, true);
416 type_decl
= TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type
));
418 if (type_decl
!= NULL
)
420 if (criterion
== DINFO_STRUCT_FILE_SYS
&& DECL_IN_SYSTEM_HEADER (type_decl
))
421 return DUMP_GSTRUCT (type
, usage
, criterion
, generic
, false, true);
423 if (matches_main_base (DECL_SOURCE_FILE (type_decl
)))
424 return DUMP_GSTRUCT (type
, usage
, criterion
, generic
, true, true);
427 return DUMP_GSTRUCT (type
, usage
, criterion
, generic
, false, false);
430 /* Switch [BACK] to eh_frame_section. If we don't have an eh_frame_section,
431 switch to the data section instead, and write out a synthetic start label
432 for collect2 the first time around. */
435 switch_to_eh_frame_section (bool back ATTRIBUTE_UNUSED
)
437 if (eh_frame_section
== 0)
441 if (EH_TABLES_CAN_BE_READ_ONLY
)
447 fde_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
449 per_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
451 lsda_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
454 || ((fde_encoding
& 0x70) != DW_EH_PE_absptr
455 && (fde_encoding
& 0x70) != DW_EH_PE_aligned
456 && (per_encoding
& 0x70) != DW_EH_PE_absptr
457 && (per_encoding
& 0x70) != DW_EH_PE_aligned
458 && (lsda_encoding
& 0x70) != DW_EH_PE_absptr
459 && (lsda_encoding
& 0x70) != DW_EH_PE_aligned
))
460 ? 0 : SECTION_WRITE
);
463 flags
= SECTION_WRITE
;
465 #ifdef EH_FRAME_SECTION_NAME
466 eh_frame_section
= get_section (EH_FRAME_SECTION_NAME
, flags
, NULL
);
468 eh_frame_section
= ((flags
== SECTION_WRITE
)
469 ? data_section
: readonly_data_section
);
470 #endif /* EH_FRAME_SECTION_NAME */
473 switch_to_section (eh_frame_section
);
475 #ifdef EH_FRAME_THROUGH_COLLECT2
476 /* We have no special eh_frame section. Emit special labels to guide
480 tree label
= get_file_function_name ("F");
481 ASM_OUTPUT_ALIGN (asm_out_file
, floor_log2 (PTR_SIZE
));
482 targetm
.asm_out
.globalize_label (asm_out_file
,
483 IDENTIFIER_POINTER (label
));
484 ASM_OUTPUT_LABEL (asm_out_file
, IDENTIFIER_POINTER (label
));
489 /* Switch [BACK] to the eh or debug frame table section, depending on
493 switch_to_frame_table_section (int for_eh
, bool back
)
496 switch_to_eh_frame_section (back
);
499 if (!debug_frame_section
)
500 debug_frame_section
= get_section (DEBUG_FRAME_SECTION
,
501 SECTION_DEBUG
, NULL
);
502 switch_to_section (debug_frame_section
);
506 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
508 enum dw_cfi_oprnd_type
509 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi
)
514 case DW_CFA_GNU_window_save
:
515 case DW_CFA_remember_state
:
516 case DW_CFA_restore_state
:
517 return dw_cfi_oprnd_unused
;
520 case DW_CFA_advance_loc1
:
521 case DW_CFA_advance_loc2
:
522 case DW_CFA_advance_loc4
:
523 case DW_CFA_MIPS_advance_loc8
:
524 return dw_cfi_oprnd_addr
;
527 case DW_CFA_offset_extended
:
529 case DW_CFA_offset_extended_sf
:
530 case DW_CFA_def_cfa_sf
:
532 case DW_CFA_restore_extended
:
533 case DW_CFA_undefined
:
534 case DW_CFA_same_value
:
535 case DW_CFA_def_cfa_register
:
536 case DW_CFA_register
:
537 case DW_CFA_expression
:
538 case DW_CFA_val_expression
:
539 return dw_cfi_oprnd_reg_num
;
541 case DW_CFA_def_cfa_offset
:
542 case DW_CFA_GNU_args_size
:
543 case DW_CFA_def_cfa_offset_sf
:
544 return dw_cfi_oprnd_offset
;
546 case DW_CFA_def_cfa_expression
:
547 return dw_cfi_oprnd_loc
;
554 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
556 enum dw_cfi_oprnd_type
557 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi
)
562 case DW_CFA_def_cfa_sf
:
564 case DW_CFA_offset_extended_sf
:
565 case DW_CFA_offset_extended
:
566 return dw_cfi_oprnd_offset
;
568 case DW_CFA_register
:
569 return dw_cfi_oprnd_reg_num
;
571 case DW_CFA_expression
:
572 case DW_CFA_val_expression
:
573 return dw_cfi_oprnd_loc
;
575 case DW_CFA_def_cfa_expression
:
576 return dw_cfi_oprnd_cfa_loc
;
579 return dw_cfi_oprnd_unused
;
583 /* Output one FDE. */
586 output_fde (dw_fde_ref fde
, bool for_eh
, bool second
,
587 char *section_start_label
, int fde_encoding
, char *augmentation
,
588 bool any_lsda_needed
, int lsda_encoding
)
590 const char *begin
, *end
;
591 static unsigned int j
;
592 char l1
[MAX_ARTIFICIAL_LABEL_BYTES
], l2
[MAX_ARTIFICIAL_LABEL_BYTES
];
594 targetm
.asm_out
.emit_unwind_label (asm_out_file
, fde
->decl
, for_eh
,
596 targetm
.asm_out
.internal_label (asm_out_file
, FDE_LABEL
,
598 ASM_GENERATE_INTERNAL_LABEL (l1
, FDE_AFTER_SIZE_LABEL
, for_eh
+ j
);
599 ASM_GENERATE_INTERNAL_LABEL (l2
, FDE_END_LABEL
, for_eh
+ j
);
600 if (!XCOFF_DEBUGGING_INFO
|| for_eh
)
602 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4 && !for_eh
)
603 dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
604 " indicating 64-bit DWARF extension");
605 dw2_asm_output_delta (for_eh
? 4 : DWARF_OFFSET_SIZE
, l2
, l1
,
608 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
611 dw2_asm_output_delta (4, l1
, section_start_label
, "FDE CIE offset");
613 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, section_start_label
,
614 debug_frame_section
, "FDE CIE offset");
616 begin
= second
? fde
->dw_fde_second_begin
: fde
->dw_fde_begin
;
617 end
= second
? fde
->dw_fde_second_end
: fde
->dw_fde_end
;
621 rtx sym_ref
= gen_rtx_SYMBOL_REF (Pmode
, begin
);
622 SYMBOL_REF_FLAGS (sym_ref
) |= SYMBOL_FLAG_LOCAL
;
623 dw2_asm_output_encoded_addr_rtx (fde_encoding
, sym_ref
, false,
624 "FDE initial location");
625 dw2_asm_output_delta (size_of_encoded_value (fde_encoding
),
626 end
, begin
, "FDE address range");
630 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, begin
, "FDE initial location");
631 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, end
, begin
, "FDE address range");
638 int size
= size_of_encoded_value (lsda_encoding
);
640 if (lsda_encoding
== DW_EH_PE_aligned
)
642 int offset
= ( 4 /* Length */
644 + 2 * size_of_encoded_value (fde_encoding
)
645 + 1 /* Augmentation size */ );
646 int pad
= -offset
& (PTR_SIZE
- 1);
649 gcc_assert (size_of_uleb128 (size
) == 1);
652 dw2_asm_output_data_uleb128 (size
, "Augmentation size");
654 if (fde
->uses_eh_lsda
)
656 ASM_GENERATE_INTERNAL_LABEL (l1
, second
? "LLSDAC" : "LLSDA",
657 fde
->funcdef_number
);
658 dw2_asm_output_encoded_addr_rtx (lsda_encoding
,
659 gen_rtx_SYMBOL_REF (Pmode
, l1
),
661 "Language Specific Data Area");
665 if (lsda_encoding
== DW_EH_PE_aligned
)
666 ASM_OUTPUT_ALIGN (asm_out_file
, floor_log2 (PTR_SIZE
));
667 dw2_asm_output_data (size_of_encoded_value (lsda_encoding
), 0,
668 "Language Specific Data Area (none)");
672 dw2_asm_output_data_uleb128 (0, "Augmentation size");
675 /* Loop through the Call Frame Instructions associated with this FDE. */
676 fde
->dw_fde_current_label
= begin
;
678 size_t from
, until
, i
;
681 until
= vec_safe_length (fde
->dw_fde_cfi
);
683 if (fde
->dw_fde_second_begin
== NULL
)
686 until
= fde
->dw_fde_switch_cfi_index
;
688 from
= fde
->dw_fde_switch_cfi_index
;
690 for (i
= from
; i
< until
; i
++)
691 output_cfi ((*fde
->dw_fde_cfi
)[i
], fde
, for_eh
);
694 /* If we are to emit a ref/link from function bodies to their frame tables,
695 do it now. This is typically performed to make sure that tables
696 associated with functions are dragged with them and not discarded in
697 garbage collecting links. We need to do this on a per function basis to
698 cope with -ffunction-sections. */
700 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
701 /* Switch to the function section, emit the ref to the tables, and
702 switch *back* into the table section. */
703 switch_to_section (function_section (fde
->decl
));
704 ASM_OUTPUT_DWARF_TABLE_REF (section_start_label
);
705 switch_to_frame_table_section (for_eh
, true);
708 /* Pad the FDE out to an address sized boundary. */
709 ASM_OUTPUT_ALIGN (asm_out_file
,
710 floor_log2 ((for_eh
? PTR_SIZE
: DWARF2_ADDR_SIZE
)));
711 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
716 /* Return true if frame description entry FDE is needed for EH. */
719 fde_needed_for_eh_p (dw_fde_ref fde
)
721 if (flag_asynchronous_unwind_tables
)
724 if (TARGET_USES_WEAK_UNWIND_INFO
&& DECL_WEAK (fde
->decl
))
727 if (fde
->uses_eh_lsda
)
730 /* If exceptions are enabled, we have collected nothrow info. */
731 if (flag_exceptions
&& (fde
->all_throwers_are_sibcalls
|| fde
->nothrow
))
737 /* Output the call frame information used to record information
738 that relates to calculating the frame pointer, and records the
739 location of saved registers. */
742 output_call_frame_info (int for_eh
)
747 char l1
[MAX_ARTIFICIAL_LABEL_BYTES
], l2
[MAX_ARTIFICIAL_LABEL_BYTES
];
748 char section_start_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
749 bool any_lsda_needed
= false;
750 char augmentation
[6];
751 int augmentation_size
;
752 int fde_encoding
= DW_EH_PE_absptr
;
753 int per_encoding
= DW_EH_PE_absptr
;
754 int lsda_encoding
= DW_EH_PE_absptr
;
756 rtx personality
= NULL
;
759 /* Don't emit a CIE if there won't be any FDEs. */
763 /* Nothing to do if the assembler's doing it all. */
764 if (dwarf2out_do_cfi_asm ())
767 /* If we don't have any functions we'll want to unwind out of, don't emit
768 any EH unwind information. If we make FDEs linkonce, we may have to
769 emit an empty label for an FDE that wouldn't otherwise be emitted. We
770 want to avoid having an FDE kept around when the function it refers to
771 is discarded. Example where this matters: a primary function template
772 in C++ requires EH information, an explicit specialization doesn't. */
775 bool any_eh_needed
= false;
777 FOR_EACH_VEC_ELT (*fde_vec
, i
, fde
)
779 if (fde
->uses_eh_lsda
)
780 any_eh_needed
= any_lsda_needed
= true;
781 else if (fde_needed_for_eh_p (fde
))
782 any_eh_needed
= true;
783 else if (TARGET_USES_WEAK_UNWIND_INFO
)
784 targetm
.asm_out
.emit_unwind_label (asm_out_file
, fde
->decl
, 1, 1);
791 /* We're going to be generating comments, so turn on app. */
795 /* Switch to the proper frame section, first time. */
796 switch_to_frame_table_section (for_eh
, false);
798 ASM_GENERATE_INTERNAL_LABEL (section_start_label
, FRAME_BEGIN_LABEL
, for_eh
);
799 ASM_OUTPUT_LABEL (asm_out_file
, section_start_label
);
801 /* Output the CIE. */
802 ASM_GENERATE_INTERNAL_LABEL (l1
, CIE_AFTER_SIZE_LABEL
, for_eh
);
803 ASM_GENERATE_INTERNAL_LABEL (l2
, CIE_END_LABEL
, for_eh
);
804 if (!XCOFF_DEBUGGING_INFO
|| for_eh
)
806 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4 && !for_eh
)
807 dw2_asm_output_data (4, 0xffffffff,
808 "Initial length escape value indicating 64-bit DWARF extension");
809 dw2_asm_output_delta (for_eh
? 4 : DWARF_OFFSET_SIZE
, l2
, l1
,
810 "Length of Common Information Entry");
812 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
814 /* Now that the CIE pointer is PC-relative for EH,
815 use 0 to identify the CIE. */
816 dw2_asm_output_data ((for_eh
? 4 : DWARF_OFFSET_SIZE
),
817 (for_eh
? 0 : DWARF_CIE_ID
),
818 "CIE Identifier Tag");
820 /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
821 use CIE version 1, unless that would produce incorrect results
822 due to overflowing the return register column. */
823 return_reg
= DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN
, for_eh
);
825 if (return_reg
>= 256 || dwarf_version
> 2)
827 dw2_asm_output_data (1, dw_cie_version
, "CIE Version");
830 augmentation_size
= 0;
832 personality
= current_unit_personality
;
838 z Indicates that a uleb128 is present to size the
839 augmentation section.
840 L Indicates the encoding (and thus presence) of
841 an LSDA pointer in the FDE augmentation.
842 R Indicates a non-default pointer encoding for
844 P Indicates the presence of an encoding + language
845 personality routine in the CIE augmentation. */
847 fde_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
848 per_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
849 lsda_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
851 p
= augmentation
+ 1;
855 augmentation_size
+= 1 + size_of_encoded_value (per_encoding
);
856 assemble_external_libcall (personality
);
861 augmentation_size
+= 1;
863 if (fde_encoding
!= DW_EH_PE_absptr
)
866 augmentation_size
+= 1;
868 if (p
> augmentation
+ 1)
870 augmentation
[0] = 'z';
874 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
875 if (personality
&& per_encoding
== DW_EH_PE_aligned
)
877 int offset
= ( 4 /* Length */
879 + 1 /* CIE version */
880 + strlen (augmentation
) + 1 /* Augmentation */
881 + size_of_uleb128 (1) /* Code alignment */
882 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT
)
884 + 1 /* Augmentation size */
885 + 1 /* Personality encoding */ );
886 int pad
= -offset
& (PTR_SIZE
- 1);
888 augmentation_size
+= pad
;
890 /* Augmentations should be small, so there's scarce need to
891 iterate for a solution. Die if we exceed one uleb128 byte. */
892 gcc_assert (size_of_uleb128 (augmentation_size
) == 1);
896 dw2_asm_output_nstring (augmentation
, -1, "CIE Augmentation");
897 if (dw_cie_version
>= 4)
899 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "CIE Address Size");
900 dw2_asm_output_data (1, 0, "CIE Segment Size");
902 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
903 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT
,
904 "CIE Data Alignment Factor");
906 if (dw_cie_version
== 1)
907 dw2_asm_output_data (1, return_reg
, "CIE RA Column");
909 dw2_asm_output_data_uleb128 (return_reg
, "CIE RA Column");
913 dw2_asm_output_data_uleb128 (augmentation_size
, "Augmentation size");
916 dw2_asm_output_data (1, per_encoding
, "Personality (%s)",
917 eh_data_format_name (per_encoding
));
918 dw2_asm_output_encoded_addr_rtx (per_encoding
,
924 dw2_asm_output_data (1, lsda_encoding
, "LSDA Encoding (%s)",
925 eh_data_format_name (lsda_encoding
));
927 if (fde_encoding
!= DW_EH_PE_absptr
)
928 dw2_asm_output_data (1, fde_encoding
, "FDE Encoding (%s)",
929 eh_data_format_name (fde_encoding
));
932 FOR_EACH_VEC_ELT (*cie_cfi_vec
, i
, cfi
)
933 output_cfi (cfi
, NULL
, for_eh
);
935 /* Pad the CIE out to an address sized boundary. */
936 ASM_OUTPUT_ALIGN (asm_out_file
,
937 floor_log2 (for_eh
? PTR_SIZE
: DWARF2_ADDR_SIZE
));
938 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
940 /* Loop through all of the FDE's. */
941 FOR_EACH_VEC_ELT (*fde_vec
, i
, fde
)
945 /* Don't emit EH unwind info for leaf functions that don't need it. */
946 if (for_eh
&& !fde_needed_for_eh_p (fde
))
949 for (k
= 0; k
< (fde
->dw_fde_second_begin
? 2 : 1); k
++)
950 output_fde (fde
, for_eh
, k
, section_start_label
, fde_encoding
,
951 augmentation
, any_lsda_needed
, lsda_encoding
);
954 if (for_eh
&& targetm
.terminate_dw2_eh_frame_info
)
955 dw2_asm_output_data (4, 0, "End of Table");
957 /* Turn off app to make assembly quicker. */
962 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed. */
965 dwarf2out_do_cfi_startproc (bool second
)
970 fprintf (asm_out_file
, "\t.cfi_startproc\n");
972 /* .cfi_personality and .cfi_lsda are only relevant to DWARF2
974 if (targetm_common
.except_unwind_info (&global_options
) != UI_DWARF2
)
977 rtx personality
= get_personality_function (current_function_decl
);
981 enc
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
984 /* ??? The GAS support isn't entirely consistent. We have to
985 handle indirect support ourselves, but PC-relative is done
986 in the assembler. Further, the assembler can't handle any
987 of the weirder relocation types. */
988 if (enc
& DW_EH_PE_indirect
)
989 ref
= dw2_force_const_mem (ref
, true);
991 fprintf (asm_out_file
, "\t.cfi_personality %#x,", enc
);
992 output_addr_const (asm_out_file
, ref
);
993 fputc ('\n', asm_out_file
);
996 if (crtl
->uses_eh_lsda
)
998 char lab
[MAX_ARTIFICIAL_LABEL_BYTES
];
1000 enc
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
1001 ASM_GENERATE_INTERNAL_LABEL (lab
, second
? "LLSDAC" : "LLSDA",
1002 current_function_funcdef_no
);
1003 ref
= gen_rtx_SYMBOL_REF (Pmode
, lab
);
1004 SYMBOL_REF_FLAGS (ref
) = SYMBOL_FLAG_LOCAL
;
1006 if (enc
& DW_EH_PE_indirect
)
1007 ref
= dw2_force_const_mem (ref
, true);
1009 fprintf (asm_out_file
, "\t.cfi_lsda %#x,", enc
);
1010 output_addr_const (asm_out_file
, ref
);
1011 fputc ('\n', asm_out_file
);
1015 /* Allocate CURRENT_FDE. Immediately initialize all we can, noting that
1016 this allocation may be done before pass_final. */
1019 dwarf2out_alloc_current_fde (void)
1023 fde
= ggc_cleared_alloc
<dw_fde_node
> ();
1024 fde
->decl
= current_function_decl
;
1025 fde
->funcdef_number
= current_function_funcdef_no
;
1026 fde
->fde_index
= vec_safe_length (fde_vec
);
1027 fde
->all_throwers_are_sibcalls
= crtl
->all_throwers_are_sibcalls
;
1028 fde
->uses_eh_lsda
= crtl
->uses_eh_lsda
;
1029 fde
->nothrow
= crtl
->nothrow
;
1030 fde
->drap_reg
= INVALID_REGNUM
;
1031 fde
->vdrap_reg
= INVALID_REGNUM
;
1033 /* Record the FDE associated with this function. */
1035 vec_safe_push (fde_vec
, fde
);
1040 /* Output a marker (i.e. a label) for the beginning of a function, before
1044 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED
,
1045 unsigned int column ATTRIBUTE_UNUSED
,
1046 const char *file ATTRIBUTE_UNUSED
)
1048 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
1054 current_function_func_begin_label
= NULL
;
1056 do_frame
= dwarf2out_do_frame ();
1058 /* ??? current_function_func_begin_label is also used by except.c for
1059 call-site information. We must emit this label if it might be used. */
1061 && (!flag_exceptions
1062 || targetm_common
.except_unwind_info (&global_options
) == UI_SJLJ
))
1065 fnsec
= function_section (current_function_decl
);
1066 switch_to_section (fnsec
);
1067 ASM_GENERATE_INTERNAL_LABEL (label
, FUNC_BEGIN_LABEL
,
1068 current_function_funcdef_no
);
1069 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, FUNC_BEGIN_LABEL
,
1070 current_function_funcdef_no
);
1071 dup_label
= xstrdup (label
);
1072 current_function_func_begin_label
= dup_label
;
1074 /* We can elide FDE allocation if we're not emitting frame unwind info. */
1078 /* Unlike the debug version, the EH version of frame unwind info is a per-
1079 function setting so we need to record whether we need it for the unit. */
1080 do_eh_frame
|= dwarf2out_do_eh_frame ();
1082 /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1083 emit insns as rtx but bypass the bulk of rest_of_compilation, which
1084 would include pass_dwarf2_frame. If we've not created the FDE yet,
1088 fde
= dwarf2out_alloc_current_fde ();
1090 /* Initialize the bits of CURRENT_FDE that were not available earlier. */
1091 fde
->dw_fde_begin
= dup_label
;
1092 fde
->dw_fde_current_label
= dup_label
;
1093 fde
->in_std_section
= (fnsec
== text_section
1094 || (cold_text_section
&& fnsec
== cold_text_section
));
1096 /* We only want to output line number information for the genuine dwarf2
1097 prologue case, not the eh frame case. */
1098 #ifdef DWARF2_DEBUGGING_INFO
1100 dwarf2out_source_line (line
, column
, file
, 0, true);
1103 if (dwarf2out_do_cfi_asm ())
1104 dwarf2out_do_cfi_startproc (false);
1107 rtx personality
= get_personality_function (current_function_decl
);
1108 if (!current_unit_personality
)
1109 current_unit_personality
= personality
;
1111 /* We cannot keep a current personality per function as without CFI
1112 asm, at the point where we emit the CFI data, there is no current
1113 function anymore. */
1114 if (personality
&& current_unit_personality
!= personality
)
1115 sorry ("multiple EH personalities are supported only with assemblers "
1116 "supporting .cfi_personality directive");
1120 /* Output a marker (i.e. a label) for the end of the generated code
1121 for a function prologue. This gets called *after* the prologue code has
1125 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED
,
1126 const char *file ATTRIBUTE_UNUSED
)
1128 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
1130 /* Output a label to mark the endpoint of the code generated for this
1132 ASM_GENERATE_INTERNAL_LABEL (label
, PROLOGUE_END_LABEL
,
1133 current_function_funcdef_no
);
1134 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, PROLOGUE_END_LABEL
,
1135 current_function_funcdef_no
);
1136 cfun
->fde
->dw_fde_vms_end_prologue
= xstrdup (label
);
1139 /* Output a marker (i.e. a label) for the beginning of the generated code
1140 for a function epilogue. This gets called *before* the prologue code has
1144 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED
,
1145 const char *file ATTRIBUTE_UNUSED
)
1147 dw_fde_ref fde
= cfun
->fde
;
1148 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
1150 if (fde
->dw_fde_vms_begin_epilogue
)
1153 /* Output a label to mark the endpoint of the code generated for this
1155 ASM_GENERATE_INTERNAL_LABEL (label
, EPILOGUE_BEGIN_LABEL
,
1156 current_function_funcdef_no
);
1157 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, EPILOGUE_BEGIN_LABEL
,
1158 current_function_funcdef_no
);
1159 fde
->dw_fde_vms_begin_epilogue
= xstrdup (label
);
1162 /* Output a marker (i.e. a label) for the absolute end of the generated code
1163 for a function definition. This gets called *after* the epilogue code has
1167 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED
,
1168 const char *file ATTRIBUTE_UNUSED
)
1171 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
1173 last_var_location_insn
= NULL
;
1174 cached_next_real_insn
= NULL
;
1176 if (dwarf2out_do_cfi_asm ())
1177 fprintf (asm_out_file
, "\t.cfi_endproc\n");
1179 /* Output a label to mark the endpoint of the code generated for this
1181 ASM_GENERATE_INTERNAL_LABEL (label
, FUNC_END_LABEL
,
1182 current_function_funcdef_no
);
1183 ASM_OUTPUT_LABEL (asm_out_file
, label
);
1185 gcc_assert (fde
!= NULL
);
1186 if (fde
->dw_fde_second_begin
== NULL
)
1187 fde
->dw_fde_end
= xstrdup (label
);
1191 dwarf2out_frame_finish (void)
1193 /* Output call frame information. */
1194 if (targetm
.debug_unwind_info () == UI_DWARF2
)
1195 output_call_frame_info (0);
1197 /* Output another copy for the unwinder. */
1199 output_call_frame_info (1);
1202 /* Note that the current function section is being used for code. */
1205 dwarf2out_note_section_used (void)
1207 section
*sec
= current_function_section ();
1208 if (sec
== text_section
)
1209 text_section_used
= true;
1210 else if (sec
== cold_text_section
)
1211 cold_text_section_used
= true;
1214 static void var_location_switch_text_section (void);
1215 static void set_cur_line_info_table (section
*);
1218 dwarf2out_switch_text_section (void)
1220 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
1222 dw_fde_ref fde
= cfun
->fde
;
1224 gcc_assert (cfun
&& fde
&& fde
->dw_fde_second_begin
== NULL
);
1226 ASM_GENERATE_INTERNAL_LABEL (label
, FUNC_SECOND_SECT_LABEL
,
1227 current_function_funcdef_no
);
1229 fde
->dw_fde_second_begin
= ggc_strdup (label
);
1230 if (!in_cold_section_p
)
1232 fde
->dw_fde_end
= crtl
->subsections
.cold_section_end_label
;
1233 fde
->dw_fde_second_end
= crtl
->subsections
.hot_section_end_label
;
1237 fde
->dw_fde_end
= crtl
->subsections
.hot_section_end_label
;
1238 fde
->dw_fde_second_end
= crtl
->subsections
.cold_section_end_label
;
1240 have_multiple_function_sections
= true;
1242 /* There is no need to mark used sections when not debugging. */
1243 if (cold_text_section
!= NULL
)
1244 dwarf2out_note_section_used ();
1246 if (dwarf2out_do_cfi_asm ())
1247 fprintf (asm_out_file
, "\t.cfi_endproc\n");
1249 /* Now do the real section switch. */
1250 sect
= current_function_section ();
1251 switch_to_section (sect
);
1253 fde
->second_in_std_section
1254 = (sect
== text_section
1255 || (cold_text_section
&& sect
== cold_text_section
));
1257 if (dwarf2out_do_cfi_asm ())
1258 dwarf2out_do_cfi_startproc (true);
1260 var_location_switch_text_section ();
1262 if (cold_text_section
!= NULL
)
1263 set_cur_line_info_table (sect
);
1266 /* And now, the subset of the debugging information support code necessary
1267 for emitting location expressions. */
1269 /* Data about a single source file. */
1270 struct GTY((for_user
)) dwarf_file_data
{
1271 const char * filename
;
1275 /* Describe an entry into the .debug_addr section. */
1279 ate_kind_rtx_dtprel
,
1283 struct GTY((for_user
)) addr_table_entry
{
1285 unsigned int refcount
;
1287 union addr_table_entry_struct_union
1289 rtx
GTY ((tag ("0"))) rtl
;
1290 char * GTY ((tag ("1"))) label
;
1292 GTY ((desc ("%1.kind"))) addr
;
1295 typedef unsigned int var_loc_view
;
1297 /* Location lists are ranges + location descriptions for that range,
1298 so you can track variables that are in different places over
1299 their entire life. */
1300 typedef struct GTY(()) dw_loc_list_struct
{
1301 dw_loc_list_ref dw_loc_next
;
1302 const char *begin
; /* Label and addr_entry for start of range */
1303 addr_table_entry
*begin_entry
;
1304 const char *end
; /* Label for end of range */
1305 char *ll_symbol
; /* Label for beginning of location list.
1306 Only on head of list. */
1307 char *vl_symbol
; /* Label for beginning of view list. Ditto. */
1308 const char *section
; /* Section this loclist is relative to */
1309 dw_loc_descr_ref expr
;
1310 var_loc_view vbegin
, vend
;
1312 /* True if all addresses in this and subsequent lists are known to be
1315 /* True if this list has been replaced by dw_loc_next. */
1317 /* True if it has been emitted into .debug_loc* / .debug_loclists*
1319 unsigned char emitted
: 1;
1320 /* True if hash field is index rather than hash value. */
1321 unsigned char num_assigned
: 1;
1322 /* True if .debug_loclists.dwo offset has been emitted for it already. */
1323 unsigned char offset_emitted
: 1;
1324 /* True if note_variable_value_in_expr has been called on it. */
1325 unsigned char noted_variable_value
: 1;
1326 /* True if the range should be emitted even if begin and end
1331 static dw_loc_descr_ref
int_loc_descriptor (poly_int64
);
1332 static dw_loc_descr_ref
uint_loc_descriptor (unsigned HOST_WIDE_INT
);
1334 /* Convert a DWARF stack opcode into its string name. */
1337 dwarf_stack_op_name (unsigned int op
)
1339 const char *name
= get_DW_OP_name (op
);
1344 return "OP_<unknown>";
1347 /* Return TRUE iff we're to output location view lists as a separate
1348 attribute next to the location lists, as an extension compatible
1349 with DWARF 2 and above. */
1352 dwarf2out_locviews_in_attribute ()
1354 return debug_variable_location_views
== 1;
1357 /* Return TRUE iff we're to output location view lists as part of the
1358 location lists, as proposed for standardization after DWARF 5. */
1361 dwarf2out_locviews_in_loclist ()
1363 #ifndef DW_LLE_view_pair
1366 return debug_variable_location_views
== -1;
1370 /* Return a pointer to a newly allocated location description. Location
1371 descriptions are simple expression terms that can be strung
1372 together to form more complicated location (address) descriptions. */
1374 static inline dw_loc_descr_ref
1375 new_loc_descr (enum dwarf_location_atom op
, unsigned HOST_WIDE_INT oprnd1
,
1376 unsigned HOST_WIDE_INT oprnd2
)
1378 dw_loc_descr_ref descr
= ggc_cleared_alloc
<dw_loc_descr_node
> ();
1380 descr
->dw_loc_opc
= op
;
1381 descr
->dw_loc_oprnd1
.val_class
= dw_val_class_unsigned_const
;
1382 descr
->dw_loc_oprnd1
.val_entry
= NULL
;
1383 descr
->dw_loc_oprnd1
.v
.val_unsigned
= oprnd1
;
1384 descr
->dw_loc_oprnd2
.val_class
= dw_val_class_unsigned_const
;
1385 descr
->dw_loc_oprnd2
.val_entry
= NULL
;
1386 descr
->dw_loc_oprnd2
.v
.val_unsigned
= oprnd2
;
1391 /* Add a location description term to a location description expression. */
1394 add_loc_descr (dw_loc_descr_ref
*list_head
, dw_loc_descr_ref descr
)
1396 dw_loc_descr_ref
*d
;
1398 /* Find the end of the chain. */
1399 for (d
= list_head
; (*d
) != NULL
; d
= &(*d
)->dw_loc_next
)
1405 /* Compare two location operands for exact equality. */
1408 dw_val_equal_p (dw_val_node
*a
, dw_val_node
*b
)
1410 if (a
->val_class
!= b
->val_class
)
1412 switch (a
->val_class
)
1414 case dw_val_class_none
:
1416 case dw_val_class_addr
:
1417 return rtx_equal_p (a
->v
.val_addr
, b
->v
.val_addr
);
1419 case dw_val_class_offset
:
1420 case dw_val_class_unsigned_const
:
1421 case dw_val_class_const
:
1422 case dw_val_class_unsigned_const_implicit
:
1423 case dw_val_class_const_implicit
:
1424 case dw_val_class_range_list
:
1425 /* These are all HOST_WIDE_INT, signed or unsigned. */
1426 return a
->v
.val_unsigned
== b
->v
.val_unsigned
;
1428 case dw_val_class_loc
:
1429 return a
->v
.val_loc
== b
->v
.val_loc
;
1430 case dw_val_class_loc_list
:
1431 return a
->v
.val_loc_list
== b
->v
.val_loc_list
;
1432 case dw_val_class_view_list
:
1433 return a
->v
.val_view_list
== b
->v
.val_view_list
;
1434 case dw_val_class_die_ref
:
1435 return a
->v
.val_die_ref
.die
== b
->v
.val_die_ref
.die
;
1436 case dw_val_class_fde_ref
:
1437 return a
->v
.val_fde_index
== b
->v
.val_fde_index
;
1438 case dw_val_class_symview
:
1439 return strcmp (a
->v
.val_symbolic_view
, b
->v
.val_symbolic_view
) == 0;
1440 case dw_val_class_lbl_id
:
1441 case dw_val_class_lineptr
:
1442 case dw_val_class_macptr
:
1443 case dw_val_class_loclistsptr
:
1444 case dw_val_class_high_pc
:
1445 return strcmp (a
->v
.val_lbl_id
, b
->v
.val_lbl_id
) == 0;
1446 case dw_val_class_str
:
1447 return a
->v
.val_str
== b
->v
.val_str
;
1448 case dw_val_class_flag
:
1449 return a
->v
.val_flag
== b
->v
.val_flag
;
1450 case dw_val_class_file
:
1451 case dw_val_class_file_implicit
:
1452 return a
->v
.val_file
== b
->v
.val_file
;
1453 case dw_val_class_decl_ref
:
1454 return a
->v
.val_decl_ref
== b
->v
.val_decl_ref
;
1456 case dw_val_class_const_double
:
1457 return (a
->v
.val_double
.high
== b
->v
.val_double
.high
1458 && a
->v
.val_double
.low
== b
->v
.val_double
.low
);
1460 case dw_val_class_wide_int
:
1461 return *a
->v
.val_wide
== *b
->v
.val_wide
;
1463 case dw_val_class_vec
:
1465 size_t a_len
= a
->v
.val_vec
.elt_size
* a
->v
.val_vec
.length
;
1466 size_t b_len
= b
->v
.val_vec
.elt_size
* b
->v
.val_vec
.length
;
1468 return (a_len
== b_len
1469 && !memcmp (a
->v
.val_vec
.array
, b
->v
.val_vec
.array
, a_len
));
1472 case dw_val_class_data8
:
1473 return memcmp (a
->v
.val_data8
, b
->v
.val_data8
, 8) == 0;
1475 case dw_val_class_vms_delta
:
1476 return (!strcmp (a
->v
.val_vms_delta
.lbl1
, b
->v
.val_vms_delta
.lbl1
)
1477 && !strcmp (a
->v
.val_vms_delta
.lbl1
, b
->v
.val_vms_delta
.lbl1
));
1479 case dw_val_class_discr_value
:
1480 return (a
->v
.val_discr_value
.pos
== b
->v
.val_discr_value
.pos
1481 && a
->v
.val_discr_value
.v
.uval
== b
->v
.val_discr_value
.v
.uval
);
1482 case dw_val_class_discr_list
:
1483 /* It makes no sense comparing two discriminant value lists. */
1489 /* Compare two location atoms for exact equality. */
1492 loc_descr_equal_p_1 (dw_loc_descr_ref a
, dw_loc_descr_ref b
)
1494 if (a
->dw_loc_opc
!= b
->dw_loc_opc
)
1497 /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1498 address size, but since we always allocate cleared storage it
1499 should be zero for other types of locations. */
1500 if (a
->dtprel
!= b
->dtprel
)
1503 return (dw_val_equal_p (&a
->dw_loc_oprnd1
, &b
->dw_loc_oprnd1
)
1504 && dw_val_equal_p (&a
->dw_loc_oprnd2
, &b
->dw_loc_oprnd2
));
1507 /* Compare two complete location expressions for exact equality. */
1510 loc_descr_equal_p (dw_loc_descr_ref a
, dw_loc_descr_ref b
)
1516 if (a
== NULL
|| b
== NULL
)
1518 if (!loc_descr_equal_p_1 (a
, b
))
1527 /* Add a constant POLY_OFFSET to a location expression. */
1530 loc_descr_plus_const (dw_loc_descr_ref
*list_head
, poly_int64 poly_offset
)
1532 dw_loc_descr_ref loc
;
1535 gcc_assert (*list_head
!= NULL
);
1537 if (known_eq (poly_offset
, 0))
1540 /* Find the end of the chain. */
1541 for (loc
= *list_head
; loc
->dw_loc_next
!= NULL
; loc
= loc
->dw_loc_next
)
1544 HOST_WIDE_INT offset
;
1545 if (!poly_offset
.is_constant (&offset
))
1547 loc
->dw_loc_next
= int_loc_descriptor (poly_offset
);
1548 add_loc_descr (&loc
->dw_loc_next
, new_loc_descr (DW_OP_plus
, 0, 0));
1553 if (loc
->dw_loc_opc
== DW_OP_fbreg
1554 || (loc
->dw_loc_opc
>= DW_OP_breg0
&& loc
->dw_loc_opc
<= DW_OP_breg31
))
1555 p
= &loc
->dw_loc_oprnd1
.v
.val_int
;
1556 else if (loc
->dw_loc_opc
== DW_OP_bregx
)
1557 p
= &loc
->dw_loc_oprnd2
.v
.val_int
;
1559 /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1560 offset. Don't optimize if an signed integer overflow would happen. */
1562 && ((offset
> 0 && *p
<= INTTYPE_MAXIMUM (HOST_WIDE_INT
) - offset
)
1563 || (offset
< 0 && *p
>= INTTYPE_MINIMUM (HOST_WIDE_INT
) - offset
)))
1566 else if (offset
> 0)
1567 loc
->dw_loc_next
= new_loc_descr (DW_OP_plus_uconst
, offset
, 0);
1572 = uint_loc_descriptor (-(unsigned HOST_WIDE_INT
) offset
);
1573 add_loc_descr (&loc
->dw_loc_next
, new_loc_descr (DW_OP_minus
, 0, 0));
1577 /* Return a pointer to a newly allocated location description for
1580 static inline dw_loc_descr_ref
1581 new_reg_loc_descr (unsigned int reg
, poly_int64 offset
)
1583 HOST_WIDE_INT const_offset
;
1584 if (offset
.is_constant (&const_offset
))
1587 return new_loc_descr ((enum dwarf_location_atom
) (DW_OP_breg0
+ reg
),
1590 return new_loc_descr (DW_OP_bregx
, reg
, const_offset
);
1594 dw_loc_descr_ref ret
= new_reg_loc_descr (reg
, 0);
1595 loc_descr_plus_const (&ret
, offset
);
1600 /* Add a constant OFFSET to a location list. */
1603 loc_list_plus_const (dw_loc_list_ref list_head
, poly_int64 offset
)
1606 for (d
= list_head
; d
!= NULL
; d
= d
->dw_loc_next
)
1607 loc_descr_plus_const (&d
->expr
, offset
);
1610 #define DWARF_REF_SIZE \
1611 (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1613 /* The number of bits that can be encoded by largest DW_FORM_dataN.
1614 In DWARF4 and earlier it is DW_FORM_data8 with 64 bits, in DWARF5
1615 DW_FORM_data16 with 128 bits. */
1616 #define DWARF_LARGEST_DATA_FORM_BITS \
1617 (dwarf_version >= 5 ? 128 : 64)
1619 /* Utility inline function for construction of ops that were GNU extension
1621 static inline enum dwarf_location_atom
1622 dwarf_OP (enum dwarf_location_atom op
)
1626 case DW_OP_implicit_pointer
:
1627 if (dwarf_version
< 5)
1628 return DW_OP_GNU_implicit_pointer
;
1631 case DW_OP_entry_value
:
1632 if (dwarf_version
< 5)
1633 return DW_OP_GNU_entry_value
;
1636 case DW_OP_const_type
:
1637 if (dwarf_version
< 5)
1638 return DW_OP_GNU_const_type
;
1641 case DW_OP_regval_type
:
1642 if (dwarf_version
< 5)
1643 return DW_OP_GNU_regval_type
;
1646 case DW_OP_deref_type
:
1647 if (dwarf_version
< 5)
1648 return DW_OP_GNU_deref_type
;
1652 if (dwarf_version
< 5)
1653 return DW_OP_GNU_convert
;
1656 case DW_OP_reinterpret
:
1657 if (dwarf_version
< 5)
1658 return DW_OP_GNU_reinterpret
;
1662 if (dwarf_version
< 5)
1663 return DW_OP_GNU_addr_index
;
1667 if (dwarf_version
< 5)
1668 return DW_OP_GNU_const_index
;
1677 /* Similarly for attributes. */
1678 static inline enum dwarf_attribute
1679 dwarf_AT (enum dwarf_attribute at
)
1683 case DW_AT_call_return_pc
:
1684 if (dwarf_version
< 5)
1685 return DW_AT_low_pc
;
1688 case DW_AT_call_tail_call
:
1689 if (dwarf_version
< 5)
1690 return DW_AT_GNU_tail_call
;
1693 case DW_AT_call_origin
:
1694 if (dwarf_version
< 5)
1695 return DW_AT_abstract_origin
;
1698 case DW_AT_call_target
:
1699 if (dwarf_version
< 5)
1700 return DW_AT_GNU_call_site_target
;
1703 case DW_AT_call_target_clobbered
:
1704 if (dwarf_version
< 5)
1705 return DW_AT_GNU_call_site_target_clobbered
;
1708 case DW_AT_call_parameter
:
1709 if (dwarf_version
< 5)
1710 return DW_AT_abstract_origin
;
1713 case DW_AT_call_value
:
1714 if (dwarf_version
< 5)
1715 return DW_AT_GNU_call_site_value
;
1718 case DW_AT_call_data_value
:
1719 if (dwarf_version
< 5)
1720 return DW_AT_GNU_call_site_data_value
;
1723 case DW_AT_call_all_calls
:
1724 if (dwarf_version
< 5)
1725 return DW_AT_GNU_all_call_sites
;
1728 case DW_AT_call_all_tail_calls
:
1729 if (dwarf_version
< 5)
1730 return DW_AT_GNU_all_tail_call_sites
;
1733 case DW_AT_dwo_name
:
1734 if (dwarf_version
< 5)
1735 return DW_AT_GNU_dwo_name
;
1738 case DW_AT_addr_base
:
1739 if (dwarf_version
< 5)
1740 return DW_AT_GNU_addr_base
;
1749 /* And similarly for tags. */
1750 static inline enum dwarf_tag
1751 dwarf_TAG (enum dwarf_tag tag
)
1755 case DW_TAG_call_site
:
1756 if (dwarf_version
< 5)
1757 return DW_TAG_GNU_call_site
;
1760 case DW_TAG_call_site_parameter
:
1761 if (dwarf_version
< 5)
1762 return DW_TAG_GNU_call_site_parameter
;
1771 /* And similarly for forms. */
1772 static inline enum dwarf_form
1773 dwarf_FORM (enum dwarf_form form
)
1778 if (dwarf_version
< 5)
1779 return DW_FORM_GNU_addr_index
;
1783 if (dwarf_version
< 5)
1784 return DW_FORM_GNU_str_index
;
1793 static unsigned long int get_base_type_offset (dw_die_ref
);
1795 /* Return the size of a location descriptor. */
1797 static unsigned long
1798 size_of_loc_descr (dw_loc_descr_ref loc
)
1800 unsigned long size
= 1;
1802 switch (loc
->dw_loc_opc
)
1805 size
+= DWARF2_ADDR_SIZE
;
1807 case DW_OP_GNU_addr_index
:
1809 case DW_OP_GNU_const_index
:
1811 gcc_assert (loc
->dw_loc_oprnd1
.val_entry
->index
!= NO_INDEX_ASSIGNED
);
1812 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.val_entry
->index
);
1831 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
1834 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
1839 case DW_OP_plus_uconst
:
1840 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
1878 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
1881 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
1884 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
1887 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
1888 size
+= size_of_sleb128 (loc
->dw_loc_oprnd2
.v
.val_int
);
1891 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
1893 case DW_OP_bit_piece
:
1894 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
1895 size
+= size_of_uleb128 (loc
->dw_loc_oprnd2
.v
.val_unsigned
);
1897 case DW_OP_deref_size
:
1898 case DW_OP_xderef_size
:
1907 case DW_OP_call_ref
:
1908 case DW_OP_GNU_variable_value
:
1909 size
+= DWARF_REF_SIZE
;
1911 case DW_OP_implicit_value
:
1912 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
)
1913 + loc
->dw_loc_oprnd1
.v
.val_unsigned
;
1915 case DW_OP_implicit_pointer
:
1916 case DW_OP_GNU_implicit_pointer
:
1917 size
+= DWARF_REF_SIZE
+ size_of_sleb128 (loc
->dw_loc_oprnd2
.v
.val_int
);
1919 case DW_OP_entry_value
:
1920 case DW_OP_GNU_entry_value
:
1922 unsigned long op_size
= size_of_locs (loc
->dw_loc_oprnd1
.v
.val_loc
);
1923 size
+= size_of_uleb128 (op_size
) + op_size
;
1926 case DW_OP_const_type
:
1927 case DW_OP_GNU_const_type
:
1930 = get_base_type_offset (loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
);
1931 size
+= size_of_uleb128 (o
) + 1;
1932 switch (loc
->dw_loc_oprnd2
.val_class
)
1934 case dw_val_class_vec
:
1935 size
+= loc
->dw_loc_oprnd2
.v
.val_vec
.length
1936 * loc
->dw_loc_oprnd2
.v
.val_vec
.elt_size
;
1938 case dw_val_class_const
:
1939 size
+= HOST_BITS_PER_WIDE_INT
/ BITS_PER_UNIT
;
1941 case dw_val_class_const_double
:
1942 size
+= HOST_BITS_PER_DOUBLE_INT
/ BITS_PER_UNIT
;
1944 case dw_val_class_wide_int
:
1945 size
+= (get_full_len (*loc
->dw_loc_oprnd2
.v
.val_wide
)
1946 * HOST_BITS_PER_WIDE_INT
/ BITS_PER_UNIT
);
1953 case DW_OP_regval_type
:
1954 case DW_OP_GNU_regval_type
:
1957 = get_base_type_offset (loc
->dw_loc_oprnd2
.v
.val_die_ref
.die
);
1958 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
)
1959 + size_of_uleb128 (o
);
1962 case DW_OP_deref_type
:
1963 case DW_OP_GNU_deref_type
:
1966 = get_base_type_offset (loc
->dw_loc_oprnd2
.v
.val_die_ref
.die
);
1967 size
+= 1 + size_of_uleb128 (o
);
1971 case DW_OP_reinterpret
:
1972 case DW_OP_GNU_convert
:
1973 case DW_OP_GNU_reinterpret
:
1974 if (loc
->dw_loc_oprnd1
.val_class
== dw_val_class_unsigned_const
)
1975 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
1979 = get_base_type_offset (loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
);
1980 size
+= size_of_uleb128 (o
);
1983 case DW_OP_GNU_parameter_ref
:
1993 /* Return the size of a series of location descriptors. */
1996 size_of_locs (dw_loc_descr_ref loc
)
2001 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
2002 field, to avoid writing to a PCH file. */
2003 for (size
= 0, l
= loc
; l
!= NULL
; l
= l
->dw_loc_next
)
2005 if (l
->dw_loc_opc
== DW_OP_skip
|| l
->dw_loc_opc
== DW_OP_bra
)
2007 size
+= size_of_loc_descr (l
);
2012 for (size
= 0, l
= loc
; l
!= NULL
; l
= l
->dw_loc_next
)
2014 l
->dw_loc_addr
= size
;
2015 size
+= size_of_loc_descr (l
);
2021 /* Return the size of the value in a DW_AT_discr_value attribute. */
2024 size_of_discr_value (dw_discr_value
*discr_value
)
2026 if (discr_value
->pos
)
2027 return size_of_uleb128 (discr_value
->v
.uval
);
2029 return size_of_sleb128 (discr_value
->v
.sval
);
2032 /* Return the size of the value in a DW_AT_discr_list attribute. */
2035 size_of_discr_list (dw_discr_list_ref discr_list
)
2039 for (dw_discr_list_ref list
= discr_list
;
2041 list
= list
->dw_discr_next
)
2043 /* One byte for the discriminant value descriptor, and then one or two
2044 LEB128 numbers, depending on whether it's a single case label or a
2047 size
+= size_of_discr_value (&list
->dw_discr_lower_bound
);
2048 if (list
->dw_discr_range
!= 0)
2049 size
+= size_of_discr_value (&list
->dw_discr_upper_bound
);
2054 static HOST_WIDE_INT
extract_int (const unsigned char *, unsigned);
2055 static void get_ref_die_offset_label (char *, dw_die_ref
);
2056 static unsigned long int get_ref_die_offset (dw_die_ref
);
2058 /* Output location description stack opcode's operands (if any).
2059 The for_eh_or_skip parameter controls whether register numbers are
2060 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2061 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2062 info). This should be suppressed for the cases that have not been converted
2063 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */
2066 output_loc_operands (dw_loc_descr_ref loc
, int for_eh_or_skip
)
2068 dw_val_ref val1
= &loc
->dw_loc_oprnd1
;
2069 dw_val_ref val2
= &loc
->dw_loc_oprnd2
;
2071 switch (loc
->dw_loc_opc
)
2073 #ifdef DWARF2_DEBUGGING_INFO
2076 dw2_asm_output_data (2, val1
->v
.val_int
, NULL
);
2081 gcc_assert (targetm
.asm_out
.output_dwarf_dtprel
);
2082 targetm
.asm_out
.output_dwarf_dtprel (asm_out_file
, 4,
2084 fputc ('\n', asm_out_file
);
2089 dw2_asm_output_data (4, val1
->v
.val_int
, NULL
);
2094 gcc_assert (targetm
.asm_out
.output_dwarf_dtprel
);
2095 targetm
.asm_out
.output_dwarf_dtprel (asm_out_file
, 8,
2097 fputc ('\n', asm_out_file
);
2102 gcc_assert (HOST_BITS_PER_WIDE_INT
>= 64);
2103 dw2_asm_output_data (8, val1
->v
.val_int
, NULL
);
2110 gcc_assert (val1
->val_class
== dw_val_class_loc
);
2111 offset
= val1
->v
.val_loc
->dw_loc_addr
- (loc
->dw_loc_addr
+ 3);
2113 dw2_asm_output_data (2, offset
, NULL
);
2116 case DW_OP_implicit_value
:
2117 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
2118 switch (val2
->val_class
)
2120 case dw_val_class_const
:
2121 dw2_asm_output_data (val1
->v
.val_unsigned
, val2
->v
.val_int
, NULL
);
2123 case dw_val_class_vec
:
2125 unsigned int elt_size
= val2
->v
.val_vec
.elt_size
;
2126 unsigned int len
= val2
->v
.val_vec
.length
;
2130 if (elt_size
> sizeof (HOST_WIDE_INT
))
2135 for (i
= 0, p
= (unsigned char *) val2
->v
.val_vec
.array
;
2138 dw2_asm_output_data (elt_size
, extract_int (p
, elt_size
),
2139 "fp or vector constant word %u", i
);
2142 case dw_val_class_const_double
:
2144 unsigned HOST_WIDE_INT first
, second
;
2146 if (WORDS_BIG_ENDIAN
)
2148 first
= val2
->v
.val_double
.high
;
2149 second
= val2
->v
.val_double
.low
;
2153 first
= val2
->v
.val_double
.low
;
2154 second
= val2
->v
.val_double
.high
;
2156 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
,
2158 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
,
2162 case dw_val_class_wide_int
:
2165 int len
= get_full_len (*val2
->v
.val_wide
);
2166 if (WORDS_BIG_ENDIAN
)
2167 for (i
= len
- 1; i
>= 0; --i
)
2168 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
,
2169 val2
->v
.val_wide
->elt (i
), NULL
);
2171 for (i
= 0; i
< len
; ++i
)
2172 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
,
2173 val2
->v
.val_wide
->elt (i
), NULL
);
2176 case dw_val_class_addr
:
2177 gcc_assert (val1
->v
.val_unsigned
== DWARF2_ADDR_SIZE
);
2178 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
, val2
->v
.val_addr
, NULL
);
2193 case DW_OP_implicit_value
:
2194 /* We currently don't make any attempt to make sure these are
2195 aligned properly like we do for the main unwind info, so
2196 don't support emitting things larger than a byte if we're
2197 only doing unwinding. */
2202 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
2205 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
2208 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
2211 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
2213 case DW_OP_plus_uconst
:
2214 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
2248 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
2252 unsigned r
= val1
->v
.val_unsigned
;
2253 if (for_eh_or_skip
>= 0)
2254 r
= DWARF2_FRAME_REG_OUT (r
, for_eh_or_skip
);
2255 gcc_assert (size_of_uleb128 (r
)
2256 == size_of_uleb128 (val1
->v
.val_unsigned
));
2257 dw2_asm_output_data_uleb128 (r
, NULL
);
2261 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
2265 unsigned r
= val1
->v
.val_unsigned
;
2266 if (for_eh_or_skip
>= 0)
2267 r
= DWARF2_FRAME_REG_OUT (r
, for_eh_or_skip
);
2268 gcc_assert (size_of_uleb128 (r
)
2269 == size_of_uleb128 (val1
->v
.val_unsigned
));
2270 dw2_asm_output_data_uleb128 (r
, NULL
);
2271 dw2_asm_output_data_sleb128 (val2
->v
.val_int
, NULL
);
2275 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
2277 case DW_OP_bit_piece
:
2278 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
2279 dw2_asm_output_data_uleb128 (val2
->v
.val_unsigned
, NULL
);
2281 case DW_OP_deref_size
:
2282 case DW_OP_xderef_size
:
2283 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
2289 if (targetm
.asm_out
.output_dwarf_dtprel
)
2291 targetm
.asm_out
.output_dwarf_dtprel (asm_out_file
,
2294 fputc ('\n', asm_out_file
);
2301 #ifdef DWARF2_DEBUGGING_INFO
2302 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
, val1
->v
.val_addr
, NULL
);
2309 case DW_OP_GNU_addr_index
:
2311 case DW_OP_GNU_const_index
:
2313 gcc_assert (loc
->dw_loc_oprnd1
.val_entry
->index
!= NO_INDEX_ASSIGNED
);
2314 dw2_asm_output_data_uleb128 (loc
->dw_loc_oprnd1
.val_entry
->index
,
2315 "(index into .debug_addr)");
2321 unsigned long die_offset
2322 = get_ref_die_offset (val1
->v
.val_die_ref
.die
);
2323 /* Make sure the offset has been computed and that we can encode it as
2325 gcc_assert (die_offset
> 0
2326 && die_offset
<= (loc
->dw_loc_opc
== DW_OP_call2
2329 dw2_asm_output_data ((loc
->dw_loc_opc
== DW_OP_call2
) ? 2 : 4,
2334 case DW_OP_call_ref
:
2335 case DW_OP_GNU_variable_value
:
2337 char label
[MAX_ARTIFICIAL_LABEL_BYTES
2338 + HOST_BITS_PER_WIDE_INT
/ 2 + 2];
2339 gcc_assert (val1
->val_class
== dw_val_class_die_ref
);
2340 get_ref_die_offset_label (label
, val1
->v
.val_die_ref
.die
);
2341 dw2_asm_output_offset (DWARF_REF_SIZE
, label
, debug_info_section
, NULL
);
2345 case DW_OP_implicit_pointer
:
2346 case DW_OP_GNU_implicit_pointer
:
2348 char label
[MAX_ARTIFICIAL_LABEL_BYTES
2349 + HOST_BITS_PER_WIDE_INT
/ 2 + 2];
2350 gcc_assert (val1
->val_class
== dw_val_class_die_ref
);
2351 get_ref_die_offset_label (label
, val1
->v
.val_die_ref
.die
);
2352 dw2_asm_output_offset (DWARF_REF_SIZE
, label
, debug_info_section
, NULL
);
2353 dw2_asm_output_data_sleb128 (val2
->v
.val_int
, NULL
);
2357 case DW_OP_entry_value
:
2358 case DW_OP_GNU_entry_value
:
2359 dw2_asm_output_data_uleb128 (size_of_locs (val1
->v
.val_loc
), NULL
);
2360 output_loc_sequence (val1
->v
.val_loc
, for_eh_or_skip
);
2363 case DW_OP_const_type
:
2364 case DW_OP_GNU_const_type
:
2366 unsigned long o
= get_base_type_offset (val1
->v
.val_die_ref
.die
), l
;
2368 dw2_asm_output_data_uleb128 (o
, NULL
);
2369 switch (val2
->val_class
)
2371 case dw_val_class_const
:
2372 l
= HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
;
2373 dw2_asm_output_data (1, l
, NULL
);
2374 dw2_asm_output_data (l
, val2
->v
.val_int
, NULL
);
2376 case dw_val_class_vec
:
2378 unsigned int elt_size
= val2
->v
.val_vec
.elt_size
;
2379 unsigned int len
= val2
->v
.val_vec
.length
;
2384 dw2_asm_output_data (1, l
, NULL
);
2385 if (elt_size
> sizeof (HOST_WIDE_INT
))
2390 for (i
= 0, p
= (unsigned char *) val2
->v
.val_vec
.array
;
2393 dw2_asm_output_data (elt_size
, extract_int (p
, elt_size
),
2394 "fp or vector constant word %u", i
);
2397 case dw_val_class_const_double
:
2399 unsigned HOST_WIDE_INT first
, second
;
2400 l
= HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
;
2402 dw2_asm_output_data (1, 2 * l
, NULL
);
2403 if (WORDS_BIG_ENDIAN
)
2405 first
= val2
->v
.val_double
.high
;
2406 second
= val2
->v
.val_double
.low
;
2410 first
= val2
->v
.val_double
.low
;
2411 second
= val2
->v
.val_double
.high
;
2413 dw2_asm_output_data (l
, first
, NULL
);
2414 dw2_asm_output_data (l
, second
, NULL
);
2417 case dw_val_class_wide_int
:
2420 int len
= get_full_len (*val2
->v
.val_wide
);
2421 l
= HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
;
2423 dw2_asm_output_data (1, len
* l
, NULL
);
2424 if (WORDS_BIG_ENDIAN
)
2425 for (i
= len
- 1; i
>= 0; --i
)
2426 dw2_asm_output_data (l
, val2
->v
.val_wide
->elt (i
), NULL
);
2428 for (i
= 0; i
< len
; ++i
)
2429 dw2_asm_output_data (l
, val2
->v
.val_wide
->elt (i
), NULL
);
2437 case DW_OP_regval_type
:
2438 case DW_OP_GNU_regval_type
:
2440 unsigned r
= val1
->v
.val_unsigned
;
2441 unsigned long o
= get_base_type_offset (val2
->v
.val_die_ref
.die
);
2443 if (for_eh_or_skip
>= 0)
2445 r
= DWARF2_FRAME_REG_OUT (r
, for_eh_or_skip
);
2446 gcc_assert (size_of_uleb128 (r
)
2447 == size_of_uleb128 (val1
->v
.val_unsigned
));
2449 dw2_asm_output_data_uleb128 (r
, NULL
);
2450 dw2_asm_output_data_uleb128 (o
, NULL
);
2453 case DW_OP_deref_type
:
2454 case DW_OP_GNU_deref_type
:
2456 unsigned long o
= get_base_type_offset (val2
->v
.val_die_ref
.die
);
2458 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
2459 dw2_asm_output_data_uleb128 (o
, NULL
);
2463 case DW_OP_reinterpret
:
2464 case DW_OP_GNU_convert
:
2465 case DW_OP_GNU_reinterpret
:
2466 if (loc
->dw_loc_oprnd1
.val_class
== dw_val_class_unsigned_const
)
2467 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
2470 unsigned long o
= get_base_type_offset (val1
->v
.val_die_ref
.die
);
2472 dw2_asm_output_data_uleb128 (o
, NULL
);
2476 case DW_OP_GNU_parameter_ref
:
2479 gcc_assert (val1
->val_class
== dw_val_class_die_ref
);
2480 o
= get_ref_die_offset (val1
->v
.val_die_ref
.die
);
2481 dw2_asm_output_data (4, o
, NULL
);
2486 /* Other codes have no operands. */
2491 /* Output a sequence of location operations.
2492 The for_eh_or_skip parameter controls whether register numbers are
2493 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2494 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2495 info). This should be suppressed for the cases that have not been converted
2496 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */
2499 output_loc_sequence (dw_loc_descr_ref loc
, int for_eh_or_skip
)
2501 for (; loc
!= NULL
; loc
= loc
->dw_loc_next
)
2503 enum dwarf_location_atom opc
= loc
->dw_loc_opc
;
2504 /* Output the opcode. */
2505 if (for_eh_or_skip
>= 0
2506 && opc
>= DW_OP_breg0
&& opc
<= DW_OP_breg31
)
2508 unsigned r
= (opc
- DW_OP_breg0
);
2509 r
= DWARF2_FRAME_REG_OUT (r
, for_eh_or_skip
);
2510 gcc_assert (r
<= 31);
2511 opc
= (enum dwarf_location_atom
) (DW_OP_breg0
+ r
);
2513 else if (for_eh_or_skip
>= 0
2514 && opc
>= DW_OP_reg0
&& opc
<= DW_OP_reg31
)
2516 unsigned r
= (opc
- DW_OP_reg0
);
2517 r
= DWARF2_FRAME_REG_OUT (r
, for_eh_or_skip
);
2518 gcc_assert (r
<= 31);
2519 opc
= (enum dwarf_location_atom
) (DW_OP_reg0
+ r
);
2522 dw2_asm_output_data (1, opc
,
2523 "%s", dwarf_stack_op_name (opc
));
2525 /* Output the operand(s) (if any). */
2526 output_loc_operands (loc
, for_eh_or_skip
);
2530 /* Output location description stack opcode's operands (if any).
2531 The output is single bytes on a line, suitable for .cfi_escape. */
2534 output_loc_operands_raw (dw_loc_descr_ref loc
)
2536 dw_val_ref val1
= &loc
->dw_loc_oprnd1
;
2537 dw_val_ref val2
= &loc
->dw_loc_oprnd2
;
2539 switch (loc
->dw_loc_opc
)
2542 case DW_OP_GNU_addr_index
:
2544 case DW_OP_GNU_const_index
:
2546 case DW_OP_implicit_value
:
2547 /* We cannot output addresses in .cfi_escape, only bytes. */
2553 case DW_OP_deref_size
:
2554 case DW_OP_xderef_size
:
2555 fputc (',', asm_out_file
);
2556 dw2_asm_output_data_raw (1, val1
->v
.val_int
);
2561 fputc (',', asm_out_file
);
2562 dw2_asm_output_data_raw (2, val1
->v
.val_int
);
2567 fputc (',', asm_out_file
);
2568 dw2_asm_output_data_raw (4, val1
->v
.val_int
);
2573 gcc_assert (HOST_BITS_PER_WIDE_INT
>= 64);
2574 fputc (',', asm_out_file
);
2575 dw2_asm_output_data_raw (8, val1
->v
.val_int
);
2583 gcc_assert (val1
->val_class
== dw_val_class_loc
);
2584 offset
= val1
->v
.val_loc
->dw_loc_addr
- (loc
->dw_loc_addr
+ 3);
2586 fputc (',', asm_out_file
);
2587 dw2_asm_output_data_raw (2, offset
);
2593 unsigned r
= DWARF2_FRAME_REG_OUT (val1
->v
.val_unsigned
, 1);
2594 gcc_assert (size_of_uleb128 (r
)
2595 == size_of_uleb128 (val1
->v
.val_unsigned
));
2596 fputc (',', asm_out_file
);
2597 dw2_asm_output_data_uleb128_raw (r
);
2602 case DW_OP_plus_uconst
:
2604 fputc (',', asm_out_file
);
2605 dw2_asm_output_data_uleb128_raw (val1
->v
.val_unsigned
);
2608 case DW_OP_bit_piece
:
2609 fputc (',', asm_out_file
);
2610 dw2_asm_output_data_uleb128_raw (val1
->v
.val_unsigned
);
2611 dw2_asm_output_data_uleb128_raw (val2
->v
.val_unsigned
);
2648 fputc (',', asm_out_file
);
2649 dw2_asm_output_data_sleb128_raw (val1
->v
.val_int
);
2654 unsigned r
= DWARF2_FRAME_REG_OUT (val1
->v
.val_unsigned
, 1);
2655 gcc_assert (size_of_uleb128 (r
)
2656 == size_of_uleb128 (val1
->v
.val_unsigned
));
2657 fputc (',', asm_out_file
);
2658 dw2_asm_output_data_uleb128_raw (r
);
2659 fputc (',', asm_out_file
);
2660 dw2_asm_output_data_sleb128_raw (val2
->v
.val_int
);
2664 case DW_OP_implicit_pointer
:
2665 case DW_OP_entry_value
:
2666 case DW_OP_const_type
:
2667 case DW_OP_regval_type
:
2668 case DW_OP_deref_type
:
2670 case DW_OP_reinterpret
:
2671 case DW_OP_GNU_implicit_pointer
:
2672 case DW_OP_GNU_entry_value
:
2673 case DW_OP_GNU_const_type
:
2674 case DW_OP_GNU_regval_type
:
2675 case DW_OP_GNU_deref_type
:
2676 case DW_OP_GNU_convert
:
2677 case DW_OP_GNU_reinterpret
:
2678 case DW_OP_GNU_parameter_ref
:
2683 /* Other codes have no operands. */
2689 output_loc_sequence_raw (dw_loc_descr_ref loc
)
2693 enum dwarf_location_atom opc
= loc
->dw_loc_opc
;
2694 /* Output the opcode. */
2695 if (opc
>= DW_OP_breg0
&& opc
<= DW_OP_breg31
)
2697 unsigned r
= (opc
- DW_OP_breg0
);
2698 r
= DWARF2_FRAME_REG_OUT (r
, 1);
2699 gcc_assert (r
<= 31);
2700 opc
= (enum dwarf_location_atom
) (DW_OP_breg0
+ r
);
2702 else if (opc
>= DW_OP_reg0
&& opc
<= DW_OP_reg31
)
2704 unsigned r
= (opc
- DW_OP_reg0
);
2705 r
= DWARF2_FRAME_REG_OUT (r
, 1);
2706 gcc_assert (r
<= 31);
2707 opc
= (enum dwarf_location_atom
) (DW_OP_reg0
+ r
);
2709 /* Output the opcode. */
2710 fprintf (asm_out_file
, "%#x", opc
);
2711 output_loc_operands_raw (loc
);
2713 if (!loc
->dw_loc_next
)
2715 loc
= loc
->dw_loc_next
;
2717 fputc (',', asm_out_file
);
2721 /* This function builds a dwarf location descriptor sequence from a
2722 dw_cfa_location, adding the given OFFSET to the result of the
2725 struct dw_loc_descr_node
*
2726 build_cfa_loc (dw_cfa_location
*cfa
, poly_int64 offset
)
2728 struct dw_loc_descr_node
*head
, *tmp
;
2730 offset
+= cfa
->offset
;
2734 head
= new_reg_loc_descr (cfa
->reg
, cfa
->base_offset
);
2735 head
->dw_loc_oprnd1
.val_class
= dw_val_class_const
;
2736 head
->dw_loc_oprnd1
.val_entry
= NULL
;
2737 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
2738 add_loc_descr (&head
, tmp
);
2739 loc_descr_plus_const (&head
, offset
);
2742 head
= new_reg_loc_descr (cfa
->reg
, offset
);
2747 /* This function builds a dwarf location descriptor sequence for
2748 the address at OFFSET from the CFA when stack is aligned to
2751 struct dw_loc_descr_node
*
2752 build_cfa_aligned_loc (dw_cfa_location
*cfa
,
2753 poly_int64 offset
, HOST_WIDE_INT alignment
)
2755 struct dw_loc_descr_node
*head
;
2756 unsigned int dwarf_fp
2757 = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM
);
2759 /* When CFA is defined as FP+OFFSET, emulate stack alignment. */
2760 if (cfa
->reg
== HARD_FRAME_POINTER_REGNUM
&& cfa
->indirect
== 0)
2762 head
= new_reg_loc_descr (dwarf_fp
, 0);
2763 add_loc_descr (&head
, int_loc_descriptor (alignment
));
2764 add_loc_descr (&head
, new_loc_descr (DW_OP_and
, 0, 0));
2765 loc_descr_plus_const (&head
, offset
);
2768 head
= new_reg_loc_descr (dwarf_fp
, offset
);
2772 /* And now, the support for symbolic debugging information. */
2774 /* .debug_str support. */
2776 static void dwarf2out_init (const char *);
2777 static void dwarf2out_finish (const char *);
2778 static void dwarf2out_early_finish (const char *);
2779 static void dwarf2out_assembly_start (void);
2780 static void dwarf2out_define (unsigned int, const char *);
2781 static void dwarf2out_undef (unsigned int, const char *);
2782 static void dwarf2out_start_source_file (unsigned, const char *);
2783 static void dwarf2out_end_source_file (unsigned);
2784 static void dwarf2out_function_decl (tree
);
2785 static void dwarf2out_begin_block (unsigned, unsigned);
2786 static void dwarf2out_end_block (unsigned, unsigned);
2787 static bool dwarf2out_ignore_block (const_tree
);
2788 static void dwarf2out_early_global_decl (tree
);
2789 static void dwarf2out_late_global_decl (tree
);
2790 static void dwarf2out_type_decl (tree
, int);
2791 static void dwarf2out_imported_module_or_decl (tree
, tree
, tree
, bool, bool);
2792 static void dwarf2out_imported_module_or_decl_1 (tree
, tree
, tree
,
2794 static void dwarf2out_abstract_function (tree
);
2795 static void dwarf2out_var_location (rtx_insn
*);
2796 static void dwarf2out_inline_entry (tree
);
2797 static void dwarf2out_size_function (tree
);
2798 static void dwarf2out_begin_function (tree
);
2799 static void dwarf2out_end_function (unsigned int);
2800 static void dwarf2out_register_main_translation_unit (tree unit
);
2801 static void dwarf2out_set_name (tree
, tree
);
2802 static void dwarf2out_register_external_die (tree decl
, const char *sym
,
2803 unsigned HOST_WIDE_INT off
);
2804 static bool dwarf2out_die_ref_for_decl (tree decl
, const char **sym
,
2805 unsigned HOST_WIDE_INT
*off
);
2807 /* The debug hooks structure. */
2809 const struct gcc_debug_hooks dwarf2_debug_hooks
=
2813 dwarf2out_early_finish
,
2814 dwarf2out_assembly_start
,
2817 dwarf2out_start_source_file
,
2818 dwarf2out_end_source_file
,
2819 dwarf2out_begin_block
,
2820 dwarf2out_end_block
,
2821 dwarf2out_ignore_block
,
2822 dwarf2out_source_line
,
2823 dwarf2out_begin_prologue
,
2824 #if VMS_DEBUGGING_INFO
2825 dwarf2out_vms_end_prologue
,
2826 dwarf2out_vms_begin_epilogue
,
2828 debug_nothing_int_charstar
,
2829 debug_nothing_int_charstar
,
2831 dwarf2out_end_epilogue
,
2832 dwarf2out_begin_function
,
2833 dwarf2out_end_function
, /* end_function */
2834 dwarf2out_register_main_translation_unit
,
2835 dwarf2out_function_decl
, /* function_decl */
2836 dwarf2out_early_global_decl
,
2837 dwarf2out_late_global_decl
,
2838 dwarf2out_type_decl
, /* type_decl */
2839 dwarf2out_imported_module_or_decl
,
2840 dwarf2out_die_ref_for_decl
,
2841 dwarf2out_register_external_die
,
2842 debug_nothing_tree
, /* deferred_inline_function */
2843 /* The DWARF 2 backend tries to reduce debugging bloat by not
2844 emitting the abstract description of inline functions until
2845 something tries to reference them. */
2846 dwarf2out_abstract_function
, /* outlining_inline_function */
2847 debug_nothing_rtx_code_label
, /* label */
2848 debug_nothing_int
, /* handle_pch */
2849 dwarf2out_var_location
,
2850 dwarf2out_inline_entry
, /* inline_entry */
2851 dwarf2out_size_function
, /* size_function */
2852 dwarf2out_switch_text_section
,
2854 1, /* start_end_main_source_file */
2855 TYPE_SYMTAB_IS_DIE
/* tree_type_symtab_field */
2858 const struct gcc_debug_hooks dwarf2_lineno_debug_hooks
=
2861 debug_nothing_charstar
,
2862 debug_nothing_charstar
,
2863 dwarf2out_assembly_start
,
2864 debug_nothing_int_charstar
,
2865 debug_nothing_int_charstar
,
2866 debug_nothing_int_charstar
,
2868 debug_nothing_int_int
, /* begin_block */
2869 debug_nothing_int_int
, /* end_block */
2870 debug_true_const_tree
, /* ignore_block */
2871 dwarf2out_source_line
, /* source_line */
2872 debug_nothing_int_int_charstar
, /* begin_prologue */
2873 debug_nothing_int_charstar
, /* end_prologue */
2874 debug_nothing_int_charstar
, /* begin_epilogue */
2875 debug_nothing_int_charstar
, /* end_epilogue */
2876 debug_nothing_tree
, /* begin_function */
2877 debug_nothing_int
, /* end_function */
2878 debug_nothing_tree
, /* register_main_translation_unit */
2879 debug_nothing_tree
, /* function_decl */
2880 debug_nothing_tree
, /* early_global_decl */
2881 debug_nothing_tree
, /* late_global_decl */
2882 debug_nothing_tree_int
, /* type_decl */
2883 debug_nothing_tree_tree_tree_bool_bool
,/* imported_module_or_decl */
2884 debug_false_tree_charstarstar_uhwistar
,/* die_ref_for_decl */
2885 debug_nothing_tree_charstar_uhwi
, /* register_external_die */
2886 debug_nothing_tree
, /* deferred_inline_function */
2887 debug_nothing_tree
, /* outlining_inline_function */
2888 debug_nothing_rtx_code_label
, /* label */
2889 debug_nothing_int
, /* handle_pch */
2890 debug_nothing_rtx_insn
, /* var_location */
2891 debug_nothing_tree
, /* inline_entry */
2892 debug_nothing_tree
, /* size_function */
2893 debug_nothing_void
, /* switch_text_section */
2894 debug_nothing_tree_tree
, /* set_name */
2895 0, /* start_end_main_source_file */
2896 TYPE_SYMTAB_IS_ADDRESS
/* tree_type_symtab_field */
2899 /* NOTE: In the comments in this file, many references are made to
2900 "Debugging Information Entries". This term is abbreviated as `DIE'
2901 throughout the remainder of this file. */
2903 /* An internal representation of the DWARF output is built, and then
2904 walked to generate the DWARF debugging info. The walk of the internal
2905 representation is done after the entire program has been compiled.
2906 The types below are used to describe the internal representation. */
2908 /* Whether to put type DIEs into their own section .debug_types instead
2909 of making them part of the .debug_info section. Only supported for
2910 Dwarf V4 or higher and the user didn't disable them through
2911 -fno-debug-types-section. It is more efficient to put them in a
2912 separate comdat sections since the linker will then be able to
2913 remove duplicates. But not all tools support .debug_types sections
2914 yet. For Dwarf V5 or higher .debug_types doesn't exist any more,
2915 it is DW_UT_type unit type in .debug_info section. */
2917 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2919 /* Various DIE's use offsets relative to the beginning of the
2920 .debug_info section to refer to each other. */
2922 typedef long int dw_offset
;
2924 struct comdat_type_node
;
2926 /* The entries in the line_info table more-or-less mirror the opcodes
2927 that are used in the real dwarf line table. Arrays of these entries
2928 are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2931 enum dw_line_info_opcode
{
2932 /* Emit DW_LNE_set_address; the operand is the label index. */
2935 /* Emit a row to the matrix with the given line. This may be done
2936 via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2940 /* Emit a DW_LNS_set_file. */
2943 /* Emit a DW_LNS_set_column. */
2946 /* Emit a DW_LNS_negate_stmt; the operand is ignored. */
2949 /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored. */
2950 LI_set_prologue_end
,
2951 LI_set_epilogue_begin
,
2953 /* Emit a DW_LNE_set_discriminator. */
2954 LI_set_discriminator
,
2956 /* Output a Fixed Advance PC; the target PC is the label index; the
2957 base PC is the previous LI_adv_address or LI_set_address entry.
2958 We only use this when emitting debug views without assembler
2959 support, at explicit user request. Ideally, we should only use
2960 it when the offset might be zero but we can't tell: it's the only
2961 way to maybe change the PC without resetting the view number. */
2965 typedef struct GTY(()) dw_line_info_struct
{
2966 enum dw_line_info_opcode opcode
;
2968 } dw_line_info_entry
;
2971 struct GTY(()) dw_line_info_table
{
2972 /* The label that marks the end of this section. */
2973 const char *end_label
;
2975 /* The values for the last row of the matrix, as collected in the table.
2976 These are used to minimize the changes to the next row. */
2977 unsigned int file_num
;
2978 unsigned int line_num
;
2979 unsigned int column_num
;
2984 /* This denotes the NEXT view number.
2986 If it is 0, it is known that the NEXT view will be the first view
2989 If it is -1, we're forcing the view number to be reset, e.g. at a
2992 The meaning of other nonzero values depends on whether we're
2993 computing views internally or leaving it for the assembler to do
2994 so. If we're emitting them internally, view denotes the view
2995 number since the last known advance of PC. If we're leaving it
2996 for the assembler, it denotes the LVU label number that we're
2997 going to ask the assembler to assign. */
3000 /* This counts the number of symbolic views emitted in this table
3001 since the latest view reset. Its max value, over all tables,
3002 sets symview_upper_bound. */
3003 var_loc_view symviews_since_reset
;
3005 #define FORCE_RESET_NEXT_VIEW(x) ((x) = (var_loc_view)-1)
3006 #define RESET_NEXT_VIEW(x) ((x) = (var_loc_view)0)
3007 #define FORCE_RESETTING_VIEW_P(x) ((x) == (var_loc_view)-1)
3008 #define RESETTING_VIEW_P(x) ((x) == (var_loc_view)0 || FORCE_RESETTING_VIEW_P (x))
3010 vec
<dw_line_info_entry
, va_gc
> *entries
;
3013 /* This is an upper bound for view numbers that the assembler may
3014 assign to symbolic views output in this translation. It is used to
3015 decide how big a field to use to represent view numbers in
3016 symview-classed attributes. */
3018 static var_loc_view symview_upper_bound
;
3020 /* If we're keep track of location views and their reset points, and
3021 INSN is a reset point (i.e., it necessarily advances the PC), mark
3022 the next view in TABLE as reset. */
3025 maybe_reset_location_view (rtx_insn
*insn
, dw_line_info_table
*table
)
3027 if (!debug_internal_reset_location_views
)
3030 /* Maybe turn (part of?) this test into a default target hook. */
3033 if (targetm
.reset_location_view
)
3034 reset
= targetm
.reset_location_view (insn
);
3038 else if (JUMP_TABLE_DATA_P (insn
))
3040 else if (GET_CODE (insn
) == USE
3041 || GET_CODE (insn
) == CLOBBER
3042 || GET_CODE (insn
) == ASM_INPUT
3043 || asm_noperands (insn
) >= 0)
3045 else if (get_attr_min_length (insn
) > 0)
3048 if (reset
> 0 && !RESETTING_VIEW_P (table
->view
))
3049 RESET_NEXT_VIEW (table
->view
);
3052 /* Each DIE attribute has a field specifying the attribute kind,
3053 a link to the next attribute in the chain, and an attribute value.
3054 Attributes are typically linked below the DIE they modify. */
3056 typedef struct GTY(()) dw_attr_struct
{
3057 enum dwarf_attribute dw_attr
;
3058 dw_val_node dw_attr_val
;
3063 /* The Debugging Information Entry (DIE) structure. DIEs form a tree.
3064 The children of each node form a circular list linked by
3065 die_sib. die_child points to the node *before* the "first" child node. */
3067 typedef struct GTY((chain_circular ("%h.die_sib"), for_user
)) die_struct
{
3068 union die_symbol_or_type_node
3070 const char * GTY ((tag ("0"))) die_symbol
;
3071 comdat_type_node
*GTY ((tag ("1"))) die_type_node
;
3073 GTY ((desc ("%0.comdat_type_p"))) die_id
;
3074 vec
<dw_attr_node
, va_gc
> *die_attr
;
3075 dw_die_ref die_parent
;
3076 dw_die_ref die_child
;
3078 dw_die_ref die_definition
; /* ref from a specification to its definition */
3079 dw_offset die_offset
;
3080 unsigned long die_abbrev
;
3082 unsigned int decl_id
;
3083 enum dwarf_tag die_tag
;
3084 /* Die is used and must not be pruned as unused. */
3085 BOOL_BITFIELD die_perennial_p
: 1;
3086 BOOL_BITFIELD comdat_type_p
: 1; /* DIE has a type signature */
3087 /* For an external ref to die_symbol if die_offset contains an extra
3088 offset to that symbol. */
3089 BOOL_BITFIELD with_offset
: 1;
3090 /* Whether this DIE was removed from the DIE tree, for example via
3091 prune_unused_types. We don't consider those present from the
3092 DIE lookup routines. */
3093 BOOL_BITFIELD removed
: 1;
3094 /* Lots of spare bits. */
3098 /* Set to TRUE while dwarf2out_early_global_decl is running. */
3099 static bool early_dwarf
;
3100 static bool early_dwarf_finished
;
3101 struct set_early_dwarf
{
3103 set_early_dwarf () : saved(early_dwarf
)
3105 gcc_assert (! early_dwarf_finished
);
3108 ~set_early_dwarf () { early_dwarf
= saved
; }
3111 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */
3112 #define FOR_EACH_CHILD(die, c, expr) do { \
3113 c = die->die_child; \
3117 } while (c != die->die_child); \
3120 /* The pubname structure */
3122 typedef struct GTY(()) pubname_struct
{
3129 struct GTY(()) dw_ranges
{
3131 /* If this is positive, it's a block number, otherwise it's a
3132 bitwise-negated index into dw_ranges_by_label. */
3134 /* Index for the range list for DW_FORM_rnglistx. */
3135 unsigned int idx
: 31;
3136 /* True if this range might be possibly in a different section
3137 from previous entry. */
3138 unsigned int maybe_new_sec
: 1;
3141 /* A structure to hold a macinfo entry. */
3143 typedef struct GTY(()) macinfo_struct
{
3145 unsigned HOST_WIDE_INT lineno
;
3151 struct GTY(()) dw_ranges_by_label
{
3156 /* The comdat type node structure. */
3157 struct GTY(()) comdat_type_node
3159 dw_die_ref root_die
;
3160 dw_die_ref type_die
;
3161 dw_die_ref skeleton_die
;
3162 char signature
[DWARF_TYPE_SIGNATURE_SIZE
];
3163 comdat_type_node
*next
;
3166 /* A list of DIEs for which we can't determine ancestry (parent_die
3167 field) just yet. Later in dwarf2out_finish we will fill in the
3169 typedef struct GTY(()) limbo_die_struct
{
3171 /* The tree for which this DIE was created. We use this to
3172 determine ancestry later. */
3174 struct limbo_die_struct
*next
;
3178 typedef struct skeleton_chain_struct
3182 struct skeleton_chain_struct
*parent
;
3184 skeleton_chain_node
;
3186 /* Define a macro which returns nonzero for a TYPE_DECL which was
3187 implicitly generated for a type.
3189 Note that, unlike the C front-end (which generates a NULL named
3190 TYPE_DECL node for each complete tagged type, each array type,
3191 and each function type node created) the C++ front-end generates
3192 a _named_ TYPE_DECL node for each tagged type node created.
3193 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3194 generate a DW_TAG_typedef DIE for them. Likewise with the Ada
3195 front-end, but for each type, tagged or not. */
3197 #define TYPE_DECL_IS_STUB(decl) \
3198 (DECL_NAME (decl) == NULL_TREE \
3199 || (DECL_ARTIFICIAL (decl) \
3200 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
3201 /* This is necessary for stub decls that \
3202 appear in nested inline functions. */ \
3203 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3204 && (decl_ultimate_origin (decl) \
3205 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3207 /* Information concerning the compilation unit's programming
3208 language, and compiler version. */
3210 /* Fixed size portion of the DWARF compilation unit header. */
3211 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
3212 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE \
3213 + (dwarf_version >= 5 ? 4 : 3))
3215 /* Fixed size portion of the DWARF comdat type unit header. */
3216 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
3217 (DWARF_COMPILE_UNIT_HEADER_SIZE \
3218 + DWARF_TYPE_SIGNATURE_SIZE + DWARF_OFFSET_SIZE)
3220 /* Fixed size portion of the DWARF skeleton compilation unit header. */
3221 #define DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE \
3222 (DWARF_COMPILE_UNIT_HEADER_SIZE + (dwarf_version >= 5 ? 8 : 0))
3224 /* Fixed size portion of public names info. */
3225 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3227 /* Fixed size portion of the address range info. */
3228 #define DWARF_ARANGES_HEADER_SIZE \
3229 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3230 DWARF2_ADDR_SIZE * 2) \
3231 - DWARF_INITIAL_LENGTH_SIZE)
3233 /* Size of padding portion in the address range info. It must be
3234 aligned to twice the pointer size. */
3235 #define DWARF_ARANGES_PAD_SIZE \
3236 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3237 DWARF2_ADDR_SIZE * 2) \
3238 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3240 /* Use assembler line directives if available. */
3241 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3242 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3243 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3245 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3249 /* Use assembler views in line directives if available. */
3250 #ifndef DWARF2_ASM_VIEW_DEBUG_INFO
3251 #ifdef HAVE_AS_DWARF2_DEBUG_VIEW
3252 #define DWARF2_ASM_VIEW_DEBUG_INFO 1
3254 #define DWARF2_ASM_VIEW_DEBUG_INFO 0
3258 /* Return true if GCC configure detected assembler support for .loc. */
3261 dwarf2out_default_as_loc_support (void)
3263 return DWARF2_ASM_LINE_DEBUG_INFO
;
3264 #if (GCC_VERSION >= 3000)
3265 # undef DWARF2_ASM_LINE_DEBUG_INFO
3266 # pragma GCC poison DWARF2_ASM_LINE_DEBUG_INFO
3270 /* Return true if GCC configure detected assembler support for views
3271 in .loc directives. */
3274 dwarf2out_default_as_locview_support (void)
3276 return DWARF2_ASM_VIEW_DEBUG_INFO
;
3277 #if (GCC_VERSION >= 3000)
3278 # undef DWARF2_ASM_VIEW_DEBUG_INFO
3279 # pragma GCC poison DWARF2_ASM_VIEW_DEBUG_INFO
3283 /* A bit is set in ZERO_VIEW_P if we are using the assembler-supported
3284 view computation, and it refers to a view identifier for which we
3285 will not emit a label because it is known to map to a view number
3286 zero. We won't allocate the bitmap if we're not using assembler
3287 support for location views, but we have to make the variable
3288 visible for GGC and for code that will be optimized out for lack of
3289 support but that's still parsed and compiled. We could abstract it
3290 out with macros, but it's not worth it. */
3291 static GTY(()) bitmap zero_view_p
;
3293 /* Evaluate to TRUE iff N is known to identify the first location view
3294 at its PC. When not using assembler location view computation,
3295 that must be view number zero. Otherwise, ZERO_VIEW_P is allocated
3296 and views label numbers recorded in it are the ones known to be
3298 #define ZERO_VIEW_P(N) ((N) == (var_loc_view)0 \
3299 || (N) == (var_loc_view)-1 \
3301 && bitmap_bit_p (zero_view_p, (N))))
3303 /* Return true iff we're to emit .loc directives for the assembler to
3304 generate line number sections.
3306 When we're not emitting views, all we need from the assembler is
3307 support for .loc directives.
3309 If we are emitting views, we can only use the assembler's .loc
3310 support if it also supports views.
3312 When the compiler is emitting the line number programs and
3313 computing view numbers itself, it resets view numbers at known PC
3314 changes and counts from that, and then it emits view numbers as
3315 literal constants in locviewlists. There are cases in which the
3316 compiler is not sure about PC changes, e.g. when extra alignment is
3317 requested for a label. In these cases, the compiler may not reset
3318 the view counter, and the potential PC advance in the line number
3319 program will use an opcode that does not reset the view counter
3320 even if the PC actually changes, so that compiler and debug info
3321 consumer can keep view numbers in sync.
3323 When the compiler defers view computation to the assembler, it
3324 emits symbolic view numbers in locviewlists, with the exception of
3325 views known to be zero (forced resets, or reset after
3326 compiler-visible PC changes): instead of emitting symbols for
3327 these, we emit literal zero and assert the assembler agrees with
3328 the compiler's assessment. We could use symbolic views everywhere,
3329 instead of special-casing zero views, but then we'd be unable to
3330 optimize out locviewlists that contain only zeros. */
3333 output_asm_line_debug_info (void)
3335 return (dwarf2out_as_loc_support
3336 && (dwarf2out_as_locview_support
3337 || !debug_variable_location_views
));
3340 /* Minimum line offset in a special line info. opcode.
3341 This value was chosen to give a reasonable range of values. */
3342 #define DWARF_LINE_BASE -10
3344 /* First special line opcode - leave room for the standard opcodes. */
3345 #define DWARF_LINE_OPCODE_BASE ((int)DW_LNS_set_isa + 1)
3347 /* Range of line offsets in a special line info. opcode. */
3348 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
3350 /* Flag that indicates the initial value of the is_stmt_start flag.
3351 In the present implementation, we do not mark any lines as
3352 the beginning of a source statement, because that information
3353 is not made available by the GCC front-end. */
3354 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3356 /* Maximum number of operations per instruction bundle. */
3357 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
3358 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
3361 /* This location is used by calc_die_sizes() to keep track
3362 the offset of each DIE within the .debug_info section. */
3363 static unsigned long next_die_offset
;
3365 /* Record the root of the DIE's built for the current compilation unit. */
3366 static GTY(()) dw_die_ref single_comp_unit_die
;
3368 /* A list of type DIEs that have been separated into comdat sections. */
3369 static GTY(()) comdat_type_node
*comdat_type_list
;
3371 /* A list of CU DIEs that have been separated. */
3372 static GTY(()) limbo_die_node
*cu_die_list
;
3374 /* A list of DIEs with a NULL parent waiting to be relocated. */
3375 static GTY(()) limbo_die_node
*limbo_die_list
;
3377 /* A list of DIEs for which we may have to generate
3378 DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set. */
3379 static GTY(()) limbo_die_node
*deferred_asm_name
;
3381 struct dwarf_file_hasher
: ggc_ptr_hash
<dwarf_file_data
>
3383 typedef const char *compare_type
;
3385 static hashval_t
hash (dwarf_file_data
*);
3386 static bool equal (dwarf_file_data
*, const char *);
3389 /* Filenames referenced by this compilation unit. */
3390 static GTY(()) hash_table
<dwarf_file_hasher
> *file_table
;
3392 struct decl_die_hasher
: ggc_ptr_hash
<die_node
>
3394 typedef tree compare_type
;
3396 static hashval_t
hash (die_node
*);
3397 static bool equal (die_node
*, tree
);
3399 /* A hash table of references to DIE's that describe declarations.
3400 The key is a DECL_UID() which is a unique number identifying each decl. */
3401 static GTY (()) hash_table
<decl_die_hasher
> *decl_die_table
;
3403 struct GTY ((for_user
)) variable_value_struct
{
3404 unsigned int decl_id
;
3405 vec
<dw_die_ref
, va_gc
> *dies
;
3408 struct variable_value_hasher
: ggc_ptr_hash
<variable_value_struct
>
3410 typedef tree compare_type
;
3412 static hashval_t
hash (variable_value_struct
*);
3413 static bool equal (variable_value_struct
*, tree
);
3415 /* A hash table of DIEs that contain DW_OP_GNU_variable_value with
3416 dw_val_class_decl_ref class, indexed by FUNCTION_DECLs which is
3417 DECL_CONTEXT of the referenced VAR_DECLs. */
3418 static GTY (()) hash_table
<variable_value_hasher
> *variable_value_hash
;
3420 struct block_die_hasher
: ggc_ptr_hash
<die_struct
>
3422 static hashval_t
hash (die_struct
*);
3423 static bool equal (die_struct
*, die_struct
*);
3426 /* A hash table of references to DIE's that describe COMMON blocks.
3427 The key is DECL_UID() ^ die_parent. */
3428 static GTY (()) hash_table
<block_die_hasher
> *common_block_die_table
;
3430 typedef struct GTY(()) die_arg_entry_struct
{
3436 /* Node of the variable location list. */
3437 struct GTY ((chain_next ("%h.next"))) var_loc_node
{
3438 /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
3439 EXPR_LIST chain. For small bitsizes, bitsize is encoded
3440 in mode of the EXPR_LIST node and first EXPR_LIST operand
3441 is either NOTE_INSN_VAR_LOCATION for a piece with a known
3442 location or NULL for padding. For larger bitsizes,
3443 mode is 0 and first operand is a CONCAT with bitsize
3444 as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
3445 NULL as second operand. */
3447 const char * GTY (()) label
;
3448 struct var_loc_node
* GTY (()) next
;
3452 /* Variable location list. */
3453 struct GTY ((for_user
)) var_loc_list_def
{
3454 struct var_loc_node
* GTY (()) first
;
3456 /* Pointer to the last but one or last element of the
3457 chained list. If the list is empty, both first and
3458 last are NULL, if the list contains just one node
3459 or the last node certainly is not redundant, it points
3460 to the last node, otherwise points to the last but one.
3461 Do not mark it for GC because it is marked through the chain. */
3462 struct var_loc_node
* GTY ((skip ("%h"))) last
;
3464 /* Pointer to the last element before section switch,
3465 if NULL, either sections weren't switched or first
3466 is after section switch. */
3467 struct var_loc_node
* GTY ((skip ("%h"))) last_before_switch
;
3469 /* DECL_UID of the variable decl. */
3470 unsigned int decl_id
;
3472 typedef struct var_loc_list_def var_loc_list
;
3474 /* Call argument location list. */
3475 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node
{
3476 rtx
GTY (()) call_arg_loc_note
;
3477 const char * GTY (()) label
;
3478 tree
GTY (()) block
;
3480 rtx
GTY (()) symbol_ref
;
3481 struct call_arg_loc_node
* GTY (()) next
;
3485 struct decl_loc_hasher
: ggc_ptr_hash
<var_loc_list
>
3487 typedef const_tree compare_type
;
3489 static hashval_t
hash (var_loc_list
*);
3490 static bool equal (var_loc_list
*, const_tree
);
3493 /* Table of decl location linked lists. */
3494 static GTY (()) hash_table
<decl_loc_hasher
> *decl_loc_table
;
3496 /* Head and tail of call_arg_loc chain. */
3497 static GTY (()) struct call_arg_loc_node
*call_arg_locations
;
3498 static struct call_arg_loc_node
*call_arg_loc_last
;
3500 /* Number of call sites in the current function. */
3501 static int call_site_count
= -1;
3502 /* Number of tail call sites in the current function. */
3503 static int tail_call_site_count
= -1;
3505 /* A cached location list. */
3506 struct GTY ((for_user
)) cached_dw_loc_list_def
{
3507 /* The DECL_UID of the decl that this entry describes. */
3508 unsigned int decl_id
;
3510 /* The cached location list. */
3511 dw_loc_list_ref loc_list
;
3513 typedef struct cached_dw_loc_list_def cached_dw_loc_list
;
3515 struct dw_loc_list_hasher
: ggc_ptr_hash
<cached_dw_loc_list
>
3518 typedef const_tree compare_type
;
3520 static hashval_t
hash (cached_dw_loc_list
*);
3521 static bool equal (cached_dw_loc_list
*, const_tree
);
3524 /* Table of cached location lists. */
3525 static GTY (()) hash_table
<dw_loc_list_hasher
> *cached_dw_loc_list_table
;
3527 /* A vector of references to DIE's that are uniquely identified by their tag,
3528 presence/absence of children DIE's, and list of attribute/value pairs. */
3529 static GTY(()) vec
<dw_die_ref
, va_gc
> *abbrev_die_table
;
3531 /* A hash map to remember the stack usage for DWARF procedures. The value
3532 stored is the stack size difference between before the DWARF procedure
3533 invokation and after it returned. In other words, for a DWARF procedure
3534 that consumes N stack slots and that pushes M ones, this stores M - N. */
3535 static hash_map
<dw_die_ref
, int> *dwarf_proc_stack_usage_map
;
3537 /* A global counter for generating labels for line number data. */
3538 static unsigned int line_info_label_num
;
3540 /* The current table to which we should emit line number information
3541 for the current function. This will be set up at the beginning of
3542 assembly for the function. */
3543 static GTY(()) dw_line_info_table
*cur_line_info_table
;
3545 /* The two default tables of line number info. */
3546 static GTY(()) dw_line_info_table
*text_section_line_info
;
3547 static GTY(()) dw_line_info_table
*cold_text_section_line_info
;
3549 /* The set of all non-default tables of line number info. */
3550 static GTY(()) vec
<dw_line_info_table
*, va_gc
> *separate_line_info
;
3552 /* A flag to tell pubnames/types export if there is an info section to
3554 static bool info_section_emitted
;
3556 /* A pointer to the base of a table that contains a list of publicly
3557 accessible names. */
3558 static GTY (()) vec
<pubname_entry
, va_gc
> *pubname_table
;
3560 /* A pointer to the base of a table that contains a list of publicly
3561 accessible types. */
3562 static GTY (()) vec
<pubname_entry
, va_gc
> *pubtype_table
;
3564 /* A pointer to the base of a table that contains a list of macro
3565 defines/undefines (and file start/end markers). */
3566 static GTY (()) vec
<macinfo_entry
, va_gc
> *macinfo_table
;
3568 /* True if .debug_macinfo or .debug_macros section is going to be
3570 #define have_macinfo \
3571 ((!XCOFF_DEBUGGING_INFO || HAVE_XCOFF_DWARF_EXTRAS) \
3572 && debug_info_level >= DINFO_LEVEL_VERBOSE \
3573 && !macinfo_table->is_empty ())
3575 /* Vector of dies for which we should generate .debug_ranges info. */
3576 static GTY (()) vec
<dw_ranges
, va_gc
> *ranges_table
;
3578 /* Vector of pairs of labels referenced in ranges_table. */
3579 static GTY (()) vec
<dw_ranges_by_label
, va_gc
> *ranges_by_label
;
3581 /* Whether we have location lists that need outputting */
3582 static GTY(()) bool have_location_lists
;
3584 /* Unique label counter. */
3585 static GTY(()) unsigned int loclabel_num
;
3587 /* Unique label counter for point-of-call tables. */
3588 static GTY(()) unsigned int poc_label_num
;
3590 /* The last file entry emitted by maybe_emit_file(). */
3591 static GTY(()) struct dwarf_file_data
* last_emitted_file
;
3593 /* Number of internal labels generated by gen_internal_sym(). */
3594 static GTY(()) int label_num
;
3596 static GTY(()) vec
<die_arg_entry
, va_gc
> *tmpl_value_parm_die_table
;
3598 /* Instances of generic types for which we need to generate debug
3599 info that describe their generic parameters and arguments. That
3600 generation needs to happen once all types are properly laid out so
3601 we do it at the end of compilation. */
3602 static GTY(()) vec
<tree
, va_gc
> *generic_type_instances
;
3604 /* Offset from the "steady-state frame pointer" to the frame base,
3605 within the current function. */
3606 static poly_int64 frame_pointer_fb_offset
;
3607 static bool frame_pointer_fb_offset_valid
;
3609 static vec
<dw_die_ref
> base_types
;
3611 /* Flags to represent a set of attribute classes for attributes that represent
3612 a scalar value (bounds, pointers, ...). */
3615 dw_scalar_form_constant
= 0x01,
3616 dw_scalar_form_exprloc
= 0x02,
3617 dw_scalar_form_reference
= 0x04
3620 /* Forward declarations for functions defined in this file. */
3622 static int is_pseudo_reg (const_rtx
);
3623 static tree
type_main_variant (tree
);
3624 static int is_tagged_type (const_tree
);
3625 static const char *dwarf_tag_name (unsigned);
3626 static const char *dwarf_attr_name (unsigned);
3627 static const char *dwarf_form_name (unsigned);
3628 static tree
decl_ultimate_origin (const_tree
);
3629 static tree
decl_class_context (tree
);
3630 static void add_dwarf_attr (dw_die_ref
, dw_attr_node
*);
3631 static inline enum dw_val_class
AT_class (dw_attr_node
*);
3632 static inline unsigned int AT_index (dw_attr_node
*);
3633 static void add_AT_flag (dw_die_ref
, enum dwarf_attribute
, unsigned);
3634 static inline unsigned AT_flag (dw_attr_node
*);
3635 static void add_AT_int (dw_die_ref
, enum dwarf_attribute
, HOST_WIDE_INT
);
3636 static inline HOST_WIDE_INT
AT_int (dw_attr_node
*);
3637 static void add_AT_unsigned (dw_die_ref
, enum dwarf_attribute
, unsigned HOST_WIDE_INT
);
3638 static inline unsigned HOST_WIDE_INT
AT_unsigned (dw_attr_node
*);
3639 static void add_AT_double (dw_die_ref
, enum dwarf_attribute
,
3640 HOST_WIDE_INT
, unsigned HOST_WIDE_INT
);
3641 static inline void add_AT_vec (dw_die_ref
, enum dwarf_attribute
, unsigned int,
3642 unsigned int, unsigned char *);
3643 static void add_AT_data8 (dw_die_ref
, enum dwarf_attribute
, unsigned char *);
3644 static void add_AT_string (dw_die_ref
, enum dwarf_attribute
, const char *);
3645 static inline const char *AT_string (dw_attr_node
*);
3646 static enum dwarf_form
AT_string_form (dw_attr_node
*);
3647 static void add_AT_die_ref (dw_die_ref
, enum dwarf_attribute
, dw_die_ref
);
3648 static void add_AT_specification (dw_die_ref
, dw_die_ref
);
3649 static inline dw_die_ref
AT_ref (dw_attr_node
*);
3650 static inline int AT_ref_external (dw_attr_node
*);
3651 static inline void set_AT_ref_external (dw_attr_node
*, int);
3652 static void add_AT_loc (dw_die_ref
, enum dwarf_attribute
, dw_loc_descr_ref
);
3653 static inline dw_loc_descr_ref
AT_loc (dw_attr_node
*);
3654 static void add_AT_loc_list (dw_die_ref
, enum dwarf_attribute
,
3656 static inline dw_loc_list_ref
AT_loc_list (dw_attr_node
*);
3657 static void add_AT_view_list (dw_die_ref
, enum dwarf_attribute
);
3658 static inline dw_loc_list_ref
AT_loc_list (dw_attr_node
*);
3659 static addr_table_entry
*add_addr_table_entry (void *, enum ate_kind
);
3660 static void remove_addr_table_entry (addr_table_entry
*);
3661 static void add_AT_addr (dw_die_ref
, enum dwarf_attribute
, rtx
, bool);
3662 static inline rtx
AT_addr (dw_attr_node
*);
3663 static void add_AT_symview (dw_die_ref
, enum dwarf_attribute
, const char *);
3664 static void add_AT_lbl_id (dw_die_ref
, enum dwarf_attribute
, const char *);
3665 static void add_AT_lineptr (dw_die_ref
, enum dwarf_attribute
, const char *);
3666 static void add_AT_macptr (dw_die_ref
, enum dwarf_attribute
, const char *);
3667 static void add_AT_range_list (dw_die_ref
, enum dwarf_attribute
,
3668 unsigned long, bool);
3669 static inline const char *AT_lbl (dw_attr_node
*);
3670 static dw_attr_node
*get_AT (dw_die_ref
, enum dwarf_attribute
);
3671 static const char *get_AT_low_pc (dw_die_ref
);
3672 static const char *get_AT_string (dw_die_ref
, enum dwarf_attribute
);
3673 static int get_AT_flag (dw_die_ref
, enum dwarf_attribute
);
3674 static unsigned get_AT_unsigned (dw_die_ref
, enum dwarf_attribute
);
3675 static inline dw_die_ref
get_AT_ref (dw_die_ref
, enum dwarf_attribute
);
3676 static bool is_c (void);
3677 static bool is_cxx (void);
3678 static bool is_cxx (const_tree
);
3679 static bool is_fortran (void);
3680 static bool is_ada (void);
3681 static bool remove_AT (dw_die_ref
, enum dwarf_attribute
);
3682 static void remove_child_TAG (dw_die_ref
, enum dwarf_tag
);
3683 static void add_child_die (dw_die_ref
, dw_die_ref
);
3684 static dw_die_ref
new_die (enum dwarf_tag
, dw_die_ref
, tree
);
3685 static dw_die_ref
lookup_type_die (tree
);
3686 static dw_die_ref
strip_naming_typedef (tree
, dw_die_ref
);
3687 static dw_die_ref
lookup_type_die_strip_naming_typedef (tree
);
3688 static void equate_type_number_to_die (tree
, dw_die_ref
);
3689 static dw_die_ref
lookup_decl_die (tree
);
3690 static var_loc_list
*lookup_decl_loc (const_tree
);
3691 static void equate_decl_number_to_die (tree
, dw_die_ref
);
3692 static struct var_loc_node
*add_var_loc_to_decl (tree
, rtx
, const char *, var_loc_view
);
3693 static void print_spaces (FILE *);
3694 static void print_die (dw_die_ref
, FILE *);
3695 static void loc_checksum (dw_loc_descr_ref
, struct md5_ctx
*);
3696 static void attr_checksum (dw_attr_node
*, struct md5_ctx
*, int *);
3697 static void die_checksum (dw_die_ref
, struct md5_ctx
*, int *);
3698 static void checksum_sleb128 (HOST_WIDE_INT
, struct md5_ctx
*);
3699 static void checksum_uleb128 (unsigned HOST_WIDE_INT
, struct md5_ctx
*);
3700 static void loc_checksum_ordered (dw_loc_descr_ref
, struct md5_ctx
*);
3701 static void attr_checksum_ordered (enum dwarf_tag
, dw_attr_node
*,
3702 struct md5_ctx
*, int *);
3703 struct checksum_attributes
;
3704 static void collect_checksum_attributes (struct checksum_attributes
*, dw_die_ref
);
3705 static void die_checksum_ordered (dw_die_ref
, struct md5_ctx
*, int *);
3706 static void checksum_die_context (dw_die_ref
, struct md5_ctx
*);
3707 static void generate_type_signature (dw_die_ref
, comdat_type_node
*);
3708 static int same_loc_p (dw_loc_descr_ref
, dw_loc_descr_ref
, int *);
3709 static int same_dw_val_p (const dw_val_node
*, const dw_val_node
*, int *);
3710 static int same_attr_p (dw_attr_node
*, dw_attr_node
*, int *);
3711 static int same_die_p (dw_die_ref
, dw_die_ref
, int *);
3712 static int is_type_die (dw_die_ref
);
3713 static inline bool is_template_instantiation (dw_die_ref
);
3714 static int is_declaration_die (dw_die_ref
);
3715 static int should_move_die_to_comdat (dw_die_ref
);
3716 static dw_die_ref
clone_as_declaration (dw_die_ref
);
3717 static dw_die_ref
clone_die (dw_die_ref
);
3718 static dw_die_ref
clone_tree (dw_die_ref
);
3719 static dw_die_ref
copy_declaration_context (dw_die_ref
, dw_die_ref
);
3720 static void generate_skeleton_ancestor_tree (skeleton_chain_node
*);
3721 static void generate_skeleton_bottom_up (skeleton_chain_node
*);
3722 static dw_die_ref
generate_skeleton (dw_die_ref
);
3723 static dw_die_ref
remove_child_or_replace_with_skeleton (dw_die_ref
,
3726 static void break_out_comdat_types (dw_die_ref
);
3727 static void copy_decls_for_unworthy_types (dw_die_ref
);
3729 static void add_sibling_attributes (dw_die_ref
);
3730 static void output_location_lists (dw_die_ref
);
3731 static int constant_size (unsigned HOST_WIDE_INT
);
3732 static unsigned long size_of_die (dw_die_ref
);
3733 static void calc_die_sizes (dw_die_ref
);
3734 static void calc_base_type_die_sizes (void);
3735 static void mark_dies (dw_die_ref
);
3736 static void unmark_dies (dw_die_ref
);
3737 static void unmark_all_dies (dw_die_ref
);
3738 static unsigned long size_of_pubnames (vec
<pubname_entry
, va_gc
> *);
3739 static unsigned long size_of_aranges (void);
3740 static enum dwarf_form
value_format (dw_attr_node
*);
3741 static void output_value_format (dw_attr_node
*);
3742 static void output_abbrev_section (void);
3743 static void output_die_abbrevs (unsigned long, dw_die_ref
);
3744 static void output_die (dw_die_ref
);
3745 static void output_compilation_unit_header (enum dwarf_unit_type
);
3746 static void output_comp_unit (dw_die_ref
, int, const unsigned char *);
3747 static void output_comdat_type_unit (comdat_type_node
*);
3748 static const char *dwarf2_name (tree
, int);
3749 static void add_pubname (tree
, dw_die_ref
);
3750 static void add_enumerator_pubname (const char *, dw_die_ref
);
3751 static void add_pubname_string (const char *, dw_die_ref
);
3752 static void add_pubtype (tree
, dw_die_ref
);
3753 static void output_pubnames (vec
<pubname_entry
, va_gc
> *);
3754 static void output_aranges (void);
3755 static unsigned int add_ranges (const_tree
, bool = false);
3756 static void add_ranges_by_labels (dw_die_ref
, const char *, const char *,
3758 static void output_ranges (void);
3759 static dw_line_info_table
*new_line_info_table (void);
3760 static void output_line_info (bool);
3761 static void output_file_names (void);
3762 static dw_die_ref
base_type_die (tree
, bool);
3763 static int is_base_type (tree
);
3764 static dw_die_ref
subrange_type_die (tree
, tree
, tree
, tree
, dw_die_ref
);
3765 static int decl_quals (const_tree
);
3766 static dw_die_ref
modified_type_die (tree
, int, bool, dw_die_ref
);
3767 static dw_die_ref
generic_parameter_die (tree
, tree
, bool, dw_die_ref
);
3768 static dw_die_ref
template_parameter_pack_die (tree
, tree
, dw_die_ref
);
3769 static unsigned int dbx_reg_number (const_rtx
);
3770 static void add_loc_descr_op_piece (dw_loc_descr_ref
*, int);
3771 static dw_loc_descr_ref
reg_loc_descriptor (rtx
, enum var_init_status
);
3772 static dw_loc_descr_ref
one_reg_loc_descriptor (unsigned int,
3773 enum var_init_status
);
3774 static dw_loc_descr_ref
multiple_reg_loc_descriptor (rtx
, rtx
,
3775 enum var_init_status
);
3776 static dw_loc_descr_ref
based_loc_descr (rtx
, poly_int64
,
3777 enum var_init_status
);
3778 static int is_based_loc (const_rtx
);
3779 static bool resolve_one_addr (rtx
*);
3780 static dw_loc_descr_ref
concat_loc_descriptor (rtx
, rtx
,
3781 enum var_init_status
);
3782 static dw_loc_descr_ref
loc_descriptor (rtx
, machine_mode mode
,
3783 enum var_init_status
);
3784 struct loc_descr_context
;
3785 static void add_loc_descr_to_each (dw_loc_list_ref list
, dw_loc_descr_ref ref
);
3786 static void add_loc_list (dw_loc_list_ref
*ret
, dw_loc_list_ref list
);
3787 static dw_loc_list_ref
loc_list_from_tree (tree
, int,
3788 struct loc_descr_context
*);
3789 static dw_loc_descr_ref
loc_descriptor_from_tree (tree
, int,
3790 struct loc_descr_context
*);
3791 static tree
field_type (const_tree
);
3792 static unsigned int simple_type_align_in_bits (const_tree
);
3793 static unsigned int simple_decl_align_in_bits (const_tree
);
3794 static unsigned HOST_WIDE_INT
simple_type_size_in_bits (const_tree
);
3796 static dw_loc_descr_ref
field_byte_offset (const_tree
, struct vlr_context
*,
3798 static void add_AT_location_description (dw_die_ref
, enum dwarf_attribute
,
3800 static void add_data_member_location_attribute (dw_die_ref
, tree
,
3801 struct vlr_context
*);
3802 static bool add_const_value_attribute (dw_die_ref
, rtx
);
3803 static void insert_int (HOST_WIDE_INT
, unsigned, unsigned char *);
3804 static void insert_wide_int (const wide_int
&, unsigned char *, int);
3805 static void insert_float (const_rtx
, unsigned char *);
3806 static rtx
rtl_for_decl_location (tree
);
3807 static bool add_location_or_const_value_attribute (dw_die_ref
, tree
, bool);
3808 static bool tree_add_const_value_attribute (dw_die_ref
, tree
);
3809 static bool tree_add_const_value_attribute_for_decl (dw_die_ref
, tree
);
3810 static void add_name_attribute (dw_die_ref
, const char *);
3811 static void add_desc_attribute (dw_die_ref
, tree
);
3812 static void add_gnat_descriptive_type_attribute (dw_die_ref
, tree
, dw_die_ref
);
3813 static void add_comp_dir_attribute (dw_die_ref
);
3814 static void add_scalar_info (dw_die_ref
, enum dwarf_attribute
, tree
, int,
3815 struct loc_descr_context
*);
3816 static void add_bound_info (dw_die_ref
, enum dwarf_attribute
, tree
,
3817 struct loc_descr_context
*);
3818 static void add_subscript_info (dw_die_ref
, tree
, bool);
3819 static void add_byte_size_attribute (dw_die_ref
, tree
);
3820 static void add_alignment_attribute (dw_die_ref
, tree
);
3821 static inline void add_bit_offset_attribute (dw_die_ref
, tree
,
3822 struct vlr_context
*);
3823 static void add_bit_size_attribute (dw_die_ref
, tree
);
3824 static void add_prototyped_attribute (dw_die_ref
, tree
);
3825 static void add_abstract_origin_attribute (dw_die_ref
, tree
);
3826 static void add_pure_or_virtual_attribute (dw_die_ref
, tree
);
3827 static void add_src_coords_attributes (dw_die_ref
, tree
);
3828 static void add_name_and_src_coords_attributes (dw_die_ref
, tree
, bool = false);
3829 static void add_discr_value (dw_die_ref
, dw_discr_value
*);
3830 static void add_discr_list (dw_die_ref
, dw_discr_list_ref
);
3831 static inline dw_discr_list_ref
AT_discr_list (dw_attr_node
*);
3832 static dw_die_ref
scope_die_for (tree
, dw_die_ref
);
3833 static inline int local_scope_p (dw_die_ref
);
3834 static inline int class_scope_p (dw_die_ref
);
3835 static inline int class_or_namespace_scope_p (dw_die_ref
);
3836 static void add_type_attribute (dw_die_ref
, tree
, int, bool, dw_die_ref
);
3837 static void add_calling_convention_attribute (dw_die_ref
, tree
);
3838 static const char *type_tag (const_tree
);
3839 static tree
member_declared_type (const_tree
);
3841 static const char *decl_start_label (tree
);
3843 static void gen_array_type_die (tree
, dw_die_ref
);
3844 static void gen_descr_array_type_die (tree
, struct array_descr_info
*, dw_die_ref
);
3846 static void gen_entry_point_die (tree
, dw_die_ref
);
3848 static dw_die_ref
gen_enumeration_type_die (tree
, dw_die_ref
);
3849 static dw_die_ref
gen_formal_parameter_die (tree
, tree
, bool, dw_die_ref
);
3850 static dw_die_ref
gen_formal_parameter_pack_die (tree
, tree
, dw_die_ref
, tree
*);
3851 static void gen_unspecified_parameters_die (tree
, dw_die_ref
);
3852 static void gen_formal_types_die (tree
, dw_die_ref
);
3853 static void gen_subprogram_die (tree
, dw_die_ref
);
3854 static void gen_variable_die (tree
, tree
, dw_die_ref
);
3855 static void gen_const_die (tree
, dw_die_ref
);
3856 static void gen_label_die (tree
, dw_die_ref
);
3857 static void gen_lexical_block_die (tree
, dw_die_ref
);
3858 static void gen_inlined_subroutine_die (tree
, dw_die_ref
);
3859 static void gen_field_die (tree
, struct vlr_context
*, dw_die_ref
);
3860 static void gen_ptr_to_mbr_type_die (tree
, dw_die_ref
);
3861 static dw_die_ref
gen_compile_unit_die (const char *);
3862 static void gen_inheritance_die (tree
, tree
, tree
, dw_die_ref
);
3863 static void gen_member_die (tree
, dw_die_ref
);
3864 static void gen_struct_or_union_type_die (tree
, dw_die_ref
,
3865 enum debug_info_usage
);
3866 static void gen_subroutine_type_die (tree
, dw_die_ref
);
3867 static void gen_typedef_die (tree
, dw_die_ref
);
3868 static void gen_type_die (tree
, dw_die_ref
);
3869 static void gen_block_die (tree
, dw_die_ref
);
3870 static void decls_for_scope (tree
, dw_die_ref
, bool = true);
3871 static bool is_naming_typedef_decl (const_tree
);
3872 static inline dw_die_ref
get_context_die (tree
);
3873 static void gen_namespace_die (tree
, dw_die_ref
);
3874 static dw_die_ref
gen_namelist_decl (tree
, dw_die_ref
, tree
);
3875 static dw_die_ref
gen_decl_die (tree
, tree
, struct vlr_context
*, dw_die_ref
);
3876 static dw_die_ref
force_decl_die (tree
);
3877 static dw_die_ref
force_type_die (tree
);
3878 static dw_die_ref
setup_namespace_context (tree
, dw_die_ref
);
3879 static dw_die_ref
declare_in_namespace (tree
, dw_die_ref
);
3880 static struct dwarf_file_data
* lookup_filename (const char *);
3881 static void retry_incomplete_types (void);
3882 static void gen_type_die_for_member (tree
, tree
, dw_die_ref
);
3883 static void gen_generic_params_dies (tree
);
3884 static void gen_tagged_type_die (tree
, dw_die_ref
, enum debug_info_usage
);
3885 static void gen_type_die_with_usage (tree
, dw_die_ref
, enum debug_info_usage
);
3886 static void splice_child_die (dw_die_ref
, dw_die_ref
);
3887 static int file_info_cmp (const void *, const void *);
3888 static dw_loc_list_ref
new_loc_list (dw_loc_descr_ref
, const char *, var_loc_view
,
3889 const char *, var_loc_view
, const char *);
3890 static void output_loc_list (dw_loc_list_ref
);
3891 static char *gen_internal_sym (const char *);
3892 static bool want_pubnames (void);
3894 static void prune_unmark_dies (dw_die_ref
);
3895 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref
);
3896 static void prune_unused_types_mark (dw_die_ref
, int);
3897 static void prune_unused_types_walk (dw_die_ref
);
3898 static void prune_unused_types_walk_attribs (dw_die_ref
);
3899 static void prune_unused_types_prune (dw_die_ref
);
3900 static void prune_unused_types (void);
3901 static int maybe_emit_file (struct dwarf_file_data
*fd
);
3902 static inline const char *AT_vms_delta1 (dw_attr_node
*);
3903 static inline const char *AT_vms_delta2 (dw_attr_node
*);
3904 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref
, tree
);
3905 static void gen_remaining_tmpl_value_param_die_attribute (void);
3906 static bool generic_type_p (tree
);
3907 static void schedule_generic_params_dies_gen (tree t
);
3908 static void gen_scheduled_generic_parms_dies (void);
3909 static void resolve_variable_values (void);
3911 static const char *comp_dir_string (void);
3913 static void hash_loc_operands (dw_loc_descr_ref
, inchash::hash
&);
3915 /* enum for tracking thread-local variables whose address is really an offset
3916 relative to the TLS pointer, which will need link-time relocation, but will
3917 not need relocation by the DWARF consumer. */
3925 /* Return the operator to use for an address of a variable. For dtprel_true, we
3926 use DW_OP_const*. For regular variables, which need both link-time
3927 relocation and consumer-level relocation (e.g., to account for shared objects
3928 loaded at a random address), we use DW_OP_addr*. */
3930 static inline enum dwarf_location_atom
3931 dw_addr_op (enum dtprel_bool dtprel
)
3933 if (dtprel
== dtprel_true
)
3934 return (dwarf_split_debug_info
? dwarf_OP (DW_OP_constx
)
3935 : (DWARF2_ADDR_SIZE
== 4 ? DW_OP_const4u
: DW_OP_const8u
));
3937 return dwarf_split_debug_info
? dwarf_OP (DW_OP_addrx
) : DW_OP_addr
;
3940 /* Return a pointer to a newly allocated address location description. If
3941 dwarf_split_debug_info is true, then record the address with the appropriate
3943 static inline dw_loc_descr_ref
3944 new_addr_loc_descr (rtx addr
, enum dtprel_bool dtprel
)
3946 dw_loc_descr_ref ref
= new_loc_descr (dw_addr_op (dtprel
), 0, 0);
3948 ref
->dw_loc_oprnd1
.val_class
= dw_val_class_addr
;
3949 ref
->dw_loc_oprnd1
.v
.val_addr
= addr
;
3950 ref
->dtprel
= dtprel
;
3951 if (dwarf_split_debug_info
)
3952 ref
->dw_loc_oprnd1
.val_entry
3953 = add_addr_table_entry (addr
,
3954 dtprel
? ate_kind_rtx_dtprel
: ate_kind_rtx
);
3956 ref
->dw_loc_oprnd1
.val_entry
= NULL
;
3961 /* Section names used to hold DWARF debugging information. */
3963 #ifndef DEBUG_INFO_SECTION
3964 #define DEBUG_INFO_SECTION ".debug_info"
3966 #ifndef DEBUG_DWO_INFO_SECTION
3967 #define DEBUG_DWO_INFO_SECTION ".debug_info.dwo"
3969 #ifndef DEBUG_LTO_INFO_SECTION
3970 #define DEBUG_LTO_INFO_SECTION ".gnu.debuglto_.debug_info"
3972 #ifndef DEBUG_LTO_DWO_INFO_SECTION
3973 #define DEBUG_LTO_DWO_INFO_SECTION ".gnu.debuglto_.debug_info.dwo"
3975 #ifndef DEBUG_ABBREV_SECTION
3976 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
3978 #ifndef DEBUG_LTO_ABBREV_SECTION
3979 #define DEBUG_LTO_ABBREV_SECTION ".gnu.debuglto_.debug_abbrev"
3981 #ifndef DEBUG_DWO_ABBREV_SECTION
3982 #define DEBUG_DWO_ABBREV_SECTION ".debug_abbrev.dwo"
3984 #ifndef DEBUG_LTO_DWO_ABBREV_SECTION
3985 #define DEBUG_LTO_DWO_ABBREV_SECTION ".gnu.debuglto_.debug_abbrev.dwo"
3987 #ifndef DEBUG_ARANGES_SECTION
3988 #define DEBUG_ARANGES_SECTION ".debug_aranges"
3990 #ifndef DEBUG_ADDR_SECTION
3991 #define DEBUG_ADDR_SECTION ".debug_addr"
3993 #ifndef DEBUG_MACINFO_SECTION
3994 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
3996 #ifndef DEBUG_LTO_MACINFO_SECTION
3997 #define DEBUG_LTO_MACINFO_SECTION ".gnu.debuglto_.debug_macinfo"
3999 #ifndef DEBUG_DWO_MACINFO_SECTION
4000 #define DEBUG_DWO_MACINFO_SECTION ".debug_macinfo.dwo"
4002 #ifndef DEBUG_LTO_DWO_MACINFO_SECTION
4003 #define DEBUG_LTO_DWO_MACINFO_SECTION ".gnu.debuglto_.debug_macinfo.dwo"
4005 #ifndef DEBUG_MACRO_SECTION
4006 #define DEBUG_MACRO_SECTION ".debug_macro"
4008 #ifndef DEBUG_LTO_MACRO_SECTION
4009 #define DEBUG_LTO_MACRO_SECTION ".gnu.debuglto_.debug_macro"
4011 #ifndef DEBUG_DWO_MACRO_SECTION
4012 #define DEBUG_DWO_MACRO_SECTION ".debug_macro.dwo"
4014 #ifndef DEBUG_LTO_DWO_MACRO_SECTION
4015 #define DEBUG_LTO_DWO_MACRO_SECTION ".gnu.debuglto_.debug_macro.dwo"
4017 #ifndef DEBUG_LINE_SECTION
4018 #define DEBUG_LINE_SECTION ".debug_line"
4020 #ifndef DEBUG_LTO_LINE_SECTION
4021 #define DEBUG_LTO_LINE_SECTION ".gnu.debuglto_.debug_line"
4023 #ifndef DEBUG_DWO_LINE_SECTION
4024 #define DEBUG_DWO_LINE_SECTION ".debug_line.dwo"
4026 #ifndef DEBUG_LTO_DWO_LINE_SECTION
4027 #define DEBUG_LTO_DWO_LINE_SECTION ".gnu.debuglto_.debug_line.dwo"
4029 #ifndef DEBUG_LOC_SECTION
4030 #define DEBUG_LOC_SECTION ".debug_loc"
4032 #ifndef DEBUG_DWO_LOC_SECTION
4033 #define DEBUG_DWO_LOC_SECTION ".debug_loc.dwo"
4035 #ifndef DEBUG_LOCLISTS_SECTION
4036 #define DEBUG_LOCLISTS_SECTION ".debug_loclists"
4038 #ifndef DEBUG_DWO_LOCLISTS_SECTION
4039 #define DEBUG_DWO_LOCLISTS_SECTION ".debug_loclists.dwo"
4041 #ifndef DEBUG_PUBNAMES_SECTION
4042 #define DEBUG_PUBNAMES_SECTION \
4043 ((debug_generate_pub_sections == 2) \
4044 ? ".debug_gnu_pubnames" : ".debug_pubnames")
4046 #ifndef DEBUG_PUBTYPES_SECTION
4047 #define DEBUG_PUBTYPES_SECTION \
4048 ((debug_generate_pub_sections == 2) \
4049 ? ".debug_gnu_pubtypes" : ".debug_pubtypes")
4051 #ifndef DEBUG_STR_OFFSETS_SECTION
4052 #define DEBUG_STR_OFFSETS_SECTION ".debug_str_offsets"
4054 #ifndef DEBUG_DWO_STR_OFFSETS_SECTION
4055 #define DEBUG_DWO_STR_OFFSETS_SECTION ".debug_str_offsets.dwo"
4057 #ifndef DEBUG_LTO_DWO_STR_OFFSETS_SECTION
4058 #define DEBUG_LTO_DWO_STR_OFFSETS_SECTION ".gnu.debuglto_.debug_str_offsets.dwo"
4060 #ifndef DEBUG_STR_SECTION
4061 #define DEBUG_STR_SECTION ".debug_str"
4063 #ifndef DEBUG_LTO_STR_SECTION
4064 #define DEBUG_LTO_STR_SECTION ".gnu.debuglto_.debug_str"
4066 #ifndef DEBUG_STR_DWO_SECTION
4067 #define DEBUG_STR_DWO_SECTION ".debug_str.dwo"
4069 #ifndef DEBUG_LTO_STR_DWO_SECTION
4070 #define DEBUG_LTO_STR_DWO_SECTION ".gnu.debuglto_.debug_str.dwo"
4072 #ifndef DEBUG_RANGES_SECTION
4073 #define DEBUG_RANGES_SECTION ".debug_ranges"
4075 #ifndef DEBUG_RNGLISTS_SECTION
4076 #define DEBUG_RNGLISTS_SECTION ".debug_rnglists"
4078 #ifndef DEBUG_LINE_STR_SECTION
4079 #define DEBUG_LINE_STR_SECTION ".debug_line_str"
4081 #ifndef DEBUG_LTO_LINE_STR_SECTION
4082 #define DEBUG_LTO_LINE_STR_SECTION ".gnu.debuglto_.debug_line_str"
4085 /* Standard ELF section names for compiled code and data. */
4086 #ifndef TEXT_SECTION_NAME
4087 #define TEXT_SECTION_NAME ".text"
4090 /* Section flags for .debug_str section. */
4091 #define DEBUG_STR_SECTION_FLAGS \
4092 (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
4093 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
4096 /* Section flags for .debug_str.dwo section. */
4097 #define DEBUG_STR_DWO_SECTION_FLAGS (SECTION_DEBUG | SECTION_EXCLUDE)
4099 /* Attribute used to refer to the macro section. */
4100 #define DEBUG_MACRO_ATTRIBUTE (dwarf_version >= 5 ? DW_AT_macros \
4101 : dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros)
4103 /* Labels we insert at beginning sections we can reference instead of
4104 the section names themselves. */
4106 #ifndef TEXT_SECTION_LABEL
4107 #define TEXT_SECTION_LABEL "Ltext"
4109 #ifndef COLD_TEXT_SECTION_LABEL
4110 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
4112 #ifndef DEBUG_LINE_SECTION_LABEL
4113 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
4115 #ifndef DEBUG_SKELETON_LINE_SECTION_LABEL
4116 #define DEBUG_SKELETON_LINE_SECTION_LABEL "Lskeleton_debug_line"
4118 #ifndef DEBUG_INFO_SECTION_LABEL
4119 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
4121 #ifndef DEBUG_SKELETON_INFO_SECTION_LABEL
4122 #define DEBUG_SKELETON_INFO_SECTION_LABEL "Lskeleton_debug_info"
4124 #ifndef DEBUG_ABBREV_SECTION_LABEL
4125 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
4127 #ifndef DEBUG_SKELETON_ABBREV_SECTION_LABEL
4128 #define DEBUG_SKELETON_ABBREV_SECTION_LABEL "Lskeleton_debug_abbrev"
4130 #ifndef DEBUG_ADDR_SECTION_LABEL
4131 #define DEBUG_ADDR_SECTION_LABEL "Ldebug_addr"
4133 #ifndef DEBUG_LOC_SECTION_LABEL
4134 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
4136 #ifndef DEBUG_RANGES_SECTION_LABEL
4137 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
4139 #ifndef DEBUG_MACINFO_SECTION_LABEL
4140 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
4142 #ifndef DEBUG_MACRO_SECTION_LABEL
4143 #define DEBUG_MACRO_SECTION_LABEL "Ldebug_macro"
4145 #define SKELETON_COMP_DIE_ABBREV 1
4146 #define SKELETON_TYPE_DIE_ABBREV 2
4148 /* Definitions of defaults for formats and names of various special
4149 (artificial) labels which may be generated within this file (when the -g
4150 options is used and DWARF2_DEBUGGING_INFO is in effect.
4151 If necessary, these may be overridden from within the tm.h file, but
4152 typically, overriding these defaults is unnecessary. */
4154 static char text_end_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4155 static char text_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4156 static char cold_text_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4157 static char cold_end_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4158 static char abbrev_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4159 static char debug_info_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4160 static char debug_skeleton_info_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4161 static char debug_skeleton_abbrev_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4162 static char debug_line_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4163 static char debug_addr_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4164 static char debug_skeleton_line_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4165 static char macinfo_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4166 static char loc_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4167 static char ranges_section_label
[2 * MAX_ARTIFICIAL_LABEL_BYTES
];
4168 static char ranges_base_label
[2 * MAX_ARTIFICIAL_LABEL_BYTES
];
4170 #ifndef TEXT_END_LABEL
4171 #define TEXT_END_LABEL "Letext"
4173 #ifndef COLD_END_LABEL
4174 #define COLD_END_LABEL "Letext_cold"
4176 #ifndef BLOCK_BEGIN_LABEL
4177 #define BLOCK_BEGIN_LABEL "LBB"
4179 #ifndef BLOCK_INLINE_ENTRY_LABEL
4180 #define BLOCK_INLINE_ENTRY_LABEL "LBI"
4182 #ifndef BLOCK_END_LABEL
4183 #define BLOCK_END_LABEL "LBE"
4185 #ifndef LINE_CODE_LABEL
4186 #define LINE_CODE_LABEL "LM"
4190 /* Return the root of the DIE's built for the current compilation unit. */
4192 comp_unit_die (void)
4194 if (!single_comp_unit_die
)
4195 single_comp_unit_die
= gen_compile_unit_die (NULL
);
4196 return single_comp_unit_die
;
4199 /* We allow a language front-end to designate a function that is to be
4200 called to "demangle" any name before it is put into a DIE. */
4202 static const char *(*demangle_name_func
) (const char *);
4205 dwarf2out_set_demangle_name_func (const char *(*func
) (const char *))
4207 demangle_name_func
= func
;
4210 /* Test if rtl node points to a pseudo register. */
4213 is_pseudo_reg (const_rtx rtl
)
4215 return ((REG_P (rtl
) && REGNO (rtl
) >= FIRST_PSEUDO_REGISTER
)
4216 || (GET_CODE (rtl
) == SUBREG
4217 && REGNO (SUBREG_REG (rtl
)) >= FIRST_PSEUDO_REGISTER
));
4220 /* Return a reference to a type, with its const and volatile qualifiers
4224 type_main_variant (tree type
)
4226 type
= TYPE_MAIN_VARIANT (type
);
4228 /* ??? There really should be only one main variant among any group of
4229 variants of a given type (and all of the MAIN_VARIANT values for all
4230 members of the group should point to that one type) but sometimes the C
4231 front-end messes this up for array types, so we work around that bug
4233 if (TREE_CODE (type
) == ARRAY_TYPE
)
4234 while (type
!= TYPE_MAIN_VARIANT (type
))
4235 type
= TYPE_MAIN_VARIANT (type
);
4240 /* Return nonzero if the given type node represents a tagged type. */
4243 is_tagged_type (const_tree type
)
4245 enum tree_code code
= TREE_CODE (type
);
4247 return (code
== RECORD_TYPE
|| code
== UNION_TYPE
4248 || code
== QUAL_UNION_TYPE
|| code
== ENUMERAL_TYPE
);
4251 /* Set label to debug_info_section_label + die_offset of a DIE reference. */
4254 get_ref_die_offset_label (char *label
, dw_die_ref ref
)
4256 sprintf (label
, "%s+%ld", debug_info_section_label
, ref
->die_offset
);
4259 /* Return die_offset of a DIE reference to a base type. */
4261 static unsigned long int
4262 get_base_type_offset (dw_die_ref ref
)
4264 if (ref
->die_offset
)
4265 return ref
->die_offset
;
4266 if (comp_unit_die ()->die_abbrev
)
4268 calc_base_type_die_sizes ();
4269 gcc_assert (ref
->die_offset
);
4271 return ref
->die_offset
;
4274 /* Return die_offset of a DIE reference other than base type. */
4276 static unsigned long int
4277 get_ref_die_offset (dw_die_ref ref
)
4279 gcc_assert (ref
->die_offset
);
4280 return ref
->die_offset
;
4283 /* Convert a DIE tag into its string name. */
4286 dwarf_tag_name (unsigned int tag
)
4288 const char *name
= get_DW_TAG_name (tag
);
4293 return "DW_TAG_<unknown>";
4296 /* Convert a DWARF attribute code into its string name. */
4299 dwarf_attr_name (unsigned int attr
)
4305 #if VMS_DEBUGGING_INFO
4306 case DW_AT_HP_prologue
:
4307 return "DW_AT_HP_prologue";
4309 case DW_AT_MIPS_loop_unroll_factor
:
4310 return "DW_AT_MIPS_loop_unroll_factor";
4313 #if VMS_DEBUGGING_INFO
4314 case DW_AT_HP_epilogue
:
4315 return "DW_AT_HP_epilogue";
4317 case DW_AT_MIPS_stride
:
4318 return "DW_AT_MIPS_stride";
4322 name
= get_DW_AT_name (attr
);
4327 return "DW_AT_<unknown>";
4330 /* Convert a DWARF value form code into its string name. */
4333 dwarf_form_name (unsigned int form
)
4335 const char *name
= get_DW_FORM_name (form
);
4340 return "DW_FORM_<unknown>";
4343 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4344 instance of an inlined instance of a decl which is local to an inline
4345 function, so we have to trace all of the way back through the origin chain
4346 to find out what sort of node actually served as the original seed for the
4350 decl_ultimate_origin (const_tree decl
)
4352 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl
), TS_DECL_COMMON
))
4355 /* DECL_ABSTRACT_ORIGIN can point to itself; ignore that if
4356 we're trying to output the abstract instance of this function. */
4357 if (DECL_ABSTRACT_P (decl
) && DECL_ABSTRACT_ORIGIN (decl
) == decl
)
4360 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4361 most distant ancestor, this should never happen. */
4362 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl
)));
4364 return DECL_ABSTRACT_ORIGIN (decl
);
4367 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4368 of a virtual function may refer to a base class, so we check the 'this'
4372 decl_class_context (tree decl
)
4374 tree context
= NULL_TREE
;
4376 if (TREE_CODE (decl
) != FUNCTION_DECL
|| ! DECL_VINDEX (decl
))
4377 context
= DECL_CONTEXT (decl
);
4379 context
= TYPE_MAIN_VARIANT
4380 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl
)))));
4382 if (context
&& !TYPE_P (context
))
4383 context
= NULL_TREE
;
4388 /* Add an attribute/value pair to a DIE. */
4391 add_dwarf_attr (dw_die_ref die
, dw_attr_node
*attr
)
4393 /* Maybe this should be an assert? */
4399 /* Check we do not add duplicate attrs. Can't use get_AT here
4400 because that recurses to the specification/abstract origin DIE. */
4403 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
4404 gcc_assert (a
->dw_attr
!= attr
->dw_attr
);
4407 vec_safe_reserve (die
->die_attr
, 1);
4408 vec_safe_push (die
->die_attr
, *attr
);
4411 static inline enum dw_val_class
4412 AT_class (dw_attr_node
*a
)
4414 return a
->dw_attr_val
.val_class
;
4417 /* Return the index for any attribute that will be referenced with a
4418 DW_FORM_addrx/GNU_addr_index or DW_FORM_strx/GNU_str_index. String
4419 indices are stored in dw_attr_val.v.val_str for reference counting
4422 static inline unsigned int
4423 AT_index (dw_attr_node
*a
)
4425 if (AT_class (a
) == dw_val_class_str
)
4426 return a
->dw_attr_val
.v
.val_str
->index
;
4427 else if (a
->dw_attr_val
.val_entry
!= NULL
)
4428 return a
->dw_attr_val
.val_entry
->index
;
4432 /* Add a flag value attribute to a DIE. */
4435 add_AT_flag (dw_die_ref die
, enum dwarf_attribute attr_kind
, unsigned int flag
)
4439 attr
.dw_attr
= attr_kind
;
4440 attr
.dw_attr_val
.val_class
= dw_val_class_flag
;
4441 attr
.dw_attr_val
.val_entry
= NULL
;
4442 attr
.dw_attr_val
.v
.val_flag
= flag
;
4443 add_dwarf_attr (die
, &attr
);
4446 static inline unsigned
4447 AT_flag (dw_attr_node
*a
)
4449 gcc_assert (a
&& AT_class (a
) == dw_val_class_flag
);
4450 return a
->dw_attr_val
.v
.val_flag
;
4453 /* Add a signed integer attribute value to a DIE. */
4456 add_AT_int (dw_die_ref die
, enum dwarf_attribute attr_kind
, HOST_WIDE_INT int_val
)
4460 attr
.dw_attr
= attr_kind
;
4461 attr
.dw_attr_val
.val_class
= dw_val_class_const
;
4462 attr
.dw_attr_val
.val_entry
= NULL
;
4463 attr
.dw_attr_val
.v
.val_int
= int_val
;
4464 add_dwarf_attr (die
, &attr
);
4467 static inline HOST_WIDE_INT
4468 AT_int (dw_attr_node
*a
)
4470 gcc_assert (a
&& (AT_class (a
) == dw_val_class_const
4471 || AT_class (a
) == dw_val_class_const_implicit
));
4472 return a
->dw_attr_val
.v
.val_int
;
4475 /* Add an unsigned integer attribute value to a DIE. */
4478 add_AT_unsigned (dw_die_ref die
, enum dwarf_attribute attr_kind
,
4479 unsigned HOST_WIDE_INT unsigned_val
)
4483 attr
.dw_attr
= attr_kind
;
4484 attr
.dw_attr_val
.val_class
= dw_val_class_unsigned_const
;
4485 attr
.dw_attr_val
.val_entry
= NULL
;
4486 attr
.dw_attr_val
.v
.val_unsigned
= unsigned_val
;
4487 add_dwarf_attr (die
, &attr
);
4490 static inline unsigned HOST_WIDE_INT
4491 AT_unsigned (dw_attr_node
*a
)
4493 gcc_assert (a
&& (AT_class (a
) == dw_val_class_unsigned_const
4494 || AT_class (a
) == dw_val_class_unsigned_const_implicit
));
4495 return a
->dw_attr_val
.v
.val_unsigned
;
4498 /* Add an unsigned wide integer attribute value to a DIE. */
4501 add_AT_wide (dw_die_ref die
, enum dwarf_attribute attr_kind
,
4506 attr
.dw_attr
= attr_kind
;
4507 attr
.dw_attr_val
.val_class
= dw_val_class_wide_int
;
4508 attr
.dw_attr_val
.val_entry
= NULL
;
4509 attr
.dw_attr_val
.v
.val_wide
= ggc_alloc
<wide_int
> ();
4510 *attr
.dw_attr_val
.v
.val_wide
= w
;
4511 add_dwarf_attr (die
, &attr
);
4514 /* Add an unsigned double integer attribute value to a DIE. */
4517 add_AT_double (dw_die_ref die
, enum dwarf_attribute attr_kind
,
4518 HOST_WIDE_INT high
, unsigned HOST_WIDE_INT low
)
4522 attr
.dw_attr
= attr_kind
;
4523 attr
.dw_attr_val
.val_class
= dw_val_class_const_double
;
4524 attr
.dw_attr_val
.val_entry
= NULL
;
4525 attr
.dw_attr_val
.v
.val_double
.high
= high
;
4526 attr
.dw_attr_val
.v
.val_double
.low
= low
;
4527 add_dwarf_attr (die
, &attr
);
4530 /* Add a floating point attribute value to a DIE and return it. */
4533 add_AT_vec (dw_die_ref die
, enum dwarf_attribute attr_kind
,
4534 unsigned int length
, unsigned int elt_size
, unsigned char *array
)
4538 attr
.dw_attr
= attr_kind
;
4539 attr
.dw_attr_val
.val_class
= dw_val_class_vec
;
4540 attr
.dw_attr_val
.val_entry
= NULL
;
4541 attr
.dw_attr_val
.v
.val_vec
.length
= length
;
4542 attr
.dw_attr_val
.v
.val_vec
.elt_size
= elt_size
;
4543 attr
.dw_attr_val
.v
.val_vec
.array
= array
;
4544 add_dwarf_attr (die
, &attr
);
4547 /* Add an 8-byte data attribute value to a DIE. */
4550 add_AT_data8 (dw_die_ref die
, enum dwarf_attribute attr_kind
,
4551 unsigned char data8
[8])
4555 attr
.dw_attr
= attr_kind
;
4556 attr
.dw_attr_val
.val_class
= dw_val_class_data8
;
4557 attr
.dw_attr_val
.val_entry
= NULL
;
4558 memcpy (attr
.dw_attr_val
.v
.val_data8
, data8
, 8);
4559 add_dwarf_attr (die
, &attr
);
4562 /* Add DW_AT_low_pc and DW_AT_high_pc to a DIE. When using
4563 dwarf_split_debug_info, address attributes in dies destined for the
4564 final executable have force_direct set to avoid using indexed
4568 add_AT_low_high_pc (dw_die_ref die
, const char *lbl_low
, const char *lbl_high
,
4574 lbl_id
= xstrdup (lbl_low
);
4575 attr
.dw_attr
= DW_AT_low_pc
;
4576 attr
.dw_attr_val
.val_class
= dw_val_class_lbl_id
;
4577 attr
.dw_attr_val
.v
.val_lbl_id
= lbl_id
;
4578 if (dwarf_split_debug_info
&& !force_direct
)
4579 attr
.dw_attr_val
.val_entry
4580 = add_addr_table_entry (lbl_id
, ate_kind_label
);
4582 attr
.dw_attr_val
.val_entry
= NULL
;
4583 add_dwarf_attr (die
, &attr
);
4585 attr
.dw_attr
= DW_AT_high_pc
;
4586 if (dwarf_version
< 4)
4587 attr
.dw_attr_val
.val_class
= dw_val_class_lbl_id
;
4589 attr
.dw_attr_val
.val_class
= dw_val_class_high_pc
;
4590 lbl_id
= xstrdup (lbl_high
);
4591 attr
.dw_attr_val
.v
.val_lbl_id
= lbl_id
;
4592 if (attr
.dw_attr_val
.val_class
== dw_val_class_lbl_id
4593 && dwarf_split_debug_info
&& !force_direct
)
4594 attr
.dw_attr_val
.val_entry
4595 = add_addr_table_entry (lbl_id
, ate_kind_label
);
4597 attr
.dw_attr_val
.val_entry
= NULL
;
4598 add_dwarf_attr (die
, &attr
);
4601 /* Hash and equality functions for debug_str_hash. */
4604 indirect_string_hasher::hash (indirect_string_node
*x
)
4606 return htab_hash_string (x
->str
);
4610 indirect_string_hasher::equal (indirect_string_node
*x1
, const char *x2
)
4612 return strcmp (x1
->str
, x2
) == 0;
4615 /* Add STR to the given string hash table. */
4617 static struct indirect_string_node
*
4618 find_AT_string_in_table (const char *str
,
4619 hash_table
<indirect_string_hasher
> *table
)
4621 struct indirect_string_node
*node
;
4623 indirect_string_node
**slot
4624 = table
->find_slot_with_hash (str
, htab_hash_string (str
), INSERT
);
4627 node
= ggc_cleared_alloc
<indirect_string_node
> ();
4628 node
->str
= ggc_strdup (str
);
4638 /* Add STR to the indirect string hash table. */
4640 static struct indirect_string_node
*
4641 find_AT_string (const char *str
)
4643 if (! debug_str_hash
)
4644 debug_str_hash
= hash_table
<indirect_string_hasher
>::create_ggc (10);
4646 return find_AT_string_in_table (str
, debug_str_hash
);
4649 /* Add a string attribute value to a DIE. */
4652 add_AT_string (dw_die_ref die
, enum dwarf_attribute attr_kind
, const char *str
)
4655 struct indirect_string_node
*node
;
4657 node
= find_AT_string (str
);
4659 attr
.dw_attr
= attr_kind
;
4660 attr
.dw_attr_val
.val_class
= dw_val_class_str
;
4661 attr
.dw_attr_val
.val_entry
= NULL
;
4662 attr
.dw_attr_val
.v
.val_str
= node
;
4663 add_dwarf_attr (die
, &attr
);
4666 static inline const char *
4667 AT_string (dw_attr_node
*a
)
4669 gcc_assert (a
&& AT_class (a
) == dw_val_class_str
);
4670 return a
->dw_attr_val
.v
.val_str
->str
;
4673 /* Call this function directly to bypass AT_string_form's logic to put
4674 the string inline in the die. */
4677 set_indirect_string (struct indirect_string_node
*node
)
4679 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
4680 /* Already indirect is a no op. */
4681 if (node
->form
== DW_FORM_strp
4682 || node
->form
== DW_FORM_line_strp
4683 || node
->form
== dwarf_FORM (DW_FORM_strx
))
4685 gcc_assert (node
->label
);
4688 ASM_GENERATE_INTERNAL_LABEL (label
, "LASF", dw2_string_counter
);
4689 ++dw2_string_counter
;
4690 node
->label
= xstrdup (label
);
4692 if (!dwarf_split_debug_info
)
4694 node
->form
= DW_FORM_strp
;
4695 node
->index
= NOT_INDEXED
;
4699 node
->form
= dwarf_FORM (DW_FORM_strx
);
4700 node
->index
= NO_INDEX_ASSIGNED
;
4704 /* A helper function for dwarf2out_finish, called to reset indirect
4705 string decisions done for early LTO dwarf output before fat object
4709 reset_indirect_string (indirect_string_node
**h
, void *)
4711 struct indirect_string_node
*node
= *h
;
4712 if (node
->form
== DW_FORM_strp
|| node
->form
== dwarf_FORM (DW_FORM_strx
))
4716 node
->form
= (dwarf_form
) 0;
4722 /* Find out whether a string should be output inline in DIE
4723 or out-of-line in .debug_str section. */
4725 static enum dwarf_form
4726 find_string_form (struct indirect_string_node
*node
)
4733 len
= strlen (node
->str
) + 1;
4735 /* If the string is shorter or equal to the size of the reference, it is
4736 always better to put it inline. */
4737 if (len
<= DWARF_OFFSET_SIZE
|| node
->refcount
== 0)
4738 return node
->form
= DW_FORM_string
;
4740 /* If we cannot expect the linker to merge strings in .debug_str
4741 section, only put it into .debug_str if it is worth even in this
4743 if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4744 || ((debug_str_section
->common
.flags
& SECTION_MERGE
) == 0
4745 && (len
- DWARF_OFFSET_SIZE
) * node
->refcount
<= len
))
4746 return node
->form
= DW_FORM_string
;
4748 set_indirect_string (node
);
4753 /* Find out whether the string referenced from the attribute should be
4754 output inline in DIE or out-of-line in .debug_str section. */
4756 static enum dwarf_form
4757 AT_string_form (dw_attr_node
*a
)
4759 gcc_assert (a
&& AT_class (a
) == dw_val_class_str
);
4760 return find_string_form (a
->dw_attr_val
.v
.val_str
);
4763 /* Add a DIE reference attribute value to a DIE. */
4766 add_AT_die_ref (dw_die_ref die
, enum dwarf_attribute attr_kind
, dw_die_ref targ_die
)
4769 gcc_checking_assert (targ_die
!= NULL
);
4771 /* With LTO we can end up trying to reference something we didn't create
4772 a DIE for. Avoid crashing later on a NULL referenced DIE. */
4773 if (targ_die
== NULL
)
4776 attr
.dw_attr
= attr_kind
;
4777 attr
.dw_attr_val
.val_class
= dw_val_class_die_ref
;
4778 attr
.dw_attr_val
.val_entry
= NULL
;
4779 attr
.dw_attr_val
.v
.val_die_ref
.die
= targ_die
;
4780 attr
.dw_attr_val
.v
.val_die_ref
.external
= 0;
4781 add_dwarf_attr (die
, &attr
);
4784 /* Change DIE reference REF to point to NEW_DIE instead. */
4787 change_AT_die_ref (dw_attr_node
*ref
, dw_die_ref new_die
)
4789 gcc_assert (ref
->dw_attr_val
.val_class
== dw_val_class_die_ref
);
4790 ref
->dw_attr_val
.v
.val_die_ref
.die
= new_die
;
4791 ref
->dw_attr_val
.v
.val_die_ref
.external
= 0;
4794 /* Add an AT_specification attribute to a DIE, and also make the back
4795 pointer from the specification to the definition. */
4798 add_AT_specification (dw_die_ref die
, dw_die_ref targ_die
)
4800 add_AT_die_ref (die
, DW_AT_specification
, targ_die
);
4801 gcc_assert (!targ_die
->die_definition
);
4802 targ_die
->die_definition
= die
;
4805 static inline dw_die_ref
4806 AT_ref (dw_attr_node
*a
)
4808 gcc_assert (a
&& AT_class (a
) == dw_val_class_die_ref
);
4809 return a
->dw_attr_val
.v
.val_die_ref
.die
;
4813 AT_ref_external (dw_attr_node
*a
)
4815 if (a
&& AT_class (a
) == dw_val_class_die_ref
)
4816 return a
->dw_attr_val
.v
.val_die_ref
.external
;
4822 set_AT_ref_external (dw_attr_node
*a
, int i
)
4824 gcc_assert (a
&& AT_class (a
) == dw_val_class_die_ref
);
4825 a
->dw_attr_val
.v
.val_die_ref
.external
= i
;
4828 /* Add a location description attribute value to a DIE. */
4831 add_AT_loc (dw_die_ref die
, enum dwarf_attribute attr_kind
, dw_loc_descr_ref loc
)
4835 attr
.dw_attr
= attr_kind
;
4836 attr
.dw_attr_val
.val_class
= dw_val_class_loc
;
4837 attr
.dw_attr_val
.val_entry
= NULL
;
4838 attr
.dw_attr_val
.v
.val_loc
= loc
;
4839 add_dwarf_attr (die
, &attr
);
4842 static inline dw_loc_descr_ref
4843 AT_loc (dw_attr_node
*a
)
4845 gcc_assert (a
&& AT_class (a
) == dw_val_class_loc
);
4846 return a
->dw_attr_val
.v
.val_loc
;
4850 add_AT_loc_list (dw_die_ref die
, enum dwarf_attribute attr_kind
, dw_loc_list_ref loc_list
)
4854 if (XCOFF_DEBUGGING_INFO
&& !HAVE_XCOFF_DWARF_EXTRAS
)
4857 attr
.dw_attr
= attr_kind
;
4858 attr
.dw_attr_val
.val_class
= dw_val_class_loc_list
;
4859 attr
.dw_attr_val
.val_entry
= NULL
;
4860 attr
.dw_attr_val
.v
.val_loc_list
= loc_list
;
4861 add_dwarf_attr (die
, &attr
);
4862 have_location_lists
= true;
4865 static inline dw_loc_list_ref
4866 AT_loc_list (dw_attr_node
*a
)
4868 gcc_assert (a
&& AT_class (a
) == dw_val_class_loc_list
);
4869 return a
->dw_attr_val
.v
.val_loc_list
;
4872 /* Add a view list attribute to DIE. It must have a DW_AT_location
4873 attribute, because the view list complements the location list. */
4876 add_AT_view_list (dw_die_ref die
, enum dwarf_attribute attr_kind
)
4880 if (XCOFF_DEBUGGING_INFO
&& !HAVE_XCOFF_DWARF_EXTRAS
)
4883 attr
.dw_attr
= attr_kind
;
4884 attr
.dw_attr_val
.val_class
= dw_val_class_view_list
;
4885 attr
.dw_attr_val
.val_entry
= NULL
;
4886 attr
.dw_attr_val
.v
.val_view_list
= die
;
4887 add_dwarf_attr (die
, &attr
);
4888 gcc_checking_assert (get_AT (die
, DW_AT_location
));
4889 gcc_assert (have_location_lists
);
4892 /* Return a pointer to the location list referenced by the attribute.
4893 If the named attribute is a view list, look up the corresponding
4894 DW_AT_location attribute and return its location list. */
4896 static inline dw_loc_list_ref
*
4897 AT_loc_list_ptr (dw_attr_node
*a
)
4900 switch (AT_class (a
))
4902 case dw_val_class_loc_list
:
4903 return &a
->dw_attr_val
.v
.val_loc_list
;
4904 case dw_val_class_view_list
:
4907 l
= get_AT (a
->dw_attr_val
.v
.val_view_list
, DW_AT_location
);
4910 gcc_checking_assert (l
+ 1 == a
);
4911 return AT_loc_list_ptr (l
);
4918 /* Return the location attribute value associated with a view list
4921 static inline dw_val_node
*
4922 view_list_to_loc_list_val_node (dw_val_node
*val
)
4924 gcc_assert (val
->val_class
== dw_val_class_view_list
);
4925 dw_attr_node
*loc
= get_AT (val
->v
.val_view_list
, DW_AT_location
);
4928 gcc_checking_assert (&(loc
+ 1)->dw_attr_val
== val
);
4929 gcc_assert (AT_class (loc
) == dw_val_class_loc_list
);
4930 return &loc
->dw_attr_val
;
4933 struct addr_hasher
: ggc_ptr_hash
<addr_table_entry
>
4935 static hashval_t
hash (addr_table_entry
*);
4936 static bool equal (addr_table_entry
*, addr_table_entry
*);
4939 /* Table of entries into the .debug_addr section. */
4941 static GTY (()) hash_table
<addr_hasher
> *addr_index_table
;
4943 /* Hash an address_table_entry. */
4946 addr_hasher::hash (addr_table_entry
*a
)
4948 inchash::hash hstate
;
4954 case ate_kind_rtx_dtprel
:
4957 case ate_kind_label
:
4958 return htab_hash_string (a
->addr
.label
);
4962 inchash::add_rtx (a
->addr
.rtl
, hstate
);
4963 return hstate
.end ();
4966 /* Determine equality for two address_table_entries. */
4969 addr_hasher::equal (addr_table_entry
*a1
, addr_table_entry
*a2
)
4971 if (a1
->kind
!= a2
->kind
)
4976 case ate_kind_rtx_dtprel
:
4977 return rtx_equal_p (a1
->addr
.rtl
, a2
->addr
.rtl
);
4978 case ate_kind_label
:
4979 return strcmp (a1
->addr
.label
, a2
->addr
.label
) == 0;
4985 /* Initialize an addr_table_entry. */
4988 init_addr_table_entry (addr_table_entry
*e
, enum ate_kind kind
, void *addr
)
4994 case ate_kind_rtx_dtprel
:
4995 e
->addr
.rtl
= (rtx
) addr
;
4997 case ate_kind_label
:
4998 e
->addr
.label
= (char *) addr
;
5002 e
->index
= NO_INDEX_ASSIGNED
;
5005 /* Add attr to the address table entry to the table. Defer setting an
5006 index until output time. */
5008 static addr_table_entry
*
5009 add_addr_table_entry (void *addr
, enum ate_kind kind
)
5011 addr_table_entry
*node
;
5012 addr_table_entry finder
;
5014 gcc_assert (dwarf_split_debug_info
);
5015 if (! addr_index_table
)
5016 addr_index_table
= hash_table
<addr_hasher
>::create_ggc (10);
5017 init_addr_table_entry (&finder
, kind
, addr
);
5018 addr_table_entry
**slot
= addr_index_table
->find_slot (&finder
, INSERT
);
5020 if (*slot
== HTAB_EMPTY_ENTRY
)
5022 node
= ggc_cleared_alloc
<addr_table_entry
> ();
5023 init_addr_table_entry (node
, kind
, addr
);
5033 /* Remove an entry from the addr table by decrementing its refcount.
5034 Strictly, decrementing the refcount would be enough, but the
5035 assertion that the entry is actually in the table has found
5039 remove_addr_table_entry (addr_table_entry
*entry
)
5041 gcc_assert (dwarf_split_debug_info
&& addr_index_table
);
5042 /* After an index is assigned, the table is frozen. */
5043 gcc_assert (entry
->refcount
> 0 && entry
->index
== NO_INDEX_ASSIGNED
);
5047 /* Given a location list, remove all addresses it refers to from the
5051 remove_loc_list_addr_table_entries (dw_loc_descr_ref descr
)
5053 for (; descr
; descr
= descr
->dw_loc_next
)
5054 if (descr
->dw_loc_oprnd1
.val_entry
!= NULL
)
5056 gcc_assert (descr
->dw_loc_oprnd1
.val_entry
->index
== NO_INDEX_ASSIGNED
);
5057 remove_addr_table_entry (descr
->dw_loc_oprnd1
.val_entry
);
5061 /* A helper function for dwarf2out_finish called through
5062 htab_traverse. Assign an addr_table_entry its index. All entries
5063 must be collected into the table when this function is called,
5064 because the indexing code relies on htab_traverse to traverse nodes
5065 in the same order for each run. */
5068 index_addr_table_entry (addr_table_entry
**h
, unsigned int *index
)
5070 addr_table_entry
*node
= *h
;
5072 /* Don't index unreferenced nodes. */
5073 if (node
->refcount
== 0)
5076 gcc_assert (node
->index
== NO_INDEX_ASSIGNED
);
5077 node
->index
= *index
;
5083 /* Add an address constant attribute value to a DIE. When using
5084 dwarf_split_debug_info, address attributes in dies destined for the
5085 final executable should be direct references--setting the parameter
5086 force_direct ensures this behavior. */
5089 add_AT_addr (dw_die_ref die
, enum dwarf_attribute attr_kind
, rtx addr
,
5094 attr
.dw_attr
= attr_kind
;
5095 attr
.dw_attr_val
.val_class
= dw_val_class_addr
;
5096 attr
.dw_attr_val
.v
.val_addr
= addr
;
5097 if (dwarf_split_debug_info
&& !force_direct
)
5098 attr
.dw_attr_val
.val_entry
= add_addr_table_entry (addr
, ate_kind_rtx
);
5100 attr
.dw_attr_val
.val_entry
= NULL
;
5101 add_dwarf_attr (die
, &attr
);
5104 /* Get the RTX from to an address DIE attribute. */
5107 AT_addr (dw_attr_node
*a
)
5109 gcc_assert (a
&& AT_class (a
) == dw_val_class_addr
);
5110 return a
->dw_attr_val
.v
.val_addr
;
5113 /* Add a file attribute value to a DIE. */
5116 add_AT_file (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5117 struct dwarf_file_data
*fd
)
5121 attr
.dw_attr
= attr_kind
;
5122 attr
.dw_attr_val
.val_class
= dw_val_class_file
;
5123 attr
.dw_attr_val
.val_entry
= NULL
;
5124 attr
.dw_attr_val
.v
.val_file
= fd
;
5125 add_dwarf_attr (die
, &attr
);
5128 /* Get the dwarf_file_data from a file DIE attribute. */
5130 static inline struct dwarf_file_data
*
5131 AT_file (dw_attr_node
*a
)
5133 gcc_assert (a
&& (AT_class (a
) == dw_val_class_file
5134 || AT_class (a
) == dw_val_class_file_implicit
));
5135 return a
->dw_attr_val
.v
.val_file
;
5138 /* Add a symbolic view identifier attribute value to a DIE. */
5141 add_AT_symview (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5142 const char *view_label
)
5146 attr
.dw_attr
= attr_kind
;
5147 attr
.dw_attr_val
.val_class
= dw_val_class_symview
;
5148 attr
.dw_attr_val
.val_entry
= NULL
;
5149 attr
.dw_attr_val
.v
.val_symbolic_view
= xstrdup (view_label
);
5150 add_dwarf_attr (die
, &attr
);
5153 /* Add a label identifier attribute value to a DIE. */
5156 add_AT_lbl_id (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5161 attr
.dw_attr
= attr_kind
;
5162 attr
.dw_attr_val
.val_class
= dw_val_class_lbl_id
;
5163 attr
.dw_attr_val
.val_entry
= NULL
;
5164 attr
.dw_attr_val
.v
.val_lbl_id
= xstrdup (lbl_id
);
5165 if (dwarf_split_debug_info
)
5166 attr
.dw_attr_val
.val_entry
5167 = add_addr_table_entry (attr
.dw_attr_val
.v
.val_lbl_id
,
5169 add_dwarf_attr (die
, &attr
);
5172 /* Add a section offset attribute value to a DIE, an offset into the
5173 debug_line section. */
5176 add_AT_lineptr (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5181 attr
.dw_attr
= attr_kind
;
5182 attr
.dw_attr_val
.val_class
= dw_val_class_lineptr
;
5183 attr
.dw_attr_val
.val_entry
= NULL
;
5184 attr
.dw_attr_val
.v
.val_lbl_id
= xstrdup (label
);
5185 add_dwarf_attr (die
, &attr
);
5188 /* Add a section offset attribute value to a DIE, an offset into the
5189 debug_macinfo section. */
5192 add_AT_macptr (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5197 attr
.dw_attr
= attr_kind
;
5198 attr
.dw_attr_val
.val_class
= dw_val_class_macptr
;
5199 attr
.dw_attr_val
.val_entry
= NULL
;
5200 attr
.dw_attr_val
.v
.val_lbl_id
= xstrdup (label
);
5201 add_dwarf_attr (die
, &attr
);
5204 /* Add a range_list attribute value to a DIE. When using
5205 dwarf_split_debug_info, address attributes in dies destined for the
5206 final executable should be direct references--setting the parameter
5207 force_direct ensures this behavior. */
5209 #define UNRELOCATED_OFFSET ((addr_table_entry *) 1)
5210 #define RELOCATED_OFFSET (NULL)
5213 add_AT_range_list (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5214 long unsigned int offset
, bool force_direct
)
5218 attr
.dw_attr
= attr_kind
;
5219 attr
.dw_attr_val
.val_class
= dw_val_class_range_list
;
5220 /* For the range_list attribute, use val_entry to store whether the
5221 offset should follow split-debug-info or normal semantics. This
5222 value is read in output_range_list_offset. */
5223 if (dwarf_split_debug_info
&& !force_direct
)
5224 attr
.dw_attr_val
.val_entry
= UNRELOCATED_OFFSET
;
5226 attr
.dw_attr_val
.val_entry
= RELOCATED_OFFSET
;
5227 attr
.dw_attr_val
.v
.val_offset
= offset
;
5228 add_dwarf_attr (die
, &attr
);
5231 /* Return the start label of a delta attribute. */
5233 static inline const char *
5234 AT_vms_delta1 (dw_attr_node
*a
)
5236 gcc_assert (a
&& (AT_class (a
) == dw_val_class_vms_delta
));
5237 return a
->dw_attr_val
.v
.val_vms_delta
.lbl1
;
5240 /* Return the end label of a delta attribute. */
5242 static inline const char *
5243 AT_vms_delta2 (dw_attr_node
*a
)
5245 gcc_assert (a
&& (AT_class (a
) == dw_val_class_vms_delta
));
5246 return a
->dw_attr_val
.v
.val_vms_delta
.lbl2
;
5249 static inline const char *
5250 AT_lbl (dw_attr_node
*a
)
5252 gcc_assert (a
&& (AT_class (a
) == dw_val_class_lbl_id
5253 || AT_class (a
) == dw_val_class_lineptr
5254 || AT_class (a
) == dw_val_class_macptr
5255 || AT_class (a
) == dw_val_class_loclistsptr
5256 || AT_class (a
) == dw_val_class_high_pc
));
5257 return a
->dw_attr_val
.v
.val_lbl_id
;
5260 /* Get the attribute of type attr_kind. */
5262 static dw_attr_node
*
5263 get_AT (dw_die_ref die
, enum dwarf_attribute attr_kind
)
5267 dw_die_ref spec
= NULL
;
5272 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
5273 if (a
->dw_attr
== attr_kind
)
5275 else if (a
->dw_attr
== DW_AT_specification
5276 || a
->dw_attr
== DW_AT_abstract_origin
)
5280 return get_AT (spec
, attr_kind
);
5285 /* Returns the parent of the declaration of DIE. */
5288 get_die_parent (dw_die_ref die
)
5295 if ((t
= get_AT_ref (die
, DW_AT_abstract_origin
))
5296 || (t
= get_AT_ref (die
, DW_AT_specification
)))
5299 return die
->die_parent
;
5302 /* Return the "low pc" attribute value, typically associated with a subprogram
5303 DIE. Return null if the "low pc" attribute is either not present, or if it
5304 cannot be represented as an assembler label identifier. */
5306 static inline const char *
5307 get_AT_low_pc (dw_die_ref die
)
5309 dw_attr_node
*a
= get_AT (die
, DW_AT_low_pc
);
5311 return a
? AT_lbl (a
) : NULL
;
5314 /* Return the value of the string attribute designated by ATTR_KIND, or
5315 NULL if it is not present. */
5317 static inline const char *
5318 get_AT_string (dw_die_ref die
, enum dwarf_attribute attr_kind
)
5320 dw_attr_node
*a
= get_AT (die
, attr_kind
);
5322 return a
? AT_string (a
) : NULL
;
5325 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
5326 if it is not present. */
5329 get_AT_flag (dw_die_ref die
, enum dwarf_attribute attr_kind
)
5331 dw_attr_node
*a
= get_AT (die
, attr_kind
);
5333 return a
? AT_flag (a
) : 0;
5336 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
5337 if it is not present. */
5339 static inline unsigned
5340 get_AT_unsigned (dw_die_ref die
, enum dwarf_attribute attr_kind
)
5342 dw_attr_node
*a
= get_AT (die
, attr_kind
);
5344 return a
? AT_unsigned (a
) : 0;
5347 static inline dw_die_ref
5348 get_AT_ref (dw_die_ref die
, enum dwarf_attribute attr_kind
)
5350 dw_attr_node
*a
= get_AT (die
, attr_kind
);
5352 return a
? AT_ref (a
) : NULL
;
5355 static inline struct dwarf_file_data
*
5356 get_AT_file (dw_die_ref die
, enum dwarf_attribute attr_kind
)
5358 dw_attr_node
*a
= get_AT (die
, attr_kind
);
5360 return a
? AT_file (a
) : NULL
;
5363 /* Return TRUE if the language is C. */
5368 unsigned int lang
= get_AT_unsigned (comp_unit_die (), DW_AT_language
);
5370 return (lang
== DW_LANG_C
|| lang
== DW_LANG_C89
|| lang
== DW_LANG_C99
5371 || lang
== DW_LANG_C11
|| lang
== DW_LANG_ObjC
);
5376 /* Return TRUE if the language is C++. */
5381 unsigned int lang
= get_AT_unsigned (comp_unit_die (), DW_AT_language
);
5383 return (lang
== DW_LANG_C_plus_plus
|| lang
== DW_LANG_ObjC_plus_plus
5384 || lang
== DW_LANG_C_plus_plus_11
|| lang
== DW_LANG_C_plus_plus_14
);
5387 /* Return TRUE if DECL was created by the C++ frontend. */
5390 is_cxx (const_tree decl
)
5394 const_tree context
= get_ultimate_context (decl
);
5395 if (context
&& TRANSLATION_UNIT_LANGUAGE (context
))
5396 return strncmp (TRANSLATION_UNIT_LANGUAGE (context
), "GNU C++", 7) == 0;
5401 /* Return TRUE if the language is Fortran. */
5406 unsigned int lang
= get_AT_unsigned (comp_unit_die (), DW_AT_language
);
5408 return (lang
== DW_LANG_Fortran77
5409 || lang
== DW_LANG_Fortran90
5410 || lang
== DW_LANG_Fortran95
5411 || lang
== DW_LANG_Fortran03
5412 || lang
== DW_LANG_Fortran08
);
5416 is_fortran (const_tree decl
)
5420 const_tree context
= get_ultimate_context (decl
);
5421 if (context
&& TRANSLATION_UNIT_LANGUAGE (context
))
5422 return (strncmp (TRANSLATION_UNIT_LANGUAGE (context
),
5423 "GNU Fortran", 11) == 0
5424 || strcmp (TRANSLATION_UNIT_LANGUAGE (context
),
5427 return is_fortran ();
5430 /* Return TRUE if the language is Ada. */
5435 unsigned int lang
= get_AT_unsigned (comp_unit_die (), DW_AT_language
);
5437 return lang
== DW_LANG_Ada95
|| lang
== DW_LANG_Ada83
;
5440 /* Remove the specified attribute if present. Return TRUE if removal
5444 remove_AT (dw_die_ref die
, enum dwarf_attribute attr_kind
)
5452 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
5453 if (a
->dw_attr
== attr_kind
)
5455 if (AT_class (a
) == dw_val_class_str
)
5456 if (a
->dw_attr_val
.v
.val_str
->refcount
)
5457 a
->dw_attr_val
.v
.val_str
->refcount
--;
5459 /* vec::ordered_remove should help reduce the number of abbrevs
5461 die
->die_attr
->ordered_remove (ix
);
5467 /* Remove CHILD from its parent. PREV must have the property that
5468 PREV->DIE_SIB == CHILD. Does not alter CHILD. */
5471 remove_child_with_prev (dw_die_ref child
, dw_die_ref prev
)
5473 gcc_assert (child
->die_parent
== prev
->die_parent
);
5474 gcc_assert (prev
->die_sib
== child
);
5477 gcc_assert (child
->die_parent
->die_child
== child
);
5481 prev
->die_sib
= child
->die_sib
;
5482 if (child
->die_parent
->die_child
== child
)
5483 child
->die_parent
->die_child
= prev
;
5484 child
->die_sib
= NULL
;
5487 /* Replace OLD_CHILD with NEW_CHILD. PREV must have the property that
5488 PREV->DIE_SIB == OLD_CHILD. Does not alter OLD_CHILD. */
5491 replace_child (dw_die_ref old_child
, dw_die_ref new_child
, dw_die_ref prev
)
5493 dw_die_ref parent
= old_child
->die_parent
;
5495 gcc_assert (parent
== prev
->die_parent
);
5496 gcc_assert (prev
->die_sib
== old_child
);
5498 new_child
->die_parent
= parent
;
5499 if (prev
== old_child
)
5501 gcc_assert (parent
->die_child
== old_child
);
5502 new_child
->die_sib
= new_child
;
5506 prev
->die_sib
= new_child
;
5507 new_child
->die_sib
= old_child
->die_sib
;
5509 if (old_child
->die_parent
->die_child
== old_child
)
5510 old_child
->die_parent
->die_child
= new_child
;
5511 old_child
->die_sib
= NULL
;
5514 /* Move all children from OLD_PARENT to NEW_PARENT. */
5517 move_all_children (dw_die_ref old_parent
, dw_die_ref new_parent
)
5520 new_parent
->die_child
= old_parent
->die_child
;
5521 old_parent
->die_child
= NULL
;
5522 FOR_EACH_CHILD (new_parent
, c
, c
->die_parent
= new_parent
);
5525 /* Remove child DIE whose die_tag is TAG. Do nothing if no child
5529 remove_child_TAG (dw_die_ref die
, enum dwarf_tag tag
)
5535 dw_die_ref prev
= c
;
5537 while (c
->die_tag
== tag
)
5539 remove_child_with_prev (c
, prev
);
5540 c
->die_parent
= NULL
;
5541 /* Might have removed every child. */
5542 if (die
->die_child
== NULL
)
5546 } while (c
!= die
->die_child
);
5549 /* Add a CHILD_DIE as the last child of DIE. */
5552 add_child_die (dw_die_ref die
, dw_die_ref child_die
)
5554 /* FIXME this should probably be an assert. */
5555 if (! die
|| ! child_die
)
5557 gcc_assert (die
!= child_die
);
5559 child_die
->die_parent
= die
;
5562 child_die
->die_sib
= die
->die_child
->die_sib
;
5563 die
->die_child
->die_sib
= child_die
;
5566 child_die
->die_sib
= child_die
;
5567 die
->die_child
= child_die
;
5570 /* Like add_child_die, but put CHILD_DIE after AFTER_DIE. */
5573 add_child_die_after (dw_die_ref die
, dw_die_ref child_die
,
5574 dw_die_ref after_die
)
5580 && die
!= child_die
);
5582 child_die
->die_parent
= die
;
5583 child_die
->die_sib
= after_die
->die_sib
;
5584 after_die
->die_sib
= child_die
;
5585 if (die
->die_child
== after_die
)
5586 die
->die_child
= child_die
;
5589 /* Unassociate CHILD from its parent, and make its parent be
5593 reparent_child (dw_die_ref child
, dw_die_ref new_parent
)
5595 for (dw_die_ref p
= child
->die_parent
->die_child
; ; p
= p
->die_sib
)
5596 if (p
->die_sib
== child
)
5598 remove_child_with_prev (child
, p
);
5601 add_child_die (new_parent
, child
);
5604 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5605 is the specification, to the end of PARENT's list of children.
5606 This is done by removing and re-adding it. */
5609 splice_child_die (dw_die_ref parent
, dw_die_ref child
)
5611 /* We want the declaration DIE from inside the class, not the
5612 specification DIE at toplevel. */
5613 if (child
->die_parent
!= parent
)
5615 dw_die_ref tmp
= get_AT_ref (child
, DW_AT_specification
);
5621 gcc_assert (child
->die_parent
== parent
5622 || (child
->die_parent
5623 == get_AT_ref (parent
, DW_AT_specification
)));
5625 reparent_child (child
, parent
);
5628 /* Create and return a new die with TAG_VALUE as tag. */
5630 static inline dw_die_ref
5631 new_die_raw (enum dwarf_tag tag_value
)
5633 dw_die_ref die
= ggc_cleared_alloc
<die_node
> ();
5634 die
->die_tag
= tag_value
;
5638 /* Create and return a new die with a parent of PARENT_DIE. If
5639 PARENT_DIE is NULL, the new DIE is placed in limbo and an
5640 associated tree T must be supplied to determine parenthood
5643 static inline dw_die_ref
5644 new_die (enum dwarf_tag tag_value
, dw_die_ref parent_die
, tree t
)
5646 dw_die_ref die
= new_die_raw (tag_value
);
5648 if (parent_die
!= NULL
)
5649 add_child_die (parent_die
, die
);
5652 limbo_die_node
*limbo_node
;
5654 /* No DIEs created after early dwarf should end up in limbo,
5655 because the limbo list should not persist past LTO
5657 if (tag_value
!= DW_TAG_compile_unit
5658 /* These are allowed because they're generated while
5659 breaking out COMDAT units late. */
5660 && tag_value
!= DW_TAG_type_unit
5661 && tag_value
!= DW_TAG_skeleton_unit
5663 /* Allow nested functions to live in limbo because they will
5664 only temporarily live there, as decls_for_scope will fix
5666 && (TREE_CODE (t
) != FUNCTION_DECL
5667 || !decl_function_context (t
))
5668 /* Same as nested functions above but for types. Types that
5669 are local to a function will be fixed in
5671 && (!RECORD_OR_UNION_TYPE_P (t
)
5672 || !TYPE_CONTEXT (t
)
5673 || TREE_CODE (TYPE_CONTEXT (t
)) != FUNCTION_DECL
)
5674 /* FIXME debug-early: Allow late limbo DIE creation for LTO,
5675 especially in the ltrans stage, but once we implement LTO
5676 dwarf streaming, we should remove this exception. */
5679 fprintf (stderr
, "symbol ended up in limbo too late:");
5680 debug_generic_stmt (t
);
5684 limbo_node
= ggc_cleared_alloc
<limbo_die_node
> ();
5685 limbo_node
->die
= die
;
5686 limbo_node
->created_for
= t
;
5687 limbo_node
->next
= limbo_die_list
;
5688 limbo_die_list
= limbo_node
;
5694 /* Return the DIE associated with the given type specifier. */
5696 static inline dw_die_ref
5697 lookup_type_die (tree type
)
5699 dw_die_ref die
= TYPE_SYMTAB_DIE (type
);
5700 if (die
&& die
->removed
)
5702 TYPE_SYMTAB_DIE (type
) = NULL
;
5708 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
5709 anonymous type named by the typedef TYPE_DIE, return the DIE of the
5710 anonymous type instead the one of the naming typedef. */
5712 static inline dw_die_ref
5713 strip_naming_typedef (tree type
, dw_die_ref type_die
)
5716 && TREE_CODE (type
) == RECORD_TYPE
5718 && type_die
->die_tag
== DW_TAG_typedef
5719 && is_naming_typedef_decl (TYPE_NAME (type
)))
5720 type_die
= get_AT_ref (type_die
, DW_AT_type
);
5724 /* Like lookup_type_die, but if type is an anonymous type named by a
5725 typedef[1], return the DIE of the anonymous type instead the one of
5726 the naming typedef. This is because in gen_typedef_die, we did
5727 equate the anonymous struct named by the typedef with the DIE of
5728 the naming typedef. So by default, lookup_type_die on an anonymous
5729 struct yields the DIE of the naming typedef.
5731 [1]: Read the comment of is_naming_typedef_decl to learn about what
5732 a naming typedef is. */
5734 static inline dw_die_ref
5735 lookup_type_die_strip_naming_typedef (tree type
)
5737 dw_die_ref die
= lookup_type_die (type
);
5738 return strip_naming_typedef (type
, die
);
5741 /* Equate a DIE to a given type specifier. */
5744 equate_type_number_to_die (tree type
, dw_die_ref type_die
)
5746 TYPE_SYMTAB_DIE (type
) = type_die
;
5749 static dw_die_ref
maybe_create_die_with_external_ref (tree
);
5750 struct GTY(()) sym_off_pair
5752 const char * GTY((skip
)) sym
;
5753 unsigned HOST_WIDE_INT off
;
5755 static GTY(()) hash_map
<tree
, sym_off_pair
> *external_die_map
;
5757 /* Returns a hash value for X (which really is a die_struct). */
5760 decl_die_hasher::hash (die_node
*x
)
5762 return (hashval_t
) x
->decl_id
;
5765 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
5768 decl_die_hasher::equal (die_node
*x
, tree y
)
5770 return (x
->decl_id
== DECL_UID (y
));
5773 /* Return the DIE associated with a given declaration. */
5775 static inline dw_die_ref
5776 lookup_decl_die (tree decl
)
5778 dw_die_ref
*die
= decl_die_table
->find_slot_with_hash (decl
, DECL_UID (decl
),
5783 return maybe_create_die_with_external_ref (decl
);
5786 if ((*die
)->removed
)
5788 decl_die_table
->clear_slot (die
);
5795 /* Return the DIE associated with BLOCK. */
5797 static inline dw_die_ref
5798 lookup_block_die (tree block
)
5800 dw_die_ref die
= BLOCK_DIE (block
);
5801 if (!die
&& in_lto_p
)
5802 return maybe_create_die_with_external_ref (block
);
5806 /* Associate DIE with BLOCK. */
5809 equate_block_to_die (tree block
, dw_die_ref die
)
5811 BLOCK_DIE (block
) = die
;
5816 /* For DECL which might have early dwarf output query a SYMBOL + OFFSET
5817 style reference. Return true if we found one refering to a DIE for
5818 DECL, otherwise return false. */
5821 dwarf2out_die_ref_for_decl (tree decl
, const char **sym
,
5822 unsigned HOST_WIDE_INT
*off
)
5828 /* During WPA stage and incremental linking we use a hash-map
5829 to store the decl <-> label + offset map. */
5830 if (!external_die_map
)
5832 sym_off_pair
*desc
= external_die_map
->get (decl
);
5840 if (TREE_CODE (decl
) == BLOCK
)
5841 die
= lookup_block_die (decl
);
5843 die
= lookup_decl_die (decl
);
5847 /* Similar to get_ref_die_offset_label, but using the "correct"
5849 *off
= die
->die_offset
;
5850 while (die
->die_parent
)
5851 die
= die
->die_parent
;
5852 /* For the containing CU DIE we compute a die_symbol in
5853 compute_comp_unit_symbol. */
5854 gcc_assert (die
->die_tag
== DW_TAG_compile_unit
5855 && die
->die_id
.die_symbol
!= NULL
);
5856 *sym
= die
->die_id
.die_symbol
;
5860 /* Add a reference of kind ATTR_KIND to a DIE at SYMBOL + OFFSET to DIE. */
5863 add_AT_external_die_ref (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5864 const char *symbol
, HOST_WIDE_INT offset
)
5866 /* Create a fake DIE that contains the reference. Don't use
5867 new_die because we don't want to end up in the limbo list. */
5868 /* ??? We probably want to share these, thus put a ref to the DIE
5869 we create here to the external_die_map entry. */
5870 dw_die_ref ref
= new_die_raw (die
->die_tag
);
5871 ref
->die_id
.die_symbol
= symbol
;
5872 ref
->die_offset
= offset
;
5873 ref
->with_offset
= 1;
5874 add_AT_die_ref (die
, attr_kind
, ref
);
5877 /* Create a DIE for DECL if required and add a reference to a DIE
5878 at SYMBOL + OFFSET which contains attributes dumped early. */
5881 dwarf2out_register_external_die (tree decl
, const char *sym
,
5882 unsigned HOST_WIDE_INT off
)
5884 if (debug_info_level
== DINFO_LEVEL_NONE
)
5887 if (!external_die_map
)
5888 external_die_map
= hash_map
<tree
, sym_off_pair
>::create_ggc (1000);
5889 gcc_checking_assert (!external_die_map
->get (decl
));
5890 sym_off_pair p
= { IDENTIFIER_POINTER (get_identifier (sym
)), off
};
5891 external_die_map
->put (decl
, p
);
5894 /* If we have a registered external DIE for DECL return a new DIE for
5895 the concrete instance with an appropriate abstract origin. */
5898 maybe_create_die_with_external_ref (tree decl
)
5900 if (!external_die_map
)
5902 sym_off_pair
*desc
= external_die_map
->get (decl
);
5906 const char *sym
= desc
->sym
;
5907 unsigned HOST_WIDE_INT off
= desc
->off
;
5910 dw_die_ref die
= (TREE_CODE (decl
) == BLOCK
5911 ? lookup_block_die (decl
) : lookup_decl_die (decl
));
5916 dw_die_ref parent
= NULL
;
5917 /* Need to lookup a DIE for the decls context - the containing
5918 function or translation unit. */
5919 if (TREE_CODE (decl
) == BLOCK
)
5921 ctx
= BLOCK_SUPERCONTEXT (decl
);
5922 /* ??? We do not output DIEs for all scopes thus skip as
5923 many DIEs as needed. */
5924 while (TREE_CODE (ctx
) == BLOCK
5925 && !lookup_block_die (ctx
))
5926 ctx
= BLOCK_SUPERCONTEXT (ctx
);
5929 ctx
= DECL_CONTEXT (decl
);
5930 /* Peel types in the context stack. */
5931 while (ctx
&& TYPE_P (ctx
))
5932 ctx
= TYPE_CONTEXT (ctx
);
5933 /* Likewise namespaces in case we do not want to emit DIEs for them. */
5934 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
5935 while (ctx
&& TREE_CODE (ctx
) == NAMESPACE_DECL
)
5936 ctx
= DECL_CONTEXT (ctx
);
5939 if (TREE_CODE (ctx
) == BLOCK
)
5940 parent
= lookup_block_die (ctx
);
5941 else if (TREE_CODE (ctx
) == TRANSLATION_UNIT_DECL
5942 /* Keep the 1:1 association during WPA. */
5944 && flag_incremental_link
!= INCREMENTAL_LINK_LTO
)
5945 /* Otherwise all late annotations go to the main CU which
5946 imports the original CUs. */
5947 parent
= comp_unit_die ();
5948 else if (TREE_CODE (ctx
) == FUNCTION_DECL
5949 && TREE_CODE (decl
) != FUNCTION_DECL
5950 && TREE_CODE (decl
) != PARM_DECL
5951 && TREE_CODE (decl
) != RESULT_DECL
5952 && TREE_CODE (decl
) != BLOCK
)
5953 /* Leave function local entities parent determination to when
5954 we process scope vars. */
5957 parent
= lookup_decl_die (ctx
);
5960 /* In some cases the FEs fail to set DECL_CONTEXT properly.
5961 Handle this case gracefully by globalizing stuff. */
5962 parent
= comp_unit_die ();
5963 /* Create a DIE "stub". */
5964 switch (TREE_CODE (decl
))
5966 case TRANSLATION_UNIT_DECL
:
5968 die
= comp_unit_die ();
5969 /* We re-target all CU decls to the LTRANS CU DIE, so no need
5970 to create a DIE for the original CUs. */
5973 case NAMESPACE_DECL
:
5974 if (is_fortran (decl
))
5975 die
= new_die (DW_TAG_module
, parent
, decl
);
5977 die
= new_die (DW_TAG_namespace
, parent
, decl
);
5980 die
= new_die (DW_TAG_subprogram
, parent
, decl
);
5983 die
= new_die (DW_TAG_variable
, parent
, decl
);
5986 die
= new_die (DW_TAG_variable
, parent
, decl
);
5989 die
= new_die (DW_TAG_formal_parameter
, parent
, decl
);
5992 die
= new_die (DW_TAG_constant
, parent
, decl
);
5995 die
= new_die (DW_TAG_label
, parent
, decl
);
5998 die
= new_die (DW_TAG_lexical_block
, parent
, decl
);
6003 if (TREE_CODE (decl
) == BLOCK
)
6004 equate_block_to_die (decl
, die
);
6006 equate_decl_number_to_die (decl
, die
);
6008 add_desc_attribute (die
, decl
);
6010 /* Add a reference to the DIE providing early debug at $sym + off. */
6011 add_AT_external_die_ref (die
, DW_AT_abstract_origin
, sym
, off
);
6016 /* Returns a hash value for X (which really is a var_loc_list). */
6019 decl_loc_hasher::hash (var_loc_list
*x
)
6021 return (hashval_t
) x
->decl_id
;
6024 /* Return nonzero if decl_id of var_loc_list X is the same as
6028 decl_loc_hasher::equal (var_loc_list
*x
, const_tree y
)
6030 return (x
->decl_id
== DECL_UID (y
));
6033 /* Return the var_loc list associated with a given declaration. */
6035 static inline var_loc_list
*
6036 lookup_decl_loc (const_tree decl
)
6038 if (!decl_loc_table
)
6040 return decl_loc_table
->find_with_hash (decl
, DECL_UID (decl
));
6043 /* Returns a hash value for X (which really is a cached_dw_loc_list_list). */
6046 dw_loc_list_hasher::hash (cached_dw_loc_list
*x
)
6048 return (hashval_t
) x
->decl_id
;
6051 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
6055 dw_loc_list_hasher::equal (cached_dw_loc_list
*x
, const_tree y
)
6057 return (x
->decl_id
== DECL_UID (y
));
6060 /* Equate a DIE to a particular declaration. */
6063 equate_decl_number_to_die (tree decl
, dw_die_ref decl_die
)
6065 unsigned int decl_id
= DECL_UID (decl
);
6067 *decl_die_table
->find_slot_with_hash (decl
, decl_id
, INSERT
) = decl_die
;
6068 decl_die
->decl_id
= decl_id
;
6071 /* Return how many bits covers PIECE EXPR_LIST. */
6073 static HOST_WIDE_INT
6074 decl_piece_bitsize (rtx piece
)
6076 int ret
= (int) GET_MODE (piece
);
6079 gcc_assert (GET_CODE (XEXP (piece
, 0)) == CONCAT
6080 && CONST_INT_P (XEXP (XEXP (piece
, 0), 0)));
6081 return INTVAL (XEXP (XEXP (piece
, 0), 0));
6084 /* Return pointer to the location of location note in PIECE EXPR_LIST. */
6087 decl_piece_varloc_ptr (rtx piece
)
6089 if ((int) GET_MODE (piece
))
6090 return &XEXP (piece
, 0);
6092 return &XEXP (XEXP (piece
, 0), 1);
6095 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
6096 Next is the chain of following piece nodes. */
6098 static rtx_expr_list
*
6099 decl_piece_node (rtx loc_note
, HOST_WIDE_INT bitsize
, rtx next
)
6101 if (bitsize
> 0 && bitsize
<= (int) MAX_MACHINE_MODE
)
6102 return alloc_EXPR_LIST (bitsize
, loc_note
, next
);
6104 return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode
,
6109 /* Return rtx that should be stored into loc field for
6110 LOC_NOTE and BITPOS/BITSIZE. */
6113 construct_piece_list (rtx loc_note
, HOST_WIDE_INT bitpos
,
6114 HOST_WIDE_INT bitsize
)
6118 loc_note
= decl_piece_node (loc_note
, bitsize
, NULL_RTX
);
6120 loc_note
= decl_piece_node (NULL_RTX
, bitpos
, loc_note
);
6125 /* This function either modifies location piece list *DEST in
6126 place (if SRC and INNER is NULL), or copies location piece list
6127 *SRC to *DEST while modifying it. Location BITPOS is modified
6128 to contain LOC_NOTE, any pieces overlapping it are removed resp.
6129 not copied and if needed some padding around it is added.
6130 When modifying in place, DEST should point to EXPR_LIST where
6131 earlier pieces cover PIECE_BITPOS bits, when copying SRC points
6132 to the start of the whole list and INNER points to the EXPR_LIST
6133 where earlier pieces cover PIECE_BITPOS bits. */
6136 adjust_piece_list (rtx
*dest
, rtx
*src
, rtx
*inner
,
6137 HOST_WIDE_INT bitpos
, HOST_WIDE_INT piece_bitpos
,
6138 HOST_WIDE_INT bitsize
, rtx loc_note
)
6141 bool copy
= inner
!= NULL
;
6145 /* First copy all nodes preceding the current bitpos. */
6146 while (src
!= inner
)
6148 *dest
= decl_piece_node (*decl_piece_varloc_ptr (*src
),
6149 decl_piece_bitsize (*src
), NULL_RTX
);
6150 dest
= &XEXP (*dest
, 1);
6151 src
= &XEXP (*src
, 1);
6154 /* Add padding if needed. */
6155 if (bitpos
!= piece_bitpos
)
6157 *dest
= decl_piece_node (NULL_RTX
, bitpos
- piece_bitpos
,
6158 copy
? NULL_RTX
: *dest
);
6159 dest
= &XEXP (*dest
, 1);
6161 else if (*dest
&& decl_piece_bitsize (*dest
) == bitsize
)
6164 /* A piece with correct bitpos and bitsize already exist,
6165 just update the location for it and return. */
6166 *decl_piece_varloc_ptr (*dest
) = loc_note
;
6169 /* Add the piece that changed. */
6170 *dest
= decl_piece_node (loc_note
, bitsize
, copy
? NULL_RTX
: *dest
);
6171 dest
= &XEXP (*dest
, 1);
6172 /* Skip over pieces that overlap it. */
6173 diff
= bitpos
- piece_bitpos
+ bitsize
;
6176 while (diff
> 0 && *src
)
6179 diff
-= decl_piece_bitsize (piece
);
6181 src
= &XEXP (piece
, 1);
6184 *src
= XEXP (piece
, 1);
6185 free_EXPR_LIST_node (piece
);
6188 /* Add padding if needed. */
6189 if (diff
< 0 && *src
)
6193 *dest
= decl_piece_node (NULL_RTX
, -diff
, copy
? NULL_RTX
: *dest
);
6194 dest
= &XEXP (*dest
, 1);
6198 /* Finally copy all nodes following it. */
6201 *dest
= decl_piece_node (*decl_piece_varloc_ptr (*src
),
6202 decl_piece_bitsize (*src
), NULL_RTX
);
6203 dest
= &XEXP (*dest
, 1);
6204 src
= &XEXP (*src
, 1);
6208 /* Add a variable location node to the linked list for DECL. */
6210 static struct var_loc_node
*
6211 add_var_loc_to_decl (tree decl
, rtx loc_note
, const char *label
, var_loc_view view
)
6213 unsigned int decl_id
;
6215 struct var_loc_node
*loc
= NULL
;
6216 HOST_WIDE_INT bitsize
= -1, bitpos
= -1;
6218 if (VAR_P (decl
) && DECL_HAS_DEBUG_EXPR_P (decl
))
6220 tree realdecl
= DECL_DEBUG_EXPR (decl
);
6221 if (handled_component_p (realdecl
)
6222 || (TREE_CODE (realdecl
) == MEM_REF
6223 && TREE_CODE (TREE_OPERAND (realdecl
, 0)) == ADDR_EXPR
))
6226 tree innerdecl
= get_ref_base_and_extent_hwi (realdecl
, &bitpos
,
6227 &bitsize
, &reverse
);
6229 || !DECL_P (innerdecl
)
6230 || DECL_IGNORED_P (innerdecl
)
6231 || TREE_STATIC (innerdecl
)
6233 || bitpos
+ bitsize
> 256)
6239 decl_id
= DECL_UID (decl
);
6241 = decl_loc_table
->find_slot_with_hash (decl
, decl_id
, INSERT
);
6244 temp
= ggc_cleared_alloc
<var_loc_list
> ();
6245 temp
->decl_id
= decl_id
;
6251 /* For PARM_DECLs try to keep around the original incoming value,
6252 even if that means we'll emit a zero-range .debug_loc entry. */
6254 && temp
->first
== temp
->last
6255 && TREE_CODE (decl
) == PARM_DECL
6256 && NOTE_P (temp
->first
->loc
)
6257 && NOTE_VAR_LOCATION_DECL (temp
->first
->loc
) == decl
6258 && DECL_INCOMING_RTL (decl
)
6259 && NOTE_VAR_LOCATION_LOC (temp
->first
->loc
)
6260 && GET_CODE (NOTE_VAR_LOCATION_LOC (temp
->first
->loc
))
6261 == GET_CODE (DECL_INCOMING_RTL (decl
))
6262 && prev_real_insn (as_a
<rtx_insn
*> (temp
->first
->loc
)) == NULL_RTX
6264 || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp
->first
->loc
),
6265 NOTE_VAR_LOCATION_LOC (loc_note
))
6266 || (NOTE_VAR_LOCATION_STATUS (temp
->first
->loc
)
6267 != NOTE_VAR_LOCATION_STATUS (loc_note
))))
6269 loc
= ggc_cleared_alloc
<var_loc_node
> ();
6270 temp
->first
->next
= loc
;
6272 loc
->loc
= construct_piece_list (loc_note
, bitpos
, bitsize
);
6274 else if (temp
->last
)
6276 struct var_loc_node
*last
= temp
->last
, *unused
= NULL
;
6277 rtx
*piece_loc
= NULL
, last_loc_note
;
6278 HOST_WIDE_INT piece_bitpos
= 0;
6282 gcc_assert (last
->next
== NULL
);
6284 if (bitsize
!= -1 && GET_CODE (last
->loc
) == EXPR_LIST
)
6286 piece_loc
= &last
->loc
;
6289 HOST_WIDE_INT cur_bitsize
= decl_piece_bitsize (*piece_loc
);
6290 if (piece_bitpos
+ cur_bitsize
> bitpos
)
6292 piece_bitpos
+= cur_bitsize
;
6293 piece_loc
= &XEXP (*piece_loc
, 1);
6297 /* TEMP->LAST here is either pointer to the last but one or
6298 last element in the chained list, LAST is pointer to the
6300 if (label
&& strcmp (last
->label
, label
) == 0 && last
->view
== view
)
6302 /* For SRA optimized variables if there weren't any real
6303 insns since last note, just modify the last node. */
6304 if (piece_loc
!= NULL
)
6306 adjust_piece_list (piece_loc
, NULL
, NULL
,
6307 bitpos
, piece_bitpos
, bitsize
, loc_note
);
6310 /* If the last note doesn't cover any instructions, remove it. */
6311 if (temp
->last
!= last
)
6313 temp
->last
->next
= NULL
;
6316 gcc_assert (strcmp (last
->label
, label
) != 0 || last
->view
!= view
);
6320 gcc_assert (temp
->first
== temp
->last
6321 || (temp
->first
->next
== temp
->last
6322 && TREE_CODE (decl
) == PARM_DECL
));
6323 memset (temp
->last
, '\0', sizeof (*temp
->last
));
6324 temp
->last
->loc
= construct_piece_list (loc_note
, bitpos
, bitsize
);
6328 if (bitsize
== -1 && NOTE_P (last
->loc
))
6329 last_loc_note
= last
->loc
;
6330 else if (piece_loc
!= NULL
6331 && *piece_loc
!= NULL_RTX
6332 && piece_bitpos
== bitpos
6333 && decl_piece_bitsize (*piece_loc
) == bitsize
)
6334 last_loc_note
= *decl_piece_varloc_ptr (*piece_loc
);
6336 last_loc_note
= NULL_RTX
;
6337 /* If the current location is the same as the end of the list,
6338 and either both or neither of the locations is uninitialized,
6339 we have nothing to do. */
6340 if (last_loc_note
== NULL_RTX
6341 || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note
),
6342 NOTE_VAR_LOCATION_LOC (loc_note
)))
6343 || ((NOTE_VAR_LOCATION_STATUS (last_loc_note
)
6344 != NOTE_VAR_LOCATION_STATUS (loc_note
))
6345 && ((NOTE_VAR_LOCATION_STATUS (last_loc_note
)
6346 == VAR_INIT_STATUS_UNINITIALIZED
)
6347 || (NOTE_VAR_LOCATION_STATUS (loc_note
)
6348 == VAR_INIT_STATUS_UNINITIALIZED
))))
6350 /* Add LOC to the end of list and update LAST. If the last
6351 element of the list has been removed above, reuse its
6352 memory for the new node, otherwise allocate a new one. */
6356 memset (loc
, '\0', sizeof (*loc
));
6359 loc
= ggc_cleared_alloc
<var_loc_node
> ();
6360 if (bitsize
== -1 || piece_loc
== NULL
)
6361 loc
->loc
= construct_piece_list (loc_note
, bitpos
, bitsize
);
6363 adjust_piece_list (&loc
->loc
, &last
->loc
, piece_loc
,
6364 bitpos
, piece_bitpos
, bitsize
, loc_note
);
6366 /* Ensure TEMP->LAST will point either to the new last but one
6367 element of the chain, or to the last element in it. */
6368 if (last
!= temp
->last
)
6376 loc
= ggc_cleared_alloc
<var_loc_node
> ();
6379 loc
->loc
= construct_piece_list (loc_note
, bitpos
, bitsize
);
6384 /* Keep track of the number of spaces used to indent the
6385 output of the debugging routines that print the structure of
6386 the DIE internal representation. */
6387 static int print_indent
;
6389 /* Indent the line the number of spaces given by print_indent. */
6392 print_spaces (FILE *outfile
)
6394 fprintf (outfile
, "%*s", print_indent
, "");
6397 /* Print a type signature in hex. */
6400 print_signature (FILE *outfile
, char *sig
)
6404 for (i
= 0; i
< DWARF_TYPE_SIGNATURE_SIZE
; i
++)
6405 fprintf (outfile
, "%02x", sig
[i
] & 0xff);
6409 print_discr_value (FILE *outfile
, dw_discr_value
*discr_value
)
6411 if (discr_value
->pos
)
6412 fprintf (outfile
, HOST_WIDE_INT_PRINT_UNSIGNED
, discr_value
->v
.sval
);
6414 fprintf (outfile
, HOST_WIDE_INT_PRINT_DEC
, discr_value
->v
.uval
);
6417 static void print_loc_descr (dw_loc_descr_ref
, FILE *);
6419 /* Print the value associated to the VAL DWARF value node to OUTFILE. If
6420 RECURSE, output location descriptor operations. */
6423 print_dw_val (dw_val_node
*val
, bool recurse
, FILE *outfile
)
6425 switch (val
->val_class
)
6427 case dw_val_class_addr
:
6428 fprintf (outfile
, "address");
6430 case dw_val_class_offset
:
6431 fprintf (outfile
, "offset");
6433 case dw_val_class_loc
:
6434 fprintf (outfile
, "location descriptor");
6435 if (val
->v
.val_loc
== NULL
)
6436 fprintf (outfile
, " -> <null>\n");
6439 fprintf (outfile
, ":\n");
6441 print_loc_descr (val
->v
.val_loc
, outfile
);
6446 if (flag_dump_noaddr
|| flag_dump_unnumbered
)
6447 fprintf (outfile
, " #\n");
6449 fprintf (outfile
, " (%p)\n", (void *) val
->v
.val_loc
);
6452 case dw_val_class_loc_list
:
6453 fprintf (outfile
, "location list -> label:%s",
6454 val
->v
.val_loc_list
->ll_symbol
);
6456 case dw_val_class_view_list
:
6457 val
= view_list_to_loc_list_val_node (val
);
6458 fprintf (outfile
, "location list with views -> labels:%s and %s",
6459 val
->v
.val_loc_list
->ll_symbol
,
6460 val
->v
.val_loc_list
->vl_symbol
);
6462 case dw_val_class_range_list
:
6463 fprintf (outfile
, "range list");
6465 case dw_val_class_const
:
6466 case dw_val_class_const_implicit
:
6467 fprintf (outfile
, HOST_WIDE_INT_PRINT_DEC
, val
->v
.val_int
);
6469 case dw_val_class_unsigned_const
:
6470 case dw_val_class_unsigned_const_implicit
:
6471 fprintf (outfile
, HOST_WIDE_INT_PRINT_UNSIGNED
, val
->v
.val_unsigned
);
6473 case dw_val_class_const_double
:
6474 fprintf (outfile
, "constant (" HOST_WIDE_INT_PRINT_DEC
","\
6475 HOST_WIDE_INT_PRINT_UNSIGNED
")",
6476 val
->v
.val_double
.high
,
6477 val
->v
.val_double
.low
);
6479 case dw_val_class_wide_int
:
6481 int i
= val
->v
.val_wide
->get_len ();
6482 fprintf (outfile
, "constant (");
6484 if (val
->v
.val_wide
->elt (i
- 1) == 0)
6485 fprintf (outfile
, "0x");
6486 fprintf (outfile
, HOST_WIDE_INT_PRINT_HEX
,
6487 val
->v
.val_wide
->elt (--i
));
6489 fprintf (outfile
, HOST_WIDE_INT_PRINT_PADDED_HEX
,
6490 val
->v
.val_wide
->elt (i
));
6491 fprintf (outfile
, ")");
6494 case dw_val_class_vec
:
6495 fprintf (outfile
, "floating-point or vector constant");
6497 case dw_val_class_flag
:
6498 fprintf (outfile
, "%u", val
->v
.val_flag
);
6500 case dw_val_class_die_ref
:
6501 if (val
->v
.val_die_ref
.die
!= NULL
)
6503 dw_die_ref die
= val
->v
.val_die_ref
.die
;
6505 if (die
->comdat_type_p
)
6507 fprintf (outfile
, "die -> signature: ");
6508 print_signature (outfile
,
6509 die
->die_id
.die_type_node
->signature
);
6511 else if (die
->die_id
.die_symbol
)
6513 fprintf (outfile
, "die -> label: %s", die
->die_id
.die_symbol
);
6514 if (die
->with_offset
)
6515 fprintf (outfile
, " + %ld", die
->die_offset
);
6518 fprintf (outfile
, "die -> %ld", die
->die_offset
);
6519 if (flag_dump_noaddr
|| flag_dump_unnumbered
)
6520 fprintf (outfile
, " #");
6522 fprintf (outfile
, " (%p)", (void *) die
);
6525 fprintf (outfile
, "die -> <null>");
6527 case dw_val_class_vms_delta
:
6528 fprintf (outfile
, "delta: @slotcount(%s-%s)",
6529 val
->v
.val_vms_delta
.lbl2
, val
->v
.val_vms_delta
.lbl1
);
6531 case dw_val_class_symview
:
6532 fprintf (outfile
, "view: %s", val
->v
.val_symbolic_view
);
6534 case dw_val_class_lbl_id
:
6535 case dw_val_class_lineptr
:
6536 case dw_val_class_macptr
:
6537 case dw_val_class_loclistsptr
:
6538 case dw_val_class_high_pc
:
6539 fprintf (outfile
, "label: %s", val
->v
.val_lbl_id
);
6541 case dw_val_class_str
:
6542 if (val
->v
.val_str
->str
!= NULL
)
6543 fprintf (outfile
, "\"%s\"", val
->v
.val_str
->str
);
6545 fprintf (outfile
, "<null>");
6547 case dw_val_class_file
:
6548 case dw_val_class_file_implicit
:
6549 fprintf (outfile
, "\"%s\" (%d)", val
->v
.val_file
->filename
,
6550 val
->v
.val_file
->emitted_number
);
6552 case dw_val_class_data8
:
6556 for (i
= 0; i
< 8; i
++)
6557 fprintf (outfile
, "%02x", val
->v
.val_data8
[i
]);
6560 case dw_val_class_discr_value
:
6561 print_discr_value (outfile
, &val
->v
.val_discr_value
);
6563 case dw_val_class_discr_list
:
6564 for (dw_discr_list_ref node
= val
->v
.val_discr_list
;
6566 node
= node
->dw_discr_next
)
6568 if (node
->dw_discr_range
)
6570 fprintf (outfile
, " .. ");
6571 print_discr_value (outfile
, &node
->dw_discr_lower_bound
);
6572 print_discr_value (outfile
, &node
->dw_discr_upper_bound
);
6575 print_discr_value (outfile
, &node
->dw_discr_lower_bound
);
6577 if (node
->dw_discr_next
!= NULL
)
6578 fprintf (outfile
, " | ");
6585 /* Likewise, for a DIE attribute. */
6588 print_attribute (dw_attr_node
*a
, bool recurse
, FILE *outfile
)
6590 print_dw_val (&a
->dw_attr_val
, recurse
, outfile
);
6594 /* Print the list of operands in the LOC location description to OUTFILE. This
6595 routine is a debugging aid only. */
6598 print_loc_descr (dw_loc_descr_ref loc
, FILE *outfile
)
6600 dw_loc_descr_ref l
= loc
;
6604 print_spaces (outfile
);
6605 fprintf (outfile
, "<null>\n");
6609 for (l
= loc
; l
!= NULL
; l
= l
->dw_loc_next
)
6611 print_spaces (outfile
);
6612 if (flag_dump_noaddr
|| flag_dump_unnumbered
)
6613 fprintf (outfile
, "#");
6615 fprintf (outfile
, "(%p)", (void *) l
);
6616 fprintf (outfile
, " %s",
6617 dwarf_stack_op_name (l
->dw_loc_opc
));
6618 if (l
->dw_loc_oprnd1
.val_class
!= dw_val_class_none
)
6620 fprintf (outfile
, " ");
6621 print_dw_val (&l
->dw_loc_oprnd1
, false, outfile
);
6623 if (l
->dw_loc_oprnd2
.val_class
!= dw_val_class_none
)
6625 fprintf (outfile
, ", ");
6626 print_dw_val (&l
->dw_loc_oprnd2
, false, outfile
);
6628 fprintf (outfile
, "\n");
6632 /* Print the information associated with a given DIE, and its children.
6633 This routine is a debugging aid only. */
6636 print_die (dw_die_ref die
, FILE *outfile
)
6642 print_spaces (outfile
);
6643 fprintf (outfile
, "DIE %4ld: %s ",
6644 die
->die_offset
, dwarf_tag_name (die
->die_tag
));
6645 if (flag_dump_noaddr
|| flag_dump_unnumbered
)
6646 fprintf (outfile
, "#\n");
6648 fprintf (outfile
, "(%p)\n", (void*) die
);
6649 print_spaces (outfile
);
6650 fprintf (outfile
, " abbrev id: %lu", die
->die_abbrev
);
6651 fprintf (outfile
, " offset: %ld", die
->die_offset
);
6652 fprintf (outfile
, " mark: %d\n", die
->die_mark
);
6654 if (die
->comdat_type_p
)
6656 print_spaces (outfile
);
6657 fprintf (outfile
, " signature: ");
6658 print_signature (outfile
, die
->die_id
.die_type_node
->signature
);
6659 fprintf (outfile
, "\n");
6662 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
6664 print_spaces (outfile
);
6665 fprintf (outfile
, " %s: ", dwarf_attr_name (a
->dw_attr
));
6667 print_attribute (a
, true, outfile
);
6668 fprintf (outfile
, "\n");
6671 if (die
->die_child
!= NULL
)
6674 FOR_EACH_CHILD (die
, c
, print_die (c
, outfile
));
6677 if (print_indent
== 0)
6678 fprintf (outfile
, "\n");
6681 /* Print the list of operations in the LOC location description. */
6684 debug_dwarf_loc_descr (dw_loc_descr_ref loc
)
6686 print_loc_descr (loc
, stderr
);
6689 /* Print the information collected for a given DIE. */
6692 debug_dwarf_die (dw_die_ref die
)
6694 print_die (die
, stderr
);
6698 debug (die_struct
&ref
)
6700 print_die (&ref
, stderr
);
6704 debug (die_struct
*ptr
)
6709 fprintf (stderr
, "<nil>\n");
6713 /* Print all DWARF information collected for the compilation unit.
6714 This routine is a debugging aid only. */
6720 print_die (comp_unit_die (), stderr
);
6723 /* Verify the DIE tree structure. */
6726 verify_die (dw_die_ref die
)
6728 gcc_assert (!die
->die_mark
);
6729 if (die
->die_parent
== NULL
6730 && die
->die_sib
== NULL
)
6732 /* Verify the die_sib list is cyclic. */
6739 while (x
&& !x
->die_mark
);
6740 gcc_assert (x
== die
);
6744 /* Verify all dies have the same parent. */
6745 gcc_assert (x
->die_parent
== die
->die_parent
);
6748 /* Verify the child has the proper parent and recurse. */
6749 gcc_assert (x
->die_child
->die_parent
== x
);
6750 verify_die (x
->die_child
);
6755 while (x
&& x
->die_mark
);
6758 /* Sanity checks on DIEs. */
6761 check_die (dw_die_ref die
)
6765 bool inline_found
= false;
6766 int n_location
= 0, n_low_pc
= 0, n_high_pc
= 0, n_artificial
= 0;
6767 int n_decl_line
= 0, n_decl_column
= 0, n_decl_file
= 0;
6768 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
6773 if (a
->dw_attr_val
.v
.val_unsigned
)
6774 inline_found
= true;
6776 case DW_AT_location
:
6785 case DW_AT_artificial
:
6788 case DW_AT_decl_column
:
6791 case DW_AT_decl_line
:
6794 case DW_AT_decl_file
:
6801 if (n_location
> 1 || n_low_pc
> 1 || n_high_pc
> 1 || n_artificial
> 1
6802 || n_decl_column
> 1 || n_decl_line
> 1 || n_decl_file
> 1)
6804 fprintf (stderr
, "Duplicate attributes in DIE:\n");
6805 debug_dwarf_die (die
);
6810 /* A debugging information entry that is a member of an abstract
6811 instance tree [that has DW_AT_inline] should not contain any
6812 attributes which describe aspects of the subroutine which vary
6813 between distinct inlined expansions or distinct out-of-line
6815 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
6816 gcc_assert (a
->dw_attr
!= DW_AT_low_pc
6817 && a
->dw_attr
!= DW_AT_high_pc
6818 && a
->dw_attr
!= DW_AT_location
6819 && a
->dw_attr
!= DW_AT_frame_base
6820 && a
->dw_attr
!= DW_AT_call_all_calls
6821 && a
->dw_attr
!= DW_AT_GNU_all_call_sites
);
6825 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
6826 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
6827 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
6829 /* Calculate the checksum of a location expression. */
6832 loc_checksum (dw_loc_descr_ref loc
, struct md5_ctx
*ctx
)
6835 inchash::hash hstate
;
6838 tem
= (loc
->dtprel
<< 8) | ((unsigned int) loc
->dw_loc_opc
);
6840 hash_loc_operands (loc
, hstate
);
6841 hash
= hstate
.end();
6845 /* Calculate the checksum of an attribute. */
6848 attr_checksum (dw_attr_node
*at
, struct md5_ctx
*ctx
, int *mark
)
6850 dw_loc_descr_ref loc
;
6853 CHECKSUM (at
->dw_attr
);
6855 /* We don't care that this was compiled with a different compiler
6856 snapshot; if the output is the same, that's what matters. */
6857 if (at
->dw_attr
== DW_AT_producer
)
6860 switch (AT_class (at
))
6862 case dw_val_class_const
:
6863 case dw_val_class_const_implicit
:
6864 CHECKSUM (at
->dw_attr_val
.v
.val_int
);
6866 case dw_val_class_unsigned_const
:
6867 case dw_val_class_unsigned_const_implicit
:
6868 CHECKSUM (at
->dw_attr_val
.v
.val_unsigned
);
6870 case dw_val_class_const_double
:
6871 CHECKSUM (at
->dw_attr_val
.v
.val_double
);
6873 case dw_val_class_wide_int
:
6874 CHECKSUM_BLOCK (at
->dw_attr_val
.v
.val_wide
->get_val (),
6875 get_full_len (*at
->dw_attr_val
.v
.val_wide
)
6876 * HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
);
6878 case dw_val_class_vec
:
6879 CHECKSUM_BLOCK (at
->dw_attr_val
.v
.val_vec
.array
,
6880 (at
->dw_attr_val
.v
.val_vec
.length
6881 * at
->dw_attr_val
.v
.val_vec
.elt_size
));
6883 case dw_val_class_flag
:
6884 CHECKSUM (at
->dw_attr_val
.v
.val_flag
);
6886 case dw_val_class_str
:
6887 CHECKSUM_STRING (AT_string (at
));
6890 case dw_val_class_addr
:
6892 gcc_assert (GET_CODE (r
) == SYMBOL_REF
);
6893 CHECKSUM_STRING (XSTR (r
, 0));
6896 case dw_val_class_offset
:
6897 CHECKSUM (at
->dw_attr_val
.v
.val_offset
);
6900 case dw_val_class_loc
:
6901 for (loc
= AT_loc (at
); loc
; loc
= loc
->dw_loc_next
)
6902 loc_checksum (loc
, ctx
);
6905 case dw_val_class_die_ref
:
6906 die_checksum (AT_ref (at
), ctx
, mark
);
6909 case dw_val_class_fde_ref
:
6910 case dw_val_class_vms_delta
:
6911 case dw_val_class_symview
:
6912 case dw_val_class_lbl_id
:
6913 case dw_val_class_lineptr
:
6914 case dw_val_class_macptr
:
6915 case dw_val_class_loclistsptr
:
6916 case dw_val_class_high_pc
:
6919 case dw_val_class_file
:
6920 case dw_val_class_file_implicit
:
6921 CHECKSUM_STRING (AT_file (at
)->filename
);
6924 case dw_val_class_data8
:
6925 CHECKSUM (at
->dw_attr_val
.v
.val_data8
);
6933 /* Calculate the checksum of a DIE. */
6936 die_checksum (dw_die_ref die
, struct md5_ctx
*ctx
, int *mark
)
6942 /* To avoid infinite recursion. */
6945 CHECKSUM (die
->die_mark
);
6948 die
->die_mark
= ++(*mark
);
6950 CHECKSUM (die
->die_tag
);
6952 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
6953 attr_checksum (a
, ctx
, mark
);
6955 FOR_EACH_CHILD (die
, c
, die_checksum (c
, ctx
, mark
));
6959 #undef CHECKSUM_BLOCK
6960 #undef CHECKSUM_STRING
6962 /* For DWARF-4 types, include the trailing NULL when checksumming strings. */
6963 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
6964 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
6965 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
6966 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
6967 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
6968 #define CHECKSUM_ATTR(FOO) \
6969 if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
6971 /* Calculate the checksum of a number in signed LEB128 format. */
6974 checksum_sleb128 (HOST_WIDE_INT value
, struct md5_ctx
*ctx
)
6981 byte
= (value
& 0x7f);
6983 more
= !((value
== 0 && (byte
& 0x40) == 0)
6984 || (value
== -1 && (byte
& 0x40) != 0));
6993 /* Calculate the checksum of a number in unsigned LEB128 format. */
6996 checksum_uleb128 (unsigned HOST_WIDE_INT value
, struct md5_ctx
*ctx
)
7000 unsigned char byte
= (value
& 0x7f);
7003 /* More bytes to follow. */
7011 /* Checksum the context of the DIE. This adds the names of any
7012 surrounding namespaces or structures to the checksum. */
7015 checksum_die_context (dw_die_ref die
, struct md5_ctx
*ctx
)
7019 int tag
= die
->die_tag
;
7021 if (tag
!= DW_TAG_namespace
7022 && tag
!= DW_TAG_structure_type
7023 && tag
!= DW_TAG_class_type
)
7026 name
= get_AT_string (die
, DW_AT_name
);
7028 spec
= get_AT_ref (die
, DW_AT_specification
);
7032 if (die
->die_parent
!= NULL
)
7033 checksum_die_context (die
->die_parent
, ctx
);
7035 CHECKSUM_ULEB128 ('C');
7036 CHECKSUM_ULEB128 (tag
);
7038 CHECKSUM_STRING (name
);
7041 /* Calculate the checksum of a location expression. */
7044 loc_checksum_ordered (dw_loc_descr_ref loc
, struct md5_ctx
*ctx
)
7046 /* Special case for lone DW_OP_plus_uconst: checksum as if the location
7047 were emitted as a DW_FORM_sdata instead of a location expression. */
7048 if (loc
->dw_loc_opc
== DW_OP_plus_uconst
&& loc
->dw_loc_next
== NULL
)
7050 CHECKSUM_ULEB128 (DW_FORM_sdata
);
7051 CHECKSUM_SLEB128 ((HOST_WIDE_INT
) loc
->dw_loc_oprnd1
.v
.val_unsigned
);
7055 /* Otherwise, just checksum the raw location expression. */
7058 inchash::hash hstate
;
7061 CHECKSUM_ULEB128 (loc
->dtprel
);
7062 CHECKSUM_ULEB128 (loc
->dw_loc_opc
);
7063 hash_loc_operands (loc
, hstate
);
7064 hash
= hstate
.end ();
7066 loc
= loc
->dw_loc_next
;
7070 /* Calculate the checksum of an attribute. */
7073 attr_checksum_ordered (enum dwarf_tag tag
, dw_attr_node
*at
,
7074 struct md5_ctx
*ctx
, int *mark
)
7076 dw_loc_descr_ref loc
;
7079 if (AT_class (at
) == dw_val_class_die_ref
)
7081 dw_die_ref target_die
= AT_ref (at
);
7083 /* For pointer and reference types, we checksum only the (qualified)
7084 name of the target type (if there is a name). For friend entries,
7085 we checksum only the (qualified) name of the target type or function.
7086 This allows the checksum to remain the same whether the target type
7087 is complete or not. */
7088 if ((at
->dw_attr
== DW_AT_type
7089 && (tag
== DW_TAG_pointer_type
7090 || tag
== DW_TAG_reference_type
7091 || tag
== DW_TAG_rvalue_reference_type
7092 || tag
== DW_TAG_ptr_to_member_type
))
7093 || (at
->dw_attr
== DW_AT_friend
7094 && tag
== DW_TAG_friend
))
7096 dw_attr_node
*name_attr
= get_AT (target_die
, DW_AT_name
);
7098 if (name_attr
!= NULL
)
7100 dw_die_ref decl
= get_AT_ref (target_die
, DW_AT_specification
);
7104 CHECKSUM_ULEB128 ('N');
7105 CHECKSUM_ULEB128 (at
->dw_attr
);
7106 if (decl
->die_parent
!= NULL
)
7107 checksum_die_context (decl
->die_parent
, ctx
);
7108 CHECKSUM_ULEB128 ('E');
7109 CHECKSUM_STRING (AT_string (name_attr
));
7114 /* For all other references to another DIE, we check to see if the
7115 target DIE has already been visited. If it has, we emit a
7116 backward reference; if not, we descend recursively. */
7117 if (target_die
->die_mark
> 0)
7119 CHECKSUM_ULEB128 ('R');
7120 CHECKSUM_ULEB128 (at
->dw_attr
);
7121 CHECKSUM_ULEB128 (target_die
->die_mark
);
7125 dw_die_ref decl
= get_AT_ref (target_die
, DW_AT_specification
);
7129 target_die
->die_mark
= ++(*mark
);
7130 CHECKSUM_ULEB128 ('T');
7131 CHECKSUM_ULEB128 (at
->dw_attr
);
7132 if (decl
->die_parent
!= NULL
)
7133 checksum_die_context (decl
->die_parent
, ctx
);
7134 die_checksum_ordered (target_die
, ctx
, mark
);
7139 CHECKSUM_ULEB128 ('A');
7140 CHECKSUM_ULEB128 (at
->dw_attr
);
7142 switch (AT_class (at
))
7144 case dw_val_class_const
:
7145 case dw_val_class_const_implicit
:
7146 CHECKSUM_ULEB128 (DW_FORM_sdata
);
7147 CHECKSUM_SLEB128 (at
->dw_attr_val
.v
.val_int
);
7150 case dw_val_class_unsigned_const
:
7151 case dw_val_class_unsigned_const_implicit
:
7152 CHECKSUM_ULEB128 (DW_FORM_sdata
);
7153 CHECKSUM_SLEB128 ((int) at
->dw_attr_val
.v
.val_unsigned
);
7156 case dw_val_class_const_double
:
7157 CHECKSUM_ULEB128 (DW_FORM_block
);
7158 CHECKSUM_ULEB128 (sizeof (at
->dw_attr_val
.v
.val_double
));
7159 CHECKSUM (at
->dw_attr_val
.v
.val_double
);
7162 case dw_val_class_wide_int
:
7163 CHECKSUM_ULEB128 (DW_FORM_block
);
7164 CHECKSUM_ULEB128 (get_full_len (*at
->dw_attr_val
.v
.val_wide
)
7165 * HOST_BITS_PER_WIDE_INT
/ BITS_PER_UNIT
);
7166 CHECKSUM_BLOCK (at
->dw_attr_val
.v
.val_wide
->get_val (),
7167 get_full_len (*at
->dw_attr_val
.v
.val_wide
)
7168 * HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
);
7171 case dw_val_class_vec
:
7172 CHECKSUM_ULEB128 (DW_FORM_block
);
7173 CHECKSUM_ULEB128 (at
->dw_attr_val
.v
.val_vec
.length
7174 * at
->dw_attr_val
.v
.val_vec
.elt_size
);
7175 CHECKSUM_BLOCK (at
->dw_attr_val
.v
.val_vec
.array
,
7176 (at
->dw_attr_val
.v
.val_vec
.length
7177 * at
->dw_attr_val
.v
.val_vec
.elt_size
));
7180 case dw_val_class_flag
:
7181 CHECKSUM_ULEB128 (DW_FORM_flag
);
7182 CHECKSUM_ULEB128 (at
->dw_attr_val
.v
.val_flag
? 1 : 0);
7185 case dw_val_class_str
:
7186 CHECKSUM_ULEB128 (DW_FORM_string
);
7187 CHECKSUM_STRING (AT_string (at
));
7190 case dw_val_class_addr
:
7192 gcc_assert (GET_CODE (r
) == SYMBOL_REF
);
7193 CHECKSUM_ULEB128 (DW_FORM_string
);
7194 CHECKSUM_STRING (XSTR (r
, 0));
7197 case dw_val_class_offset
:
7198 CHECKSUM_ULEB128 (DW_FORM_sdata
);
7199 CHECKSUM_ULEB128 (at
->dw_attr_val
.v
.val_offset
);
7202 case dw_val_class_loc
:
7203 for (loc
= AT_loc (at
); loc
; loc
= loc
->dw_loc_next
)
7204 loc_checksum_ordered (loc
, ctx
);
7207 case dw_val_class_fde_ref
:
7208 case dw_val_class_symview
:
7209 case dw_val_class_lbl_id
:
7210 case dw_val_class_lineptr
:
7211 case dw_val_class_macptr
:
7212 case dw_val_class_loclistsptr
:
7213 case dw_val_class_high_pc
:
7216 case dw_val_class_file
:
7217 case dw_val_class_file_implicit
:
7218 CHECKSUM_ULEB128 (DW_FORM_string
);
7219 CHECKSUM_STRING (AT_file (at
)->filename
);
7222 case dw_val_class_data8
:
7223 CHECKSUM (at
->dw_attr_val
.v
.val_data8
);
7231 struct checksum_attributes
7233 dw_attr_node
*at_name
;
7234 dw_attr_node
*at_type
;
7235 dw_attr_node
*at_friend
;
7236 dw_attr_node
*at_accessibility
;
7237 dw_attr_node
*at_address_class
;
7238 dw_attr_node
*at_alignment
;
7239 dw_attr_node
*at_allocated
;
7240 dw_attr_node
*at_artificial
;
7241 dw_attr_node
*at_associated
;
7242 dw_attr_node
*at_binary_scale
;
7243 dw_attr_node
*at_bit_offset
;
7244 dw_attr_node
*at_bit_size
;
7245 dw_attr_node
*at_bit_stride
;
7246 dw_attr_node
*at_byte_size
;
7247 dw_attr_node
*at_byte_stride
;
7248 dw_attr_node
*at_const_value
;
7249 dw_attr_node
*at_containing_type
;
7250 dw_attr_node
*at_count
;
7251 dw_attr_node
*at_data_location
;
7252 dw_attr_node
*at_data_member_location
;
7253 dw_attr_node
*at_decimal_scale
;
7254 dw_attr_node
*at_decimal_sign
;
7255 dw_attr_node
*at_default_value
;
7256 dw_attr_node
*at_digit_count
;
7257 dw_attr_node
*at_discr
;
7258 dw_attr_node
*at_discr_list
;
7259 dw_attr_node
*at_discr_value
;
7260 dw_attr_node
*at_encoding
;
7261 dw_attr_node
*at_endianity
;
7262 dw_attr_node
*at_explicit
;
7263 dw_attr_node
*at_is_optional
;
7264 dw_attr_node
*at_location
;
7265 dw_attr_node
*at_lower_bound
;
7266 dw_attr_node
*at_mutable
;
7267 dw_attr_node
*at_ordering
;
7268 dw_attr_node
*at_picture_string
;
7269 dw_attr_node
*at_prototyped
;
7270 dw_attr_node
*at_small
;
7271 dw_attr_node
*at_segment
;
7272 dw_attr_node
*at_string_length
;
7273 dw_attr_node
*at_string_length_bit_size
;
7274 dw_attr_node
*at_string_length_byte_size
;
7275 dw_attr_node
*at_threads_scaled
;
7276 dw_attr_node
*at_upper_bound
;
7277 dw_attr_node
*at_use_location
;
7278 dw_attr_node
*at_use_UTF8
;
7279 dw_attr_node
*at_variable_parameter
;
7280 dw_attr_node
*at_virtuality
;
7281 dw_attr_node
*at_visibility
;
7282 dw_attr_node
*at_vtable_elem_location
;
7285 /* Collect the attributes that we will want to use for the checksum. */
7288 collect_checksum_attributes (struct checksum_attributes
*attrs
, dw_die_ref die
)
7293 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
7304 attrs
->at_friend
= a
;
7306 case DW_AT_accessibility
:
7307 attrs
->at_accessibility
= a
;
7309 case DW_AT_address_class
:
7310 attrs
->at_address_class
= a
;
7312 case DW_AT_alignment
:
7313 attrs
->at_alignment
= a
;
7315 case DW_AT_allocated
:
7316 attrs
->at_allocated
= a
;
7318 case DW_AT_artificial
:
7319 attrs
->at_artificial
= a
;
7321 case DW_AT_associated
:
7322 attrs
->at_associated
= a
;
7324 case DW_AT_binary_scale
:
7325 attrs
->at_binary_scale
= a
;
7327 case DW_AT_bit_offset
:
7328 attrs
->at_bit_offset
= a
;
7330 case DW_AT_bit_size
:
7331 attrs
->at_bit_size
= a
;
7333 case DW_AT_bit_stride
:
7334 attrs
->at_bit_stride
= a
;
7336 case DW_AT_byte_size
:
7337 attrs
->at_byte_size
= a
;
7339 case DW_AT_byte_stride
:
7340 attrs
->at_byte_stride
= a
;
7342 case DW_AT_const_value
:
7343 attrs
->at_const_value
= a
;
7345 case DW_AT_containing_type
:
7346 attrs
->at_containing_type
= a
;
7349 attrs
->at_count
= a
;
7351 case DW_AT_data_location
:
7352 attrs
->at_data_location
= a
;
7354 case DW_AT_data_member_location
:
7355 attrs
->at_data_member_location
= a
;
7357 case DW_AT_decimal_scale
:
7358 attrs
->at_decimal_scale
= a
;
7360 case DW_AT_decimal_sign
:
7361 attrs
->at_decimal_sign
= a
;
7363 case DW_AT_default_value
:
7364 attrs
->at_default_value
= a
;
7366 case DW_AT_digit_count
:
7367 attrs
->at_digit_count
= a
;
7370 attrs
->at_discr
= a
;
7372 case DW_AT_discr_list
:
7373 attrs
->at_discr_list
= a
;
7375 case DW_AT_discr_value
:
7376 attrs
->at_discr_value
= a
;
7378 case DW_AT_encoding
:
7379 attrs
->at_encoding
= a
;
7381 case DW_AT_endianity
:
7382 attrs
->at_endianity
= a
;
7384 case DW_AT_explicit
:
7385 attrs
->at_explicit
= a
;
7387 case DW_AT_is_optional
:
7388 attrs
->at_is_optional
= a
;
7390 case DW_AT_location
:
7391 attrs
->at_location
= a
;
7393 case DW_AT_lower_bound
:
7394 attrs
->at_lower_bound
= a
;
7397 attrs
->at_mutable
= a
;
7399 case DW_AT_ordering
:
7400 attrs
->at_ordering
= a
;
7402 case DW_AT_picture_string
:
7403 attrs
->at_picture_string
= a
;
7405 case DW_AT_prototyped
:
7406 attrs
->at_prototyped
= a
;
7409 attrs
->at_small
= a
;
7412 attrs
->at_segment
= a
;
7414 case DW_AT_string_length
:
7415 attrs
->at_string_length
= a
;
7417 case DW_AT_string_length_bit_size
:
7418 attrs
->at_string_length_bit_size
= a
;
7420 case DW_AT_string_length_byte_size
:
7421 attrs
->at_string_length_byte_size
= a
;
7423 case DW_AT_threads_scaled
:
7424 attrs
->at_threads_scaled
= a
;
7426 case DW_AT_upper_bound
:
7427 attrs
->at_upper_bound
= a
;
7429 case DW_AT_use_location
:
7430 attrs
->at_use_location
= a
;
7432 case DW_AT_use_UTF8
:
7433 attrs
->at_use_UTF8
= a
;
7435 case DW_AT_variable_parameter
:
7436 attrs
->at_variable_parameter
= a
;
7438 case DW_AT_virtuality
:
7439 attrs
->at_virtuality
= a
;
7441 case DW_AT_visibility
:
7442 attrs
->at_visibility
= a
;
7444 case DW_AT_vtable_elem_location
:
7445 attrs
->at_vtable_elem_location
= a
;
7453 /* Calculate the checksum of a DIE, using an ordered subset of attributes. */
7456 die_checksum_ordered (dw_die_ref die
, struct md5_ctx
*ctx
, int *mark
)
7460 struct checksum_attributes attrs
;
7462 CHECKSUM_ULEB128 ('D');
7463 CHECKSUM_ULEB128 (die
->die_tag
);
7465 memset (&attrs
, 0, sizeof (attrs
));
7467 decl
= get_AT_ref (die
, DW_AT_specification
);
7469 collect_checksum_attributes (&attrs
, decl
);
7470 collect_checksum_attributes (&attrs
, die
);
7472 CHECKSUM_ATTR (attrs
.at_name
);
7473 CHECKSUM_ATTR (attrs
.at_accessibility
);
7474 CHECKSUM_ATTR (attrs
.at_address_class
);
7475 CHECKSUM_ATTR (attrs
.at_allocated
);
7476 CHECKSUM_ATTR (attrs
.at_artificial
);
7477 CHECKSUM_ATTR (attrs
.at_associated
);
7478 CHECKSUM_ATTR (attrs
.at_binary_scale
);
7479 CHECKSUM_ATTR (attrs
.at_bit_offset
);
7480 CHECKSUM_ATTR (attrs
.at_bit_size
);
7481 CHECKSUM_ATTR (attrs
.at_bit_stride
);
7482 CHECKSUM_ATTR (attrs
.at_byte_size
);
7483 CHECKSUM_ATTR (attrs
.at_byte_stride
);
7484 CHECKSUM_ATTR (attrs
.at_const_value
);
7485 CHECKSUM_ATTR (attrs
.at_containing_type
);
7486 CHECKSUM_ATTR (attrs
.at_count
);
7487 CHECKSUM_ATTR (attrs
.at_data_location
);
7488 CHECKSUM_ATTR (attrs
.at_data_member_location
);
7489 CHECKSUM_ATTR (attrs
.at_decimal_scale
);
7490 CHECKSUM_ATTR (attrs
.at_decimal_sign
);
7491 CHECKSUM_ATTR (attrs
.at_default_value
);
7492 CHECKSUM_ATTR (attrs
.at_digit_count
);
7493 CHECKSUM_ATTR (attrs
.at_discr
);
7494 CHECKSUM_ATTR (attrs
.at_discr_list
);
7495 CHECKSUM_ATTR (attrs
.at_discr_value
);
7496 CHECKSUM_ATTR (attrs
.at_encoding
);
7497 CHECKSUM_ATTR (attrs
.at_endianity
);
7498 CHECKSUM_ATTR (attrs
.at_explicit
);
7499 CHECKSUM_ATTR (attrs
.at_is_optional
);
7500 CHECKSUM_ATTR (attrs
.at_location
);
7501 CHECKSUM_ATTR (attrs
.at_lower_bound
);
7502 CHECKSUM_ATTR (attrs
.at_mutable
);
7503 CHECKSUM_ATTR (attrs
.at_ordering
);
7504 CHECKSUM_ATTR (attrs
.at_picture_string
);
7505 CHECKSUM_ATTR (attrs
.at_prototyped
);
7506 CHECKSUM_ATTR (attrs
.at_small
);
7507 CHECKSUM_ATTR (attrs
.at_segment
);
7508 CHECKSUM_ATTR (attrs
.at_string_length
);
7509 CHECKSUM_ATTR (attrs
.at_string_length_bit_size
);
7510 CHECKSUM_ATTR (attrs
.at_string_length_byte_size
);
7511 CHECKSUM_ATTR (attrs
.at_threads_scaled
);
7512 CHECKSUM_ATTR (attrs
.at_upper_bound
);
7513 CHECKSUM_ATTR (attrs
.at_use_location
);
7514 CHECKSUM_ATTR (attrs
.at_use_UTF8
);
7515 CHECKSUM_ATTR (attrs
.at_variable_parameter
);
7516 CHECKSUM_ATTR (attrs
.at_virtuality
);
7517 CHECKSUM_ATTR (attrs
.at_visibility
);
7518 CHECKSUM_ATTR (attrs
.at_vtable_elem_location
);
7519 CHECKSUM_ATTR (attrs
.at_type
);
7520 CHECKSUM_ATTR (attrs
.at_friend
);
7521 CHECKSUM_ATTR (attrs
.at_alignment
);
7523 /* Checksum the child DIEs. */
7526 dw_attr_node
*name_attr
;
7529 name_attr
= get_AT (c
, DW_AT_name
);
7530 if (is_template_instantiation (c
))
7532 /* Ignore instantiations of member type and function templates. */
7534 else if (name_attr
!= NULL
7535 && (is_type_die (c
) || c
->die_tag
== DW_TAG_subprogram
))
7537 /* Use a shallow checksum for named nested types and member
7539 CHECKSUM_ULEB128 ('S');
7540 CHECKSUM_ULEB128 (c
->die_tag
);
7541 CHECKSUM_STRING (AT_string (name_attr
));
7545 /* Use a deep checksum for other children. */
7546 /* Mark this DIE so it gets processed when unmarking. */
7547 if (c
->die_mark
== 0)
7549 die_checksum_ordered (c
, ctx
, mark
);
7551 } while (c
!= die
->die_child
);
7553 CHECKSUM_ULEB128 (0);
7556 /* Add a type name and tag to a hash. */
7558 die_odr_checksum (int tag
, const char *name
, md5_ctx
*ctx
)
7560 CHECKSUM_ULEB128 (tag
);
7561 CHECKSUM_STRING (name
);
7565 #undef CHECKSUM_STRING
7566 #undef CHECKSUM_ATTR
7567 #undef CHECKSUM_LEB128
7568 #undef CHECKSUM_ULEB128
7570 /* Generate the type signature for DIE. This is computed by generating an
7571 MD5 checksum over the DIE's tag, its relevant attributes, and its
7572 children. Attributes that are references to other DIEs are processed
7573 by recursion, using the MARK field to prevent infinite recursion.
7574 If the DIE is nested inside a namespace or another type, we also
7575 need to include that context in the signature. The lower 64 bits
7576 of the resulting MD5 checksum comprise the signature. */
7579 generate_type_signature (dw_die_ref die
, comdat_type_node
*type_node
)
7583 unsigned char checksum
[16];
7588 name
= get_AT_string (die
, DW_AT_name
);
7589 decl
= get_AT_ref (die
, DW_AT_specification
);
7590 parent
= get_die_parent (die
);
7592 /* First, compute a signature for just the type name (and its surrounding
7593 context, if any. This is stored in the type unit DIE for link-time
7594 ODR (one-definition rule) checking. */
7596 if (is_cxx () && name
!= NULL
)
7598 md5_init_ctx (&ctx
);
7600 /* Checksum the names of surrounding namespaces and structures. */
7602 checksum_die_context (parent
, &ctx
);
7604 /* Checksum the current DIE. */
7605 die_odr_checksum (die
->die_tag
, name
, &ctx
);
7606 md5_finish_ctx (&ctx
, checksum
);
7608 add_AT_data8 (type_node
->root_die
, DW_AT_GNU_odr_signature
, &checksum
[8]);
7611 /* Next, compute the complete type signature. */
7613 md5_init_ctx (&ctx
);
7615 die
->die_mark
= mark
;
7617 /* Checksum the names of surrounding namespaces and structures. */
7619 checksum_die_context (parent
, &ctx
);
7621 /* Checksum the DIE and its children. */
7622 die_checksum_ordered (die
, &ctx
, &mark
);
7623 unmark_all_dies (die
);
7624 md5_finish_ctx (&ctx
, checksum
);
7626 /* Store the signature in the type node and link the type DIE and the
7627 type node together. */
7628 memcpy (type_node
->signature
, &checksum
[16 - DWARF_TYPE_SIGNATURE_SIZE
],
7629 DWARF_TYPE_SIGNATURE_SIZE
);
7630 die
->comdat_type_p
= true;
7631 die
->die_id
.die_type_node
= type_node
;
7632 type_node
->type_die
= die
;
7634 /* If the DIE is a specification, link its declaration to the type node
7638 decl
->comdat_type_p
= true;
7639 decl
->die_id
.die_type_node
= type_node
;
7643 /* Do the location expressions look same? */
7645 same_loc_p (dw_loc_descr_ref loc1
, dw_loc_descr_ref loc2
, int *mark
)
7647 return loc1
->dw_loc_opc
== loc2
->dw_loc_opc
7648 && same_dw_val_p (&loc1
->dw_loc_oprnd1
, &loc2
->dw_loc_oprnd1
, mark
)
7649 && same_dw_val_p (&loc1
->dw_loc_oprnd2
, &loc2
->dw_loc_oprnd2
, mark
);
7652 /* Do the values look the same? */
7654 same_dw_val_p (const dw_val_node
*v1
, const dw_val_node
*v2
, int *mark
)
7656 dw_loc_descr_ref loc1
, loc2
;
7659 if (v1
->val_class
!= v2
->val_class
)
7662 switch (v1
->val_class
)
7664 case dw_val_class_const
:
7665 case dw_val_class_const_implicit
:
7666 return v1
->v
.val_int
== v2
->v
.val_int
;
7667 case dw_val_class_unsigned_const
:
7668 case dw_val_class_unsigned_const_implicit
:
7669 return v1
->v
.val_unsigned
== v2
->v
.val_unsigned
;
7670 case dw_val_class_const_double
:
7671 return v1
->v
.val_double
.high
== v2
->v
.val_double
.high
7672 && v1
->v
.val_double
.low
== v2
->v
.val_double
.low
;
7673 case dw_val_class_wide_int
:
7674 return *v1
->v
.val_wide
== *v2
->v
.val_wide
;
7675 case dw_val_class_vec
:
7676 if (v1
->v
.val_vec
.length
!= v2
->v
.val_vec
.length
7677 || v1
->v
.val_vec
.elt_size
!= v2
->v
.val_vec
.elt_size
)
7679 if (memcmp (v1
->v
.val_vec
.array
, v2
->v
.val_vec
.array
,
7680 v1
->v
.val_vec
.length
* v1
->v
.val_vec
.elt_size
))
7683 case dw_val_class_flag
:
7684 return v1
->v
.val_flag
== v2
->v
.val_flag
;
7685 case dw_val_class_str
:
7686 return !strcmp (v1
->v
.val_str
->str
, v2
->v
.val_str
->str
);
7688 case dw_val_class_addr
:
7689 r1
= v1
->v
.val_addr
;
7690 r2
= v2
->v
.val_addr
;
7691 if (GET_CODE (r1
) != GET_CODE (r2
))
7693 return !rtx_equal_p (r1
, r2
);
7695 case dw_val_class_offset
:
7696 return v1
->v
.val_offset
== v2
->v
.val_offset
;
7698 case dw_val_class_loc
:
7699 for (loc1
= v1
->v
.val_loc
, loc2
= v2
->v
.val_loc
;
7701 loc1
= loc1
->dw_loc_next
, loc2
= loc2
->dw_loc_next
)
7702 if (!same_loc_p (loc1
, loc2
, mark
))
7704 return !loc1
&& !loc2
;
7706 case dw_val_class_die_ref
:
7707 return same_die_p (v1
->v
.val_die_ref
.die
, v2
->v
.val_die_ref
.die
, mark
);
7709 case dw_val_class_symview
:
7710 return strcmp (v1
->v
.val_symbolic_view
, v2
->v
.val_symbolic_view
) == 0;
7712 case dw_val_class_fde_ref
:
7713 case dw_val_class_vms_delta
:
7714 case dw_val_class_lbl_id
:
7715 case dw_val_class_lineptr
:
7716 case dw_val_class_macptr
:
7717 case dw_val_class_loclistsptr
:
7718 case dw_val_class_high_pc
:
7721 case dw_val_class_file
:
7722 case dw_val_class_file_implicit
:
7723 return v1
->v
.val_file
== v2
->v
.val_file
;
7725 case dw_val_class_data8
:
7726 return !memcmp (v1
->v
.val_data8
, v2
->v
.val_data8
, 8);
7733 /* Do the attributes look the same? */
7736 same_attr_p (dw_attr_node
*at1
, dw_attr_node
*at2
, int *mark
)
7738 if (at1
->dw_attr
!= at2
->dw_attr
)
7741 /* We don't care that this was compiled with a different compiler
7742 snapshot; if the output is the same, that's what matters. */
7743 if (at1
->dw_attr
== DW_AT_producer
)
7746 return same_dw_val_p (&at1
->dw_attr_val
, &at2
->dw_attr_val
, mark
);
7749 /* Do the dies look the same? */
7752 same_die_p (dw_die_ref die1
, dw_die_ref die2
, int *mark
)
7758 /* To avoid infinite recursion. */
7760 return die1
->die_mark
== die2
->die_mark
;
7761 die1
->die_mark
= die2
->die_mark
= ++(*mark
);
7763 if (die1
->die_tag
!= die2
->die_tag
)
7766 if (vec_safe_length (die1
->die_attr
) != vec_safe_length (die2
->die_attr
))
7769 FOR_EACH_VEC_SAFE_ELT (die1
->die_attr
, ix
, a1
)
7770 if (!same_attr_p (a1
, &(*die2
->die_attr
)[ix
], mark
))
7773 c1
= die1
->die_child
;
7774 c2
= die2
->die_child
;
7783 if (!same_die_p (c1
, c2
, mark
))
7787 if (c1
== die1
->die_child
)
7789 if (c2
== die2
->die_child
)
7799 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
7800 children, and set die_symbol. */
7803 compute_comp_unit_symbol (dw_die_ref unit_die
)
7805 const char *die_name
= get_AT_string (unit_die
, DW_AT_name
);
7806 const char *base
= die_name
? lbasename (die_name
) : "anonymous";
7807 char *name
= XALLOCAVEC (char, strlen (base
) + 64);
7810 unsigned char checksum
[16];
7813 /* Compute the checksum of the DIE, then append part of it as hex digits to
7814 the name filename of the unit. */
7816 md5_init_ctx (&ctx
);
7818 die_checksum (unit_die
, &ctx
, &mark
);
7819 unmark_all_dies (unit_die
);
7820 md5_finish_ctx (&ctx
, checksum
);
7822 /* When we this for comp_unit_die () we have a DW_AT_name that might
7823 not start with a letter but with anything valid for filenames and
7824 clean_symbol_name doesn't fix that up. Prepend 'g' if the first
7825 character is not a letter. */
7826 sprintf (name
, "%s%s.", ISALPHA (*base
) ? "" : "g", base
);
7827 clean_symbol_name (name
);
7829 p
= name
+ strlen (name
);
7830 for (i
= 0; i
< 4; i
++)
7832 sprintf (p
, "%.2x", checksum
[i
]);
7836 unit_die
->die_id
.die_symbol
= xstrdup (name
);
7839 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
7842 is_type_die (dw_die_ref die
)
7844 switch (die
->die_tag
)
7846 case DW_TAG_array_type
:
7847 case DW_TAG_class_type
:
7848 case DW_TAG_interface_type
:
7849 case DW_TAG_enumeration_type
:
7850 case DW_TAG_pointer_type
:
7851 case DW_TAG_reference_type
:
7852 case DW_TAG_rvalue_reference_type
:
7853 case DW_TAG_string_type
:
7854 case DW_TAG_structure_type
:
7855 case DW_TAG_subroutine_type
:
7856 case DW_TAG_union_type
:
7857 case DW_TAG_ptr_to_member_type
:
7858 case DW_TAG_set_type
:
7859 case DW_TAG_subrange_type
:
7860 case DW_TAG_base_type
:
7861 case DW_TAG_const_type
:
7862 case DW_TAG_file_type
:
7863 case DW_TAG_packed_type
:
7864 case DW_TAG_volatile_type
:
7865 case DW_TAG_typedef
:
7872 /* Returns true iff C is a compile-unit DIE. */
7875 is_cu_die (dw_die_ref c
)
7877 return c
&& (c
->die_tag
== DW_TAG_compile_unit
7878 || c
->die_tag
== DW_TAG_skeleton_unit
);
7881 /* Returns true iff C is a unit DIE of some sort. */
7884 is_unit_die (dw_die_ref c
)
7886 return c
&& (c
->die_tag
== DW_TAG_compile_unit
7887 || c
->die_tag
== DW_TAG_partial_unit
7888 || c
->die_tag
== DW_TAG_type_unit
7889 || c
->die_tag
== DW_TAG_skeleton_unit
);
7892 /* Returns true iff C is a namespace DIE. */
7895 is_namespace_die (dw_die_ref c
)
7897 return c
&& c
->die_tag
== DW_TAG_namespace
;
7900 /* Return non-zero if this DIE is a template parameter. */
7903 is_template_parameter (dw_die_ref die
)
7905 switch (die
->die_tag
)
7907 case DW_TAG_template_type_param
:
7908 case DW_TAG_template_value_param
:
7909 case DW_TAG_GNU_template_template_param
:
7910 case DW_TAG_GNU_template_parameter_pack
:
7917 /* Return non-zero if this DIE represents a template instantiation. */
7920 is_template_instantiation (dw_die_ref die
)
7924 if (!is_type_die (die
) && die
->die_tag
!= DW_TAG_subprogram
)
7926 FOR_EACH_CHILD (die
, c
, if (is_template_parameter (c
)) return true);
7931 gen_internal_sym (const char *prefix
)
7933 char buf
[MAX_ARTIFICIAL_LABEL_BYTES
];
7935 ASM_GENERATE_INTERNAL_LABEL (buf
, prefix
, label_num
++);
7936 return xstrdup (buf
);
7939 /* Return non-zero if this DIE is a declaration. */
7942 is_declaration_die (dw_die_ref die
)
7947 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
7948 if (a
->dw_attr
== DW_AT_declaration
)
7954 /* Return non-zero if this DIE is nested inside a subprogram. */
7957 is_nested_in_subprogram (dw_die_ref die
)
7959 dw_die_ref decl
= get_AT_ref (die
, DW_AT_specification
);
7963 return local_scope_p (decl
);
7966 /* Return non-zero if this DIE contains a defining declaration of a
7970 contains_subprogram_definition (dw_die_ref die
)
7974 if (die
->die_tag
== DW_TAG_subprogram
&& ! is_declaration_die (die
))
7976 FOR_EACH_CHILD (die
, c
, if (contains_subprogram_definition (c
)) return 1);
7980 /* Return non-zero if this is a type DIE that should be moved to a
7981 COMDAT .debug_types section or .debug_info section with DW_UT_*type
7985 should_move_die_to_comdat (dw_die_ref die
)
7987 switch (die
->die_tag
)
7989 case DW_TAG_class_type
:
7990 case DW_TAG_structure_type
:
7991 case DW_TAG_enumeration_type
:
7992 case DW_TAG_union_type
:
7993 /* Don't move declarations, inlined instances, types nested in a
7994 subprogram, or types that contain subprogram definitions. */
7995 if (is_declaration_die (die
)
7996 || get_AT (die
, DW_AT_abstract_origin
)
7997 || is_nested_in_subprogram (die
)
7998 || contains_subprogram_definition (die
))
8001 case DW_TAG_array_type
:
8002 case DW_TAG_interface_type
:
8003 case DW_TAG_pointer_type
:
8004 case DW_TAG_reference_type
:
8005 case DW_TAG_rvalue_reference_type
:
8006 case DW_TAG_string_type
:
8007 case DW_TAG_subroutine_type
:
8008 case DW_TAG_ptr_to_member_type
:
8009 case DW_TAG_set_type
:
8010 case DW_TAG_subrange_type
:
8011 case DW_TAG_base_type
:
8012 case DW_TAG_const_type
:
8013 case DW_TAG_file_type
:
8014 case DW_TAG_packed_type
:
8015 case DW_TAG_volatile_type
:
8016 case DW_TAG_typedef
:
8022 /* Make a clone of DIE. */
8025 clone_die (dw_die_ref die
)
8027 dw_die_ref clone
= new_die_raw (die
->die_tag
);
8031 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
8032 add_dwarf_attr (clone
, a
);
8037 /* Make a clone of the tree rooted at DIE. */
8040 clone_tree (dw_die_ref die
)
8043 dw_die_ref clone
= clone_die (die
);
8045 FOR_EACH_CHILD (die
, c
, add_child_die (clone
, clone_tree (c
)));
8050 /* Make a clone of DIE as a declaration. */
8053 clone_as_declaration (dw_die_ref die
)
8060 /* If the DIE is already a declaration, just clone it. */
8061 if (is_declaration_die (die
))
8062 return clone_die (die
);
8064 /* If the DIE is a specification, just clone its declaration DIE. */
8065 decl
= get_AT_ref (die
, DW_AT_specification
);
8068 clone
= clone_die (decl
);
8069 if (die
->comdat_type_p
)
8070 add_AT_die_ref (clone
, DW_AT_signature
, die
);
8074 clone
= new_die_raw (die
->die_tag
);
8076 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
8078 /* We don't want to copy over all attributes.
8079 For example we don't want DW_AT_byte_size because otherwise we will no
8080 longer have a declaration and GDB will treat it as a definition. */
8084 case DW_AT_abstract_origin
:
8085 case DW_AT_artificial
:
8086 case DW_AT_containing_type
:
8087 case DW_AT_external
:
8090 case DW_AT_virtuality
:
8091 case DW_AT_linkage_name
:
8092 case DW_AT_MIPS_linkage_name
:
8093 add_dwarf_attr (clone
, a
);
8095 case DW_AT_byte_size
:
8096 case DW_AT_alignment
:
8102 if (die
->comdat_type_p
)
8103 add_AT_die_ref (clone
, DW_AT_signature
, die
);
8105 add_AT_flag (clone
, DW_AT_declaration
, 1);
8110 /* Structure to map a DIE in one CU to its copy in a comdat type unit. */
8112 struct decl_table_entry
8118 /* Helpers to manipulate hash table of copied declarations. */
8120 /* Hashtable helpers. */
8122 struct decl_table_entry_hasher
: free_ptr_hash
<decl_table_entry
>
8124 typedef die_struct
*compare_type
;
8125 static inline hashval_t
hash (const decl_table_entry
*);
8126 static inline bool equal (const decl_table_entry
*, const die_struct
*);
8130 decl_table_entry_hasher::hash (const decl_table_entry
*entry
)
8132 return htab_hash_pointer (entry
->orig
);
8136 decl_table_entry_hasher::equal (const decl_table_entry
*entry1
,
8137 const die_struct
*entry2
)
8139 return entry1
->orig
== entry2
;
8142 typedef hash_table
<decl_table_entry_hasher
> decl_hash_type
;
8144 /* Copy DIE and its ancestors, up to, but not including, the compile unit
8145 or type unit entry, to a new tree. Adds the new tree to UNIT and returns
8146 a pointer to the copy of DIE. If DECL_TABLE is provided, it is used
8147 to check if the ancestor has already been copied into UNIT. */
8150 copy_ancestor_tree (dw_die_ref unit
, dw_die_ref die
,
8151 decl_hash_type
*decl_table
)
8153 dw_die_ref parent
= die
->die_parent
;
8154 dw_die_ref new_parent
= unit
;
8156 decl_table_entry
**slot
= NULL
;
8157 struct decl_table_entry
*entry
= NULL
;
8161 /* Check if the entry has already been copied to UNIT. */
8162 slot
= decl_table
->find_slot_with_hash (die
, htab_hash_pointer (die
),
8164 if (*slot
!= HTAB_EMPTY_ENTRY
)
8170 /* Record in DECL_TABLE that DIE has been copied to UNIT. */
8171 entry
= XCNEW (struct decl_table_entry
);
8179 dw_die_ref spec
= get_AT_ref (parent
, DW_AT_specification
);
8182 if (!is_unit_die (parent
))
8183 new_parent
= copy_ancestor_tree (unit
, parent
, decl_table
);
8186 copy
= clone_as_declaration (die
);
8187 add_child_die (new_parent
, copy
);
8191 /* Record the pointer to the copy. */
8197 /* Copy the declaration context to the new type unit DIE. This includes
8198 any surrounding namespace or type declarations. If the DIE has an
8199 AT_specification attribute, it also includes attributes and children
8200 attached to the specification, and returns a pointer to the original
8201 parent of the declaration DIE. Returns NULL otherwise. */
8204 copy_declaration_context (dw_die_ref unit
, dw_die_ref die
)
8207 dw_die_ref new_decl
;
8208 dw_die_ref orig_parent
= NULL
;
8210 decl
= get_AT_ref (die
, DW_AT_specification
);
8219 /* The original DIE will be changed to a declaration, and must
8220 be moved to be a child of the original declaration DIE. */
8221 orig_parent
= decl
->die_parent
;
8223 /* Copy the type node pointer from the new DIE to the original
8224 declaration DIE so we can forward references later. */
8225 decl
->comdat_type_p
= true;
8226 decl
->die_id
.die_type_node
= die
->die_id
.die_type_node
;
8228 remove_AT (die
, DW_AT_specification
);
8230 FOR_EACH_VEC_SAFE_ELT (decl
->die_attr
, ix
, a
)
8232 if (a
->dw_attr
!= DW_AT_name
8233 && a
->dw_attr
!= DW_AT_declaration
8234 && a
->dw_attr
!= DW_AT_external
)
8235 add_dwarf_attr (die
, a
);
8238 FOR_EACH_CHILD (decl
, c
, add_child_die (die
, clone_tree (c
)));
8241 if (decl
->die_parent
!= NULL
8242 && !is_unit_die (decl
->die_parent
))
8244 new_decl
= copy_ancestor_tree (unit
, decl
, NULL
);
8245 if (new_decl
!= NULL
)
8247 remove_AT (new_decl
, DW_AT_signature
);
8248 add_AT_specification (die
, new_decl
);
8255 /* Generate the skeleton ancestor tree for the given NODE, then clone
8256 the DIE and add the clone into the tree. */
8259 generate_skeleton_ancestor_tree (skeleton_chain_node
*node
)
8261 if (node
->new_die
!= NULL
)
8264 node
->new_die
= clone_as_declaration (node
->old_die
);
8266 if (node
->parent
!= NULL
)
8268 generate_skeleton_ancestor_tree (node
->parent
);
8269 add_child_die (node
->parent
->new_die
, node
->new_die
);
8273 /* Generate a skeleton tree of DIEs containing any declarations that are
8274 found in the original tree. We traverse the tree looking for declaration
8275 DIEs, and construct the skeleton from the bottom up whenever we find one. */
8278 generate_skeleton_bottom_up (skeleton_chain_node
*parent
)
8280 skeleton_chain_node node
;
8283 dw_die_ref prev
= NULL
;
8284 dw_die_ref next
= NULL
;
8286 node
.parent
= parent
;
8288 first
= c
= parent
->old_die
->die_child
;
8292 if (prev
== NULL
|| prev
->die_sib
== c
)
8295 next
= (c
== first
? NULL
: c
->die_sib
);
8297 node
.new_die
= NULL
;
8298 if (is_declaration_die (c
))
8300 if (is_template_instantiation (c
))
8302 /* Instantiated templates do not need to be cloned into the
8303 type unit. Just move the DIE and its children back to
8304 the skeleton tree (in the main CU). */
8305 remove_child_with_prev (c
, prev
);
8306 add_child_die (parent
->new_die
, c
);
8309 else if (c
->comdat_type_p
)
8311 /* This is the skeleton of earlier break_out_comdat_types
8312 type. Clone the existing DIE, but keep the children
8313 under the original (which is in the main CU). */
8314 dw_die_ref clone
= clone_die (c
);
8316 replace_child (c
, clone
, prev
);
8317 generate_skeleton_ancestor_tree (parent
);
8318 add_child_die (parent
->new_die
, c
);
8324 /* Clone the existing DIE, move the original to the skeleton
8325 tree (which is in the main CU), and put the clone, with
8326 all the original's children, where the original came from
8327 (which is about to be moved to the type unit). */
8328 dw_die_ref clone
= clone_die (c
);
8329 move_all_children (c
, clone
);
8331 /* If the original has a DW_AT_object_pointer attribute,
8332 it would now point to a child DIE just moved to the
8333 cloned tree, so we need to remove that attribute from
8335 remove_AT (c
, DW_AT_object_pointer
);
8337 replace_child (c
, clone
, prev
);
8338 generate_skeleton_ancestor_tree (parent
);
8339 add_child_die (parent
->new_die
, c
);
8340 node
.old_die
= clone
;
8345 generate_skeleton_bottom_up (&node
);
8346 } while (next
!= NULL
);
8349 /* Wrapper function for generate_skeleton_bottom_up. */
8352 generate_skeleton (dw_die_ref die
)
8354 skeleton_chain_node node
;
8357 node
.new_die
= NULL
;
8360 /* If this type definition is nested inside another type,
8361 and is not an instantiation of a template, always leave
8362 at least a declaration in its place. */
8363 if (die
->die_parent
!= NULL
8364 && is_type_die (die
->die_parent
)
8365 && !is_template_instantiation (die
))
8366 node
.new_die
= clone_as_declaration (die
);
8368 generate_skeleton_bottom_up (&node
);
8369 return node
.new_die
;
8372 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned
8373 declaration. The original DIE is moved to a new compile unit so that
8374 existing references to it follow it to the new location. If any of the
8375 original DIE's descendants is a declaration, we need to replace the
8376 original DIE with a skeleton tree and move the declarations back into the
8380 remove_child_or_replace_with_skeleton (dw_die_ref unit
, dw_die_ref child
,
8383 dw_die_ref skeleton
, orig_parent
;
8385 /* Copy the declaration context to the type unit DIE. If the returned
8386 ORIG_PARENT is not NULL, the skeleton needs to be added as a child of
8388 orig_parent
= copy_declaration_context (unit
, child
);
8390 skeleton
= generate_skeleton (child
);
8391 if (skeleton
== NULL
)
8392 remove_child_with_prev (child
, prev
);
8395 skeleton
->comdat_type_p
= true;
8396 skeleton
->die_id
.die_type_node
= child
->die_id
.die_type_node
;
8398 /* If the original DIE was a specification, we need to put
8399 the skeleton under the parent DIE of the declaration.
8400 This leaves the original declaration in the tree, but
8401 it will be pruned later since there are no longer any
8402 references to it. */
8403 if (orig_parent
!= NULL
)
8405 remove_child_with_prev (child
, prev
);
8406 add_child_die (orig_parent
, skeleton
);
8409 replace_child (child
, skeleton
, prev
);
8416 copy_dwarf_procs_ref_in_attrs (dw_die_ref die
,
8417 comdat_type_node
*type_node
,
8418 hash_map
<dw_die_ref
, dw_die_ref
> &copied_dwarf_procs
);
8420 /* Helper for copy_dwarf_procs_ref_in_dies. Make a copy of the DIE DWARF
8421 procedure, put it under TYPE_NODE and return the copy. Continue looking for
8422 DWARF procedure references in the DW_AT_location attribute. */
8425 copy_dwarf_procedure (dw_die_ref die
,
8426 comdat_type_node
*type_node
,
8427 hash_map
<dw_die_ref
, dw_die_ref
> &copied_dwarf_procs
)
8429 gcc_assert (die
->die_tag
== DW_TAG_dwarf_procedure
);
8431 /* DWARF procedures are not supposed to have children... */
8432 gcc_assert (die
->die_child
== NULL
);
8434 /* ... and they are supposed to have only one attribute: DW_AT_location. */
8435 gcc_assert (vec_safe_length (die
->die_attr
) == 1
8436 && ((*die
->die_attr
)[0].dw_attr
== DW_AT_location
));
8438 /* Do not copy more than once DWARF procedures. */
8440 dw_die_ref
&die_copy
= copied_dwarf_procs
.get_or_insert (die
, &existed
);
8444 die_copy
= clone_die (die
);
8445 add_child_die (type_node
->root_die
, die_copy
);
8446 copy_dwarf_procs_ref_in_attrs (die_copy
, type_node
, copied_dwarf_procs
);
8450 /* Helper for copy_dwarf_procs_ref_in_dies. Look for references to DWARF
8451 procedures in DIE's attributes. */
8454 copy_dwarf_procs_ref_in_attrs (dw_die_ref die
,
8455 comdat_type_node
*type_node
,
8456 hash_map
<dw_die_ref
, dw_die_ref
> &copied_dwarf_procs
)
8461 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, i
, a
)
8463 dw_loc_descr_ref loc
;
8465 if (a
->dw_attr_val
.val_class
!= dw_val_class_loc
)
8468 for (loc
= a
->dw_attr_val
.v
.val_loc
; loc
!= NULL
; loc
= loc
->dw_loc_next
)
8470 switch (loc
->dw_loc_opc
)
8474 case DW_OP_call_ref
:
8475 gcc_assert (loc
->dw_loc_oprnd1
.val_class
8476 == dw_val_class_die_ref
);
8477 loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
8478 = copy_dwarf_procedure (loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
,
8480 copied_dwarf_procs
);
8489 /* Copy DWARF procedures that are referenced by the DIE tree to TREE_NODE and
8490 rewrite references to point to the copies.
8492 References are looked for in DIE's attributes and recursively in all its
8493 children attributes that are location descriptions. COPIED_DWARF_PROCS is a
8494 mapping from old DWARF procedures to their copy. It is used not to copy
8495 twice the same DWARF procedure under TYPE_NODE. */
8498 copy_dwarf_procs_ref_in_dies (dw_die_ref die
,
8499 comdat_type_node
*type_node
,
8500 hash_map
<dw_die_ref
, dw_die_ref
> &copied_dwarf_procs
)
8504 copy_dwarf_procs_ref_in_attrs (die
, type_node
, copied_dwarf_procs
);
8505 FOR_EACH_CHILD (die
, c
, copy_dwarf_procs_ref_in_dies (c
,
8507 copied_dwarf_procs
));
8510 /* Traverse the DIE and set up additional .debug_types or .debug_info
8511 DW_UT_*type sections for each type worthy of being placed in a COMDAT
8515 break_out_comdat_types (dw_die_ref die
)
8519 dw_die_ref prev
= NULL
;
8520 dw_die_ref next
= NULL
;
8521 dw_die_ref unit
= NULL
;
8523 first
= c
= die
->die_child
;
8527 if (prev
== NULL
|| prev
->die_sib
== c
)
8530 next
= (c
== first
? NULL
: c
->die_sib
);
8531 if (should_move_die_to_comdat (c
))
8533 dw_die_ref replacement
;
8534 comdat_type_node
*type_node
;
8536 /* Break out nested types into their own type units. */
8537 break_out_comdat_types (c
);
8539 /* Create a new type unit DIE as the root for the new tree, and
8540 add it to the list of comdat types. */
8541 unit
= new_die (DW_TAG_type_unit
, NULL
, NULL
);
8542 add_AT_unsigned (unit
, DW_AT_language
,
8543 get_AT_unsigned (comp_unit_die (), DW_AT_language
));
8544 type_node
= ggc_cleared_alloc
<comdat_type_node
> ();
8545 type_node
->root_die
= unit
;
8546 type_node
->next
= comdat_type_list
;
8547 comdat_type_list
= type_node
;
8549 /* Generate the type signature. */
8550 generate_type_signature (c
, type_node
);
8552 /* Copy the declaration context, attributes, and children of the
8553 declaration into the new type unit DIE, then remove this DIE
8554 from the main CU (or replace it with a skeleton if necessary). */
8555 replacement
= remove_child_or_replace_with_skeleton (unit
, c
, prev
);
8556 type_node
->skeleton_die
= replacement
;
8558 /* Add the DIE to the new compunit. */
8559 add_child_die (unit
, c
);
8561 /* Types can reference DWARF procedures for type size or data location
8562 expressions. Calls in DWARF expressions cannot target procedures
8563 that are not in the same section. So we must copy DWARF procedures
8564 along with this type and then rewrite references to them. */
8565 hash_map
<dw_die_ref
, dw_die_ref
> copied_dwarf_procs
;
8566 copy_dwarf_procs_ref_in_dies (c
, type_node
, copied_dwarf_procs
);
8568 if (replacement
!= NULL
)
8571 else if (c
->die_tag
== DW_TAG_namespace
8572 || c
->die_tag
== DW_TAG_class_type
8573 || c
->die_tag
== DW_TAG_structure_type
8574 || c
->die_tag
== DW_TAG_union_type
)
8576 /* Look for nested types that can be broken out. */
8577 break_out_comdat_types (c
);
8579 } while (next
!= NULL
);
8582 /* Like clone_tree, but copy DW_TAG_subprogram DIEs as declarations.
8583 Enter all the cloned children into the hash table decl_table. */
8586 clone_tree_partial (dw_die_ref die
, decl_hash_type
*decl_table
)
8590 struct decl_table_entry
*entry
;
8591 decl_table_entry
**slot
;
8593 if (die
->die_tag
== DW_TAG_subprogram
)
8594 clone
= clone_as_declaration (die
);
8596 clone
= clone_die (die
);
8598 slot
= decl_table
->find_slot_with_hash (die
,
8599 htab_hash_pointer (die
), INSERT
);
8601 /* Assert that DIE isn't in the hash table yet. If it would be there
8602 before, the ancestors would be necessarily there as well, therefore
8603 clone_tree_partial wouldn't be called. */
8604 gcc_assert (*slot
== HTAB_EMPTY_ENTRY
);
8606 entry
= XCNEW (struct decl_table_entry
);
8608 entry
->copy
= clone
;
8611 if (die
->die_tag
!= DW_TAG_subprogram
)
8612 FOR_EACH_CHILD (die
, c
,
8613 add_child_die (clone
, clone_tree_partial (c
, decl_table
)));
8618 /* Walk the DIE and its children, looking for references to incomplete
8619 or trivial types that are unmarked (i.e., that are not in the current
8623 copy_decls_walk (dw_die_ref unit
, dw_die_ref die
, decl_hash_type
*decl_table
)
8629 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
8631 if (AT_class (a
) == dw_val_class_die_ref
)
8633 dw_die_ref targ
= AT_ref (a
);
8634 decl_table_entry
**slot
;
8635 struct decl_table_entry
*entry
;
8637 if (targ
->die_mark
!= 0 || targ
->comdat_type_p
)
8640 slot
= decl_table
->find_slot_with_hash (targ
,
8641 htab_hash_pointer (targ
),
8644 if (*slot
!= HTAB_EMPTY_ENTRY
)
8646 /* TARG has already been copied, so we just need to
8647 modify the reference to point to the copy. */
8649 a
->dw_attr_val
.v
.val_die_ref
.die
= entry
->copy
;
8653 dw_die_ref parent
= unit
;
8654 dw_die_ref copy
= clone_die (targ
);
8656 /* Record in DECL_TABLE that TARG has been copied.
8657 Need to do this now, before the recursive call,
8658 because DECL_TABLE may be expanded and SLOT
8659 would no longer be a valid pointer. */
8660 entry
= XCNEW (struct decl_table_entry
);
8665 /* If TARG is not a declaration DIE, we need to copy its
8667 if (!is_declaration_die (targ
))
8671 add_child_die (copy
,
8672 clone_tree_partial (c
, decl_table
)));
8675 /* Make sure the cloned tree is marked as part of the
8679 /* If TARG has surrounding context, copy its ancestor tree
8680 into the new type unit. */
8681 if (targ
->die_parent
!= NULL
8682 && !is_unit_die (targ
->die_parent
))
8683 parent
= copy_ancestor_tree (unit
, targ
->die_parent
,
8686 add_child_die (parent
, copy
);
8687 a
->dw_attr_val
.v
.val_die_ref
.die
= copy
;
8689 /* Make sure the newly-copied DIE is walked. If it was
8690 installed in a previously-added context, it won't
8691 get visited otherwise. */
8694 /* Find the highest point of the newly-added tree,
8695 mark each node along the way, and walk from there. */
8696 parent
->die_mark
= 1;
8697 while (parent
->die_parent
8698 && parent
->die_parent
->die_mark
== 0)
8700 parent
= parent
->die_parent
;
8701 parent
->die_mark
= 1;
8703 copy_decls_walk (unit
, parent
, decl_table
);
8709 FOR_EACH_CHILD (die
, c
, copy_decls_walk (unit
, c
, decl_table
));
8712 /* Copy declarations for "unworthy" types into the new comdat section.
8713 Incomplete types, modified types, and certain other types aren't broken
8714 out into comdat sections of their own, so they don't have a signature,
8715 and we need to copy the declaration into the same section so that we
8716 don't have an external reference. */
8719 copy_decls_for_unworthy_types (dw_die_ref unit
)
8722 decl_hash_type
decl_table (10);
8723 copy_decls_walk (unit
, unit
, &decl_table
);
8727 /* Traverse the DIE and add a sibling attribute if it may have the
8728 effect of speeding up access to siblings. To save some space,
8729 avoid generating sibling attributes for DIE's without children. */
8732 add_sibling_attributes (dw_die_ref die
)
8736 if (! die
->die_child
)
8739 if (die
->die_parent
&& die
!= die
->die_parent
->die_child
)
8740 add_AT_die_ref (die
, DW_AT_sibling
, die
->die_sib
);
8742 FOR_EACH_CHILD (die
, c
, add_sibling_attributes (c
));
8745 /* Output all location lists for the DIE and its children. */
8748 output_location_lists (dw_die_ref die
)
8754 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
8755 if (AT_class (a
) == dw_val_class_loc_list
)
8756 output_loc_list (AT_loc_list (a
));
8758 FOR_EACH_CHILD (die
, c
, output_location_lists (c
));
8761 /* During assign_location_list_indexes and output_loclists_offset the
8762 current index, after it the number of assigned indexes (i.e. how
8763 large the .debug_loclists* offset table should be). */
8764 static unsigned int loc_list_idx
;
8766 /* Output all location list offsets for the DIE and its children. */
8769 output_loclists_offsets (dw_die_ref die
)
8775 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
8776 if (AT_class (a
) == dw_val_class_loc_list
)
8778 dw_loc_list_ref l
= AT_loc_list (a
);
8779 if (l
->offset_emitted
)
8781 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, l
->ll_symbol
,
8782 loc_section_label
, NULL
);
8783 gcc_assert (l
->hash
== loc_list_idx
);
8785 l
->offset_emitted
= true;
8788 FOR_EACH_CHILD (die
, c
, output_loclists_offsets (c
));
8791 /* Recursively set indexes of location lists. */
8794 assign_location_list_indexes (dw_die_ref die
)
8800 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
8801 if (AT_class (a
) == dw_val_class_loc_list
)
8803 dw_loc_list_ref list
= AT_loc_list (a
);
8804 if (!list
->num_assigned
)
8806 list
->num_assigned
= true;
8807 list
->hash
= loc_list_idx
++;
8811 FOR_EACH_CHILD (die
, c
, assign_location_list_indexes (c
));
8814 /* We want to limit the number of external references, because they are
8815 larger than local references: a relocation takes multiple words, and
8816 even a sig8 reference is always eight bytes, whereas a local reference
8817 can be as small as one byte (though DW_FORM_ref is usually 4 in GCC).
8818 So if we encounter multiple external references to the same type DIE, we
8819 make a local typedef stub for it and redirect all references there.
8821 This is the element of the hash table for keeping track of these
8831 /* Hashtable helpers. */
8833 struct external_ref_hasher
: free_ptr_hash
<external_ref
>
8835 static inline hashval_t
hash (const external_ref
*);
8836 static inline bool equal (const external_ref
*, const external_ref
*);
8840 external_ref_hasher::hash (const external_ref
*r
)
8842 dw_die_ref die
= r
->type
;
8845 /* We can't use the address of the DIE for hashing, because
8846 that will make the order of the stub DIEs non-deterministic. */
8847 if (! die
->comdat_type_p
)
8848 /* We have a symbol; use it to compute a hash. */
8849 h
= htab_hash_string (die
->die_id
.die_symbol
);
8852 /* We have a type signature; use a subset of the bits as the hash.
8853 The 8-byte signature is at least as large as hashval_t. */
8854 comdat_type_node
*type_node
= die
->die_id
.die_type_node
;
8855 memcpy (&h
, type_node
->signature
, sizeof (h
));
8861 external_ref_hasher::equal (const external_ref
*r1
, const external_ref
*r2
)
8863 return r1
->type
== r2
->type
;
8866 typedef hash_table
<external_ref_hasher
> external_ref_hash_type
;
8868 /* Return a pointer to the external_ref for references to DIE. */
8870 static struct external_ref
*
8871 lookup_external_ref (external_ref_hash_type
*map
, dw_die_ref die
)
8873 struct external_ref ref
, *ref_p
;
8874 external_ref
**slot
;
8877 slot
= map
->find_slot (&ref
, INSERT
);
8878 if (*slot
!= HTAB_EMPTY_ENTRY
)
8881 ref_p
= XCNEW (struct external_ref
);
8887 /* Subroutine of optimize_external_refs, below.
8889 If we see a type skeleton, record it as our stub. If we see external
8890 references, remember how many we've seen. */
8893 optimize_external_refs_1 (dw_die_ref die
, external_ref_hash_type
*map
)
8898 struct external_ref
*ref_p
;
8900 if (is_type_die (die
)
8901 && (c
= get_AT_ref (die
, DW_AT_signature
)))
8903 /* This is a local skeleton; use it for local references. */
8904 ref_p
= lookup_external_ref (map
, c
);
8908 /* Scan the DIE references, and remember any that refer to DIEs from
8909 other CUs (i.e. those which are not marked). */
8910 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
8911 if (AT_class (a
) == dw_val_class_die_ref
8912 && (c
= AT_ref (a
))->die_mark
== 0
8915 ref_p
= lookup_external_ref (map
, c
);
8919 FOR_EACH_CHILD (die
, c
, optimize_external_refs_1 (c
, map
));
8922 /* htab_traverse callback function for optimize_external_refs, below. SLOT
8923 points to an external_ref, DATA is the CU we're processing. If we don't
8924 already have a local stub, and we have multiple refs, build a stub. */
8927 dwarf2_build_local_stub (external_ref
**slot
, dw_die_ref data
)
8929 struct external_ref
*ref_p
= *slot
;
8931 if (ref_p
->stub
== NULL
&& ref_p
->n_refs
> 1 && !dwarf_strict
)
8933 /* We have multiple references to this type, so build a small stub.
8934 Both of these forms are a bit dodgy from the perspective of the
8935 DWARF standard, since technically they should have names. */
8936 dw_die_ref cu
= data
;
8937 dw_die_ref type
= ref_p
->type
;
8938 dw_die_ref stub
= NULL
;
8940 if (type
->comdat_type_p
)
8942 /* If we refer to this type via sig8, use AT_signature. */
8943 stub
= new_die (type
->die_tag
, cu
, NULL_TREE
);
8944 add_AT_die_ref (stub
, DW_AT_signature
, type
);
8948 /* Otherwise, use a typedef with no name. */
8949 stub
= new_die (DW_TAG_typedef
, cu
, NULL_TREE
);
8950 add_AT_die_ref (stub
, DW_AT_type
, type
);
8959 /* DIE is a unit; look through all the DIE references to see if there are
8960 any external references to types, and if so, create local stubs for
8961 them which will be applied in build_abbrev_table. This is useful because
8962 references to local DIEs are smaller. */
8964 static external_ref_hash_type
*
8965 optimize_external_refs (dw_die_ref die
)
8967 external_ref_hash_type
*map
= new external_ref_hash_type (10);
8968 optimize_external_refs_1 (die
, map
);
8969 map
->traverse
<dw_die_ref
, dwarf2_build_local_stub
> (die
);
8973 /* The following 3 variables are temporaries that are computed only during the
8974 build_abbrev_table call and used and released during the following
8975 optimize_abbrev_table call. */
8977 /* First abbrev_id that can be optimized based on usage. */
8978 static unsigned int abbrev_opt_start
;
8980 /* Maximum abbrev_id of a base type plus one (we can't optimize DIEs with
8981 abbrev_id smaller than this, because they must be already sized
8982 during build_abbrev_table). */
8983 static unsigned int abbrev_opt_base_type_end
;
8985 /* Vector of usage counts during build_abbrev_table. Indexed by
8986 abbrev_id - abbrev_opt_start. */
8987 static vec
<unsigned int> abbrev_usage_count
;
8989 /* Vector of all DIEs added with die_abbrev >= abbrev_opt_start. */
8990 static vec
<dw_die_ref
> sorted_abbrev_dies
;
8992 /* The format of each DIE (and its attribute value pairs) is encoded in an
8993 abbreviation table. This routine builds the abbreviation table and assigns
8994 a unique abbreviation id for each abbreviation entry. The children of each
8995 die are visited recursively. */
8998 build_abbrev_table (dw_die_ref die
, external_ref_hash_type
*extern_map
)
9000 unsigned int abbrev_id
= 0;
9006 /* Scan the DIE references, and replace any that refer to
9007 DIEs from other CUs (i.e. those which are not marked) with
9008 the local stubs we built in optimize_external_refs. */
9009 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
9010 if (AT_class (a
) == dw_val_class_die_ref
9011 && (c
= AT_ref (a
))->die_mark
== 0)
9013 struct external_ref
*ref_p
;
9014 gcc_assert (AT_ref (a
)->comdat_type_p
|| AT_ref (a
)->die_id
.die_symbol
);
9016 ref_p
= lookup_external_ref (extern_map
, c
);
9017 if (ref_p
->stub
&& ref_p
->stub
!= die
)
9018 change_AT_die_ref (a
, ref_p
->stub
);
9020 /* We aren't changing this reference, so mark it external. */
9021 set_AT_ref_external (a
, 1);
9024 FOR_EACH_VEC_SAFE_ELT (abbrev_die_table
, abbrev_id
, abbrev
)
9026 dw_attr_node
*die_a
, *abbrev_a
;
9032 if (abbrev
->die_tag
!= die
->die_tag
)
9034 if ((abbrev
->die_child
!= NULL
) != (die
->die_child
!= NULL
))
9037 if (vec_safe_length (abbrev
->die_attr
) != vec_safe_length (die
->die_attr
))
9040 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, die_a
)
9042 abbrev_a
= &(*abbrev
->die_attr
)[ix
];
9043 if ((abbrev_a
->dw_attr
!= die_a
->dw_attr
)
9044 || (value_format (abbrev_a
) != value_format (die_a
)))
9054 if (abbrev_id
>= vec_safe_length (abbrev_die_table
))
9056 vec_safe_push (abbrev_die_table
, die
);
9057 if (abbrev_opt_start
)
9058 abbrev_usage_count
.safe_push (0);
9060 if (abbrev_opt_start
&& abbrev_id
>= abbrev_opt_start
)
9062 abbrev_usage_count
[abbrev_id
- abbrev_opt_start
]++;
9063 sorted_abbrev_dies
.safe_push (die
);
9066 die
->die_abbrev
= abbrev_id
;
9067 FOR_EACH_CHILD (die
, c
, build_abbrev_table (c
, extern_map
));
9070 /* Callback function for sorted_abbrev_dies vector sorting. We sort
9071 by die_abbrev's usage count, from the most commonly used
9072 abbreviation to the least. */
9075 die_abbrev_cmp (const void *p1
, const void *p2
)
9077 dw_die_ref die1
= *(const dw_die_ref
*) p1
;
9078 dw_die_ref die2
= *(const dw_die_ref
*) p2
;
9080 gcc_checking_assert (die1
->die_abbrev
>= abbrev_opt_start
);
9081 gcc_checking_assert (die2
->die_abbrev
>= abbrev_opt_start
);
9083 if (die1
->die_abbrev
>= abbrev_opt_base_type_end
9084 && die2
->die_abbrev
>= abbrev_opt_base_type_end
)
9086 if (abbrev_usage_count
[die1
->die_abbrev
- abbrev_opt_start
]
9087 > abbrev_usage_count
[die2
->die_abbrev
- abbrev_opt_start
])
9089 if (abbrev_usage_count
[die1
->die_abbrev
- abbrev_opt_start
]
9090 < abbrev_usage_count
[die2
->die_abbrev
- abbrev_opt_start
])
9094 /* Stabilize the sort. */
9095 if (die1
->die_abbrev
< die2
->die_abbrev
)
9097 if (die1
->die_abbrev
> die2
->die_abbrev
)
9103 /* Convert dw_val_class_const and dw_val_class_unsigned_const class attributes
9104 of DIEs in between sorted_abbrev_dies[first_id] and abbrev_dies[end_id - 1]
9105 into dw_val_class_const_implicit or
9106 dw_val_class_unsigned_const_implicit. */
9109 optimize_implicit_const (unsigned int first_id
, unsigned int end
,
9110 vec
<bool> &implicit_consts
)
9112 /* It never makes sense if there is just one DIE using the abbreviation. */
9113 if (end
< first_id
+ 2)
9118 dw_die_ref die
= sorted_abbrev_dies
[first_id
];
9119 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
9120 if (implicit_consts
[ix
])
9122 enum dw_val_class new_class
= dw_val_class_none
;
9123 switch (AT_class (a
))
9125 case dw_val_class_unsigned_const
:
9126 if ((HOST_WIDE_INT
) AT_unsigned (a
) < 0)
9129 /* The .debug_abbrev section will grow by
9130 size_of_sleb128 (AT_unsigned (a)) and we avoid the constants
9131 in all the DIEs using that abbreviation. */
9132 if (constant_size (AT_unsigned (a
)) * (end
- first_id
)
9133 <= (unsigned) size_of_sleb128 (AT_unsigned (a
)))
9136 new_class
= dw_val_class_unsigned_const_implicit
;
9139 case dw_val_class_const
:
9140 new_class
= dw_val_class_const_implicit
;
9143 case dw_val_class_file
:
9144 new_class
= dw_val_class_file_implicit
;
9150 for (i
= first_id
; i
< end
; i
++)
9151 (*sorted_abbrev_dies
[i
]->die_attr
)[ix
].dw_attr_val
.val_class
9156 /* Attempt to optimize abbreviation table from abbrev_opt_start
9157 abbreviation above. */
9160 optimize_abbrev_table (void)
9162 if (abbrev_opt_start
9163 && vec_safe_length (abbrev_die_table
) > abbrev_opt_start
9164 && (dwarf_version
>= 5 || vec_safe_length (abbrev_die_table
) > 127))
9166 auto_vec
<bool, 32> implicit_consts
;
9167 sorted_abbrev_dies
.qsort (die_abbrev_cmp
);
9169 unsigned int abbrev_id
= abbrev_opt_start
- 1;
9170 unsigned int first_id
= ~0U;
9171 unsigned int last_abbrev_id
= 0;
9174 if (abbrev_opt_base_type_end
> abbrev_opt_start
)
9175 abbrev_id
= abbrev_opt_base_type_end
- 1;
9176 /* Reassign abbreviation ids from abbrev_opt_start above, so that
9177 most commonly used abbreviations come first. */
9178 FOR_EACH_VEC_ELT (sorted_abbrev_dies
, i
, die
)
9183 /* If calc_base_type_die_sizes has been called, the CU and
9184 base types after it can't be optimized, because we've already
9185 calculated their DIE offsets. We've sorted them first. */
9186 if (die
->die_abbrev
< abbrev_opt_base_type_end
)
9188 if (die
->die_abbrev
!= last_abbrev_id
)
9190 last_abbrev_id
= die
->die_abbrev
;
9191 if (dwarf_version
>= 5 && first_id
!= ~0U)
9192 optimize_implicit_const (first_id
, i
, implicit_consts
);
9194 (*abbrev_die_table
)[abbrev_id
] = die
;
9195 if (dwarf_version
>= 5)
9198 implicit_consts
.truncate (0);
9200 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
9201 switch (AT_class (a
))
9203 case dw_val_class_const
:
9204 case dw_val_class_unsigned_const
:
9205 case dw_val_class_file
:
9206 implicit_consts
.safe_push (true);
9209 implicit_consts
.safe_push (false);
9214 else if (dwarf_version
>= 5)
9216 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
9217 if (!implicit_consts
[ix
])
9221 dw_attr_node
*other_a
9222 = &(*(*abbrev_die_table
)[abbrev_id
]->die_attr
)[ix
];
9223 if (!dw_val_equal_p (&a
->dw_attr_val
,
9224 &other_a
->dw_attr_val
))
9225 implicit_consts
[ix
] = false;
9228 die
->die_abbrev
= abbrev_id
;
9230 gcc_assert (abbrev_id
== vec_safe_length (abbrev_die_table
) - 1);
9231 if (dwarf_version
>= 5 && first_id
!= ~0U)
9232 optimize_implicit_const (first_id
, i
, implicit_consts
);
9235 abbrev_opt_start
= 0;
9236 abbrev_opt_base_type_end
= 0;
9237 abbrev_usage_count
.release ();
9238 sorted_abbrev_dies
.release ();
9241 /* Return the power-of-two number of bytes necessary to represent VALUE. */
9244 constant_size (unsigned HOST_WIDE_INT value
)
9251 log
= floor_log2 (value
);
9254 log
= 1 << (floor_log2 (log
) + 1);
9259 /* Return the size of a DIE as it is represented in the
9260 .debug_info section. */
9262 static unsigned long
9263 size_of_die (dw_die_ref die
)
9265 unsigned long size
= 0;
9268 enum dwarf_form form
;
9270 size
+= size_of_uleb128 (die
->die_abbrev
);
9271 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
9273 switch (AT_class (a
))
9275 case dw_val_class_addr
:
9276 if (dwarf_split_debug_info
&& AT_index (a
) != NOT_INDEXED
)
9278 gcc_assert (AT_index (a
) != NO_INDEX_ASSIGNED
);
9279 size
+= size_of_uleb128 (AT_index (a
));
9282 size
+= DWARF2_ADDR_SIZE
;
9284 case dw_val_class_offset
:
9285 size
+= DWARF_OFFSET_SIZE
;
9287 case dw_val_class_loc
:
9289 unsigned long lsize
= size_of_locs (AT_loc (a
));
9292 if (dwarf_version
>= 4)
9293 size
+= size_of_uleb128 (lsize
);
9295 size
+= constant_size (lsize
);
9299 case dw_val_class_loc_list
:
9300 case dw_val_class_view_list
:
9301 if (dwarf_split_debug_info
&& dwarf_version
>= 5)
9303 gcc_assert (AT_loc_list (a
)->num_assigned
);
9304 size
+= size_of_uleb128 (AT_loc_list (a
)->hash
);
9307 size
+= DWARF_OFFSET_SIZE
;
9309 case dw_val_class_range_list
:
9310 if (value_format (a
) == DW_FORM_rnglistx
)
9312 gcc_assert (rnglist_idx
);
9313 dw_ranges
*r
= &(*ranges_table
)[a
->dw_attr_val
.v
.val_offset
];
9314 size
+= size_of_uleb128 (r
->idx
);
9317 size
+= DWARF_OFFSET_SIZE
;
9319 case dw_val_class_const
:
9320 size
+= size_of_sleb128 (AT_int (a
));
9322 case dw_val_class_unsigned_const
:
9324 int csize
= constant_size (AT_unsigned (a
));
9325 if (dwarf_version
== 3
9326 && a
->dw_attr
== DW_AT_data_member_location
9328 size
+= size_of_uleb128 (AT_unsigned (a
));
9333 case dw_val_class_symview
:
9334 if (symview_upper_bound
<= 0xff)
9336 else if (symview_upper_bound
<= 0xffff)
9338 else if (symview_upper_bound
<= 0xffffffff)
9343 case dw_val_class_const_implicit
:
9344 case dw_val_class_unsigned_const_implicit
:
9345 case dw_val_class_file_implicit
:
9346 /* These occupy no size in the DIE, just an extra sleb128 in
9349 case dw_val_class_const_double
:
9350 size
+= HOST_BITS_PER_DOUBLE_INT
/ HOST_BITS_PER_CHAR
;
9351 if (HOST_BITS_PER_WIDE_INT
>= DWARF_LARGEST_DATA_FORM_BITS
)
9354 case dw_val_class_wide_int
:
9355 size
+= (get_full_len (*a
->dw_attr_val
.v
.val_wide
)
9356 * HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
);
9357 if (get_full_len (*a
->dw_attr_val
.v
.val_wide
)
9358 * HOST_BITS_PER_WIDE_INT
> DWARF_LARGEST_DATA_FORM_BITS
)
9361 case dw_val_class_vec
:
9362 size
+= constant_size (a
->dw_attr_val
.v
.val_vec
.length
9363 * a
->dw_attr_val
.v
.val_vec
.elt_size
)
9364 + a
->dw_attr_val
.v
.val_vec
.length
9365 * a
->dw_attr_val
.v
.val_vec
.elt_size
; /* block */
9367 case dw_val_class_flag
:
9368 if (dwarf_version
>= 4)
9369 /* Currently all add_AT_flag calls pass in 1 as last argument,
9370 so DW_FORM_flag_present can be used. If that ever changes,
9371 we'll need to use DW_FORM_flag and have some optimization
9372 in build_abbrev_table that will change those to
9373 DW_FORM_flag_present if it is set to 1 in all DIEs using
9374 the same abbrev entry. */
9375 gcc_assert (a
->dw_attr_val
.v
.val_flag
== 1);
9379 case dw_val_class_die_ref
:
9380 if (AT_ref_external (a
))
9382 /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
9383 we use DW_FORM_ref_addr. In DWARF2, DW_FORM_ref_addr
9384 is sized by target address length, whereas in DWARF3
9385 it's always sized as an offset. */
9386 if (use_debug_types
)
9387 size
+= DWARF_TYPE_SIGNATURE_SIZE
;
9388 else if (dwarf_version
== 2)
9389 size
+= DWARF2_ADDR_SIZE
;
9391 size
+= DWARF_OFFSET_SIZE
;
9394 size
+= DWARF_OFFSET_SIZE
;
9396 case dw_val_class_fde_ref
:
9397 size
+= DWARF_OFFSET_SIZE
;
9399 case dw_val_class_lbl_id
:
9400 if (dwarf_split_debug_info
&& AT_index (a
) != NOT_INDEXED
)
9402 gcc_assert (AT_index (a
) != NO_INDEX_ASSIGNED
);
9403 size
+= size_of_uleb128 (AT_index (a
));
9406 size
+= DWARF2_ADDR_SIZE
;
9408 case dw_val_class_lineptr
:
9409 case dw_val_class_macptr
:
9410 case dw_val_class_loclistsptr
:
9411 size
+= DWARF_OFFSET_SIZE
;
9413 case dw_val_class_str
:
9414 form
= AT_string_form (a
);
9415 if (form
== DW_FORM_strp
|| form
== DW_FORM_line_strp
)
9416 size
+= DWARF_OFFSET_SIZE
;
9417 else if (form
== dwarf_FORM (DW_FORM_strx
))
9418 size
+= size_of_uleb128 (AT_index (a
));
9420 size
+= strlen (a
->dw_attr_val
.v
.val_str
->str
) + 1;
9422 case dw_val_class_file
:
9423 size
+= constant_size (maybe_emit_file (a
->dw_attr_val
.v
.val_file
));
9425 case dw_val_class_data8
:
9428 case dw_val_class_vms_delta
:
9429 size
+= DWARF_OFFSET_SIZE
;
9431 case dw_val_class_high_pc
:
9432 size
+= DWARF2_ADDR_SIZE
;
9434 case dw_val_class_discr_value
:
9435 size
+= size_of_discr_value (&a
->dw_attr_val
.v
.val_discr_value
);
9437 case dw_val_class_discr_list
:
9439 unsigned block_size
= size_of_discr_list (AT_discr_list (a
));
9441 /* This is a block, so we have the block length and then its
9443 size
+= constant_size (block_size
) + block_size
;
9454 /* Size the debugging information associated with a given DIE. Visits the
9455 DIE's children recursively. Updates the global variable next_die_offset, on
9456 each time through. Uses the current value of next_die_offset to update the
9457 die_offset field in each DIE. */
9460 calc_die_sizes (dw_die_ref die
)
9464 gcc_assert (die
->die_offset
== 0
9465 || (unsigned long int) die
->die_offset
== next_die_offset
);
9466 die
->die_offset
= next_die_offset
;
9467 next_die_offset
+= size_of_die (die
);
9469 FOR_EACH_CHILD (die
, c
, calc_die_sizes (c
));
9471 if (die
->die_child
!= NULL
)
9472 /* Count the null byte used to terminate sibling lists. */
9473 next_die_offset
+= 1;
9476 /* Size just the base type children at the start of the CU.
9477 This is needed because build_abbrev needs to size locs
9478 and sizing of type based stack ops needs to know die_offset
9479 values for the base types. */
9482 calc_base_type_die_sizes (void)
9484 unsigned long die_offset
= (dwarf_split_debug_info
9485 ? DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
9486 : DWARF_COMPILE_UNIT_HEADER_SIZE
);
9488 dw_die_ref base_type
;
9489 #if ENABLE_ASSERT_CHECKING
9490 dw_die_ref prev
= comp_unit_die ()->die_child
;
9493 die_offset
+= size_of_die (comp_unit_die ());
9494 for (i
= 0; base_types
.iterate (i
, &base_type
); i
++)
9496 #if ENABLE_ASSERT_CHECKING
9497 gcc_assert (base_type
->die_offset
== 0
9498 && prev
->die_sib
== base_type
9499 && base_type
->die_child
== NULL
9500 && base_type
->die_abbrev
);
9503 if (abbrev_opt_start
9504 && base_type
->die_abbrev
>= abbrev_opt_base_type_end
)
9505 abbrev_opt_base_type_end
= base_type
->die_abbrev
+ 1;
9506 base_type
->die_offset
= die_offset
;
9507 die_offset
+= size_of_die (base_type
);
9511 /* Set the marks for a die and its children. We do this so
9512 that we know whether or not a reference needs to use FORM_ref_addr; only
9513 DIEs in the same CU will be marked. We used to clear out the offset
9514 and use that as the flag, but ran into ordering problems. */
9517 mark_dies (dw_die_ref die
)
9521 gcc_assert (!die
->die_mark
);
9524 FOR_EACH_CHILD (die
, c
, mark_dies (c
));
9527 /* Clear the marks for a die and its children. */
9530 unmark_dies (dw_die_ref die
)
9534 if (! use_debug_types
)
9535 gcc_assert (die
->die_mark
);
9538 FOR_EACH_CHILD (die
, c
, unmark_dies (c
));
9541 /* Clear the marks for a die, its children and referred dies. */
9544 unmark_all_dies (dw_die_ref die
)
9554 FOR_EACH_CHILD (die
, c
, unmark_all_dies (c
));
9556 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
9557 if (AT_class (a
) == dw_val_class_die_ref
)
9558 unmark_all_dies (AT_ref (a
));
9561 /* Calculate if the entry should appear in the final output file. It may be
9562 from a pruned a type. */
9565 include_pubname_in_output (vec
<pubname_entry
, va_gc
> *table
, pubname_entry
*p
)
9567 /* By limiting gnu pubnames to definitions only, gold can generate a
9568 gdb index without entries for declarations, which don't include
9569 enough information to be useful. */
9570 if (debug_generate_pub_sections
== 2 && is_declaration_die (p
->die
))
9573 if (table
== pubname_table
)
9575 /* Enumerator names are part of the pubname table, but the
9576 parent DW_TAG_enumeration_type die may have been pruned.
9577 Don't output them if that is the case. */
9578 if (p
->die
->die_tag
== DW_TAG_enumerator
&&
9579 (p
->die
->die_parent
== NULL
9580 || !p
->die
->die_parent
->die_perennial_p
))
9583 /* Everything else in the pubname table is included. */
9587 /* The pubtypes table shouldn't include types that have been
9589 return (p
->die
->die_offset
!= 0
9590 || !flag_eliminate_unused_debug_types
);
9593 /* Return the size of the .debug_pubnames or .debug_pubtypes table
9594 generated for the compilation unit. */
9596 static unsigned long
9597 size_of_pubnames (vec
<pubname_entry
, va_gc
> *names
)
9602 int space_for_flags
= (debug_generate_pub_sections
== 2) ? 1 : 0;
9604 size
= DWARF_PUBNAMES_HEADER_SIZE
;
9605 FOR_EACH_VEC_ELT (*names
, i
, p
)
9606 if (include_pubname_in_output (names
, p
))
9607 size
+= strlen (p
->name
) + DWARF_OFFSET_SIZE
+ 1 + space_for_flags
;
9609 size
+= DWARF_OFFSET_SIZE
;
9613 /* Return the size of the information in the .debug_aranges section. */
9615 static unsigned long
9616 size_of_aranges (void)
9620 size
= DWARF_ARANGES_HEADER_SIZE
;
9622 /* Count the address/length pair for this compilation unit. */
9623 if (text_section_used
)
9624 size
+= 2 * DWARF2_ADDR_SIZE
;
9625 if (cold_text_section_used
)
9626 size
+= 2 * DWARF2_ADDR_SIZE
;
9627 if (have_multiple_function_sections
)
9632 FOR_EACH_VEC_ELT (*fde_vec
, fde_idx
, fde
)
9634 if (DECL_IGNORED_P (fde
->decl
))
9636 if (!fde
->in_std_section
)
9637 size
+= 2 * DWARF2_ADDR_SIZE
;
9638 if (fde
->dw_fde_second_begin
&& !fde
->second_in_std_section
)
9639 size
+= 2 * DWARF2_ADDR_SIZE
;
9643 /* Count the two zero words used to terminated the address range table. */
9644 size
+= 2 * DWARF2_ADDR_SIZE
;
9648 /* Select the encoding of an attribute value. */
9650 static enum dwarf_form
9651 value_format (dw_attr_node
*a
)
9653 switch (AT_class (a
))
9655 case dw_val_class_addr
:
9656 /* Only very few attributes allow DW_FORM_addr. */
9661 case DW_AT_entry_pc
:
9662 case DW_AT_trampoline
:
9663 return (AT_index (a
) == NOT_INDEXED
9664 ? DW_FORM_addr
: dwarf_FORM (DW_FORM_addrx
));
9668 switch (DWARF2_ADDR_SIZE
)
9671 return DW_FORM_data1
;
9673 return DW_FORM_data2
;
9675 return DW_FORM_data4
;
9677 return DW_FORM_data8
;
9681 case dw_val_class_loc_list
:
9682 case dw_val_class_view_list
:
9683 if (dwarf_split_debug_info
9684 && dwarf_version
>= 5
9685 && AT_loc_list (a
)->num_assigned
)
9686 return DW_FORM_loclistx
;
9688 case dw_val_class_range_list
:
9689 /* For range lists in DWARF 5, use DW_FORM_rnglistx from .debug_info.dwo
9690 but in .debug_info use DW_FORM_sec_offset, which is shorter if we
9691 care about sizes of .debug* sections in shared libraries and
9692 executables and don't take into account relocations that affect just
9693 relocatable objects - for DW_FORM_rnglistx we'd have to emit offset
9694 table in the .debug_rnglists section. */
9695 if (dwarf_split_debug_info
9696 && dwarf_version
>= 5
9697 && AT_class (a
) == dw_val_class_range_list
9699 && a
->dw_attr_val
.val_entry
!= RELOCATED_OFFSET
)
9700 return DW_FORM_rnglistx
;
9701 if (dwarf_version
>= 4)
9702 return DW_FORM_sec_offset
;
9704 case dw_val_class_vms_delta
:
9705 case dw_val_class_offset
:
9706 switch (DWARF_OFFSET_SIZE
)
9709 return DW_FORM_data4
;
9711 return DW_FORM_data8
;
9715 case dw_val_class_loc
:
9716 if (dwarf_version
>= 4)
9717 return DW_FORM_exprloc
;
9718 switch (constant_size (size_of_locs (AT_loc (a
))))
9721 return DW_FORM_block1
;
9723 return DW_FORM_block2
;
9725 return DW_FORM_block4
;
9729 case dw_val_class_const
:
9730 return DW_FORM_sdata
;
9731 case dw_val_class_unsigned_const
:
9732 switch (constant_size (AT_unsigned (a
)))
9735 return DW_FORM_data1
;
9737 return DW_FORM_data2
;
9739 /* In DWARF3 DW_AT_data_member_location with
9740 DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
9741 constant, so we need to use DW_FORM_udata if we need
9742 a large constant. */
9743 if (dwarf_version
== 3 && a
->dw_attr
== DW_AT_data_member_location
)
9744 return DW_FORM_udata
;
9745 return DW_FORM_data4
;
9747 if (dwarf_version
== 3 && a
->dw_attr
== DW_AT_data_member_location
)
9748 return DW_FORM_udata
;
9749 return DW_FORM_data8
;
9753 case dw_val_class_const_implicit
:
9754 case dw_val_class_unsigned_const_implicit
:
9755 case dw_val_class_file_implicit
:
9756 return DW_FORM_implicit_const
;
9757 case dw_val_class_const_double
:
9758 switch (HOST_BITS_PER_WIDE_INT
)
9761 return DW_FORM_data2
;
9763 return DW_FORM_data4
;
9765 return DW_FORM_data8
;
9767 if (dwarf_version
>= 5)
9768 return DW_FORM_data16
;
9771 return DW_FORM_block1
;
9773 case dw_val_class_wide_int
:
9774 switch (get_full_len (*a
->dw_attr_val
.v
.val_wide
) * HOST_BITS_PER_WIDE_INT
)
9777 return DW_FORM_data1
;
9779 return DW_FORM_data2
;
9781 return DW_FORM_data4
;
9783 return DW_FORM_data8
;
9785 if (dwarf_version
>= 5)
9786 return DW_FORM_data16
;
9789 return DW_FORM_block1
;
9791 case dw_val_class_symview
:
9792 /* ??? We might use uleb128, but then we'd have to compute
9793 .debug_info offsets in the assembler. */
9794 if (symview_upper_bound
<= 0xff)
9795 return DW_FORM_data1
;
9796 else if (symview_upper_bound
<= 0xffff)
9797 return DW_FORM_data2
;
9798 else if (symview_upper_bound
<= 0xffffffff)
9799 return DW_FORM_data4
;
9801 return DW_FORM_data8
;
9802 case dw_val_class_vec
:
9803 switch (constant_size (a
->dw_attr_val
.v
.val_vec
.length
9804 * a
->dw_attr_val
.v
.val_vec
.elt_size
))
9807 return DW_FORM_block1
;
9809 return DW_FORM_block2
;
9811 return DW_FORM_block4
;
9815 case dw_val_class_flag
:
9816 if (dwarf_version
>= 4)
9818 /* Currently all add_AT_flag calls pass in 1 as last argument,
9819 so DW_FORM_flag_present can be used. If that ever changes,
9820 we'll need to use DW_FORM_flag and have some optimization
9821 in build_abbrev_table that will change those to
9822 DW_FORM_flag_present if it is set to 1 in all DIEs using
9823 the same abbrev entry. */
9824 gcc_assert (a
->dw_attr_val
.v
.val_flag
== 1);
9825 return DW_FORM_flag_present
;
9827 return DW_FORM_flag
;
9828 case dw_val_class_die_ref
:
9829 if (AT_ref_external (a
))
9830 return use_debug_types
? DW_FORM_ref_sig8
: DW_FORM_ref_addr
;
9833 case dw_val_class_fde_ref
:
9834 return DW_FORM_data
;
9835 case dw_val_class_lbl_id
:
9836 return (AT_index (a
) == NOT_INDEXED
9837 ? DW_FORM_addr
: dwarf_FORM (DW_FORM_addrx
));
9838 case dw_val_class_lineptr
:
9839 case dw_val_class_macptr
:
9840 case dw_val_class_loclistsptr
:
9841 return dwarf_version
>= 4 ? DW_FORM_sec_offset
: DW_FORM_data
;
9842 case dw_val_class_str
:
9843 return AT_string_form (a
);
9844 case dw_val_class_file
:
9845 switch (constant_size (maybe_emit_file (a
->dw_attr_val
.v
.val_file
)))
9848 return DW_FORM_data1
;
9850 return DW_FORM_data2
;
9852 return DW_FORM_data4
;
9857 case dw_val_class_data8
:
9858 return DW_FORM_data8
;
9860 case dw_val_class_high_pc
:
9861 switch (DWARF2_ADDR_SIZE
)
9864 return DW_FORM_data1
;
9866 return DW_FORM_data2
;
9868 return DW_FORM_data4
;
9870 return DW_FORM_data8
;
9875 case dw_val_class_discr_value
:
9876 return (a
->dw_attr_val
.v
.val_discr_value
.pos
9879 case dw_val_class_discr_list
:
9880 switch (constant_size (size_of_discr_list (AT_discr_list (a
))))
9883 return DW_FORM_block1
;
9885 return DW_FORM_block2
;
9887 return DW_FORM_block4
;
9897 /* Output the encoding of an attribute value. */
9900 output_value_format (dw_attr_node
*a
)
9902 enum dwarf_form form
= value_format (a
);
9904 dw2_asm_output_data_uleb128 (form
, "(%s)", dwarf_form_name (form
));
9907 /* Given a die and id, produce the appropriate abbreviations. */
9910 output_die_abbrevs (unsigned long abbrev_id
, dw_die_ref abbrev
)
9913 dw_attr_node
*a_attr
;
9915 dw2_asm_output_data_uleb128 (abbrev_id
, "(abbrev code)");
9916 dw2_asm_output_data_uleb128 (abbrev
->die_tag
, "(TAG: %s)",
9917 dwarf_tag_name (abbrev
->die_tag
));
9919 if (abbrev
->die_child
!= NULL
)
9920 dw2_asm_output_data (1, DW_children_yes
, "DW_children_yes");
9922 dw2_asm_output_data (1, DW_children_no
, "DW_children_no");
9924 for (ix
= 0; vec_safe_iterate (abbrev
->die_attr
, ix
, &a_attr
); ix
++)
9926 dw2_asm_output_data_uleb128 (a_attr
->dw_attr
, "(%s)",
9927 dwarf_attr_name (a_attr
->dw_attr
));
9928 output_value_format (a_attr
);
9929 if (value_format (a_attr
) == DW_FORM_implicit_const
)
9931 if (AT_class (a_attr
) == dw_val_class_file_implicit
)
9933 int f
= maybe_emit_file (a_attr
->dw_attr_val
.v
.val_file
);
9934 const char *filename
= a_attr
->dw_attr_val
.v
.val_file
->filename
;
9935 dw2_asm_output_data_sleb128 (f
, "(%s)", filename
);
9938 dw2_asm_output_data_sleb128 (a_attr
->dw_attr_val
.v
.val_int
, NULL
);
9942 dw2_asm_output_data (1, 0, NULL
);
9943 dw2_asm_output_data (1, 0, NULL
);
9947 /* Output the .debug_abbrev section which defines the DIE abbreviation
9951 output_abbrev_section (void)
9953 unsigned int abbrev_id
;
9956 FOR_EACH_VEC_SAFE_ELT (abbrev_die_table
, abbrev_id
, abbrev
)
9958 output_die_abbrevs (abbrev_id
, abbrev
);
9960 /* Terminate the table. */
9961 dw2_asm_output_data (1, 0, NULL
);
9964 /* Return a new location list, given the begin and end range, and the
9967 static inline dw_loc_list_ref
9968 new_loc_list (dw_loc_descr_ref expr
, const char *begin
, var_loc_view vbegin
,
9969 const char *end
, var_loc_view vend
,
9970 const char *section
)
9972 dw_loc_list_ref retlist
= ggc_cleared_alloc
<dw_loc_list_node
> ();
9974 retlist
->begin
= begin
;
9975 retlist
->begin_entry
= NULL
;
9977 retlist
->expr
= expr
;
9978 retlist
->section
= section
;
9979 retlist
->vbegin
= vbegin
;
9980 retlist
->vend
= vend
;
9985 /* Return true iff there's any nonzero view number in the loc list.
9987 ??? When views are not enabled, we'll often extend a single range
9988 to the entire function, so that we emit a single location
9989 expression rather than a location list. With views, even with a
9990 single range, we'll output a list if start or end have a nonzero
9991 view. If we change this, we may want to stop splitting a single
9992 range in dw_loc_list just because of a nonzero view, even if it
9993 straddles across hot/cold partitions. */
9996 loc_list_has_views (dw_loc_list_ref list
)
9998 if (!debug_variable_location_views
)
10001 for (dw_loc_list_ref loc
= list
;
10002 loc
!= NULL
; loc
= loc
->dw_loc_next
)
10003 if (!ZERO_VIEW_P (loc
->vbegin
) || !ZERO_VIEW_P (loc
->vend
))
10009 /* Generate a new internal symbol for this location list node, if it
10010 hasn't got one yet. */
10013 gen_llsym (dw_loc_list_ref list
)
10015 gcc_assert (!list
->ll_symbol
);
10016 list
->ll_symbol
= gen_internal_sym ("LLST");
10018 if (!loc_list_has_views (list
))
10021 if (dwarf2out_locviews_in_attribute ())
10023 /* Use the same label_num for the view list. */
10025 list
->vl_symbol
= gen_internal_sym ("LVUS");
10028 list
->vl_symbol
= list
->ll_symbol
;
10031 /* Generate a symbol for the list, but only if we really want to emit
10035 maybe_gen_llsym (dw_loc_list_ref list
)
10037 if (!list
|| (!list
->dw_loc_next
&& !loc_list_has_views (list
)))
10043 /* Determine whether or not to skip loc_list entry CURR. If SIZEP is
10044 NULL, don't consider size of the location expression. If we're not
10045 to skip it, and SIZEP is non-null, store the size of CURR->expr's
10046 representation in *SIZEP. */
10049 skip_loc_list_entry (dw_loc_list_ref curr
, unsigned long *sizep
= NULL
)
10051 /* Don't output an entry that starts and ends at the same address. */
10052 if (strcmp (curr
->begin
, curr
->end
) == 0
10053 && curr
->vbegin
== curr
->vend
&& !curr
->force
)
10059 unsigned long size
= size_of_locs (curr
->expr
);
10061 /* If the expression is too large, drop it on the floor. We could
10062 perhaps put it into DW_TAG_dwarf_procedure and refer to that
10063 in the expression, but >= 64KB expressions for a single value
10064 in a single range are unlikely very useful. */
10065 if (dwarf_version
< 5 && size
> 0xffff)
10073 /* Output a view pair loclist entry for CURR, if it requires one. */
10076 dwarf2out_maybe_output_loclist_view_pair (dw_loc_list_ref curr
)
10078 if (!dwarf2out_locviews_in_loclist ())
10081 if (ZERO_VIEW_P (curr
->vbegin
) && ZERO_VIEW_P (curr
->vend
))
10084 #ifdef DW_LLE_view_pair
10085 dw2_asm_output_data (1, DW_LLE_view_pair
, "DW_LLE_view_pair");
10087 if (dwarf2out_as_locview_support
)
10089 if (ZERO_VIEW_P (curr
->vbegin
))
10090 dw2_asm_output_data_uleb128 (0, "Location view begin");
10093 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
10094 ASM_GENERATE_INTERNAL_LABEL (label
, "LVU", curr
->vbegin
);
10095 dw2_asm_output_symname_uleb128 (label
, "Location view begin");
10098 if (ZERO_VIEW_P (curr
->vend
))
10099 dw2_asm_output_data_uleb128 (0, "Location view end");
10102 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
10103 ASM_GENERATE_INTERNAL_LABEL (label
, "LVU", curr
->vend
);
10104 dw2_asm_output_symname_uleb128 (label
, "Location view end");
10109 dw2_asm_output_data_uleb128 (curr
->vbegin
, "Location view begin");
10110 dw2_asm_output_data_uleb128 (curr
->vend
, "Location view end");
10112 #endif /* DW_LLE_view_pair */
10117 /* Output the location list given to us. */
10120 output_loc_list (dw_loc_list_ref list_head
)
10122 int vcount
= 0, lcount
= 0;
10124 if (list_head
->emitted
)
10126 list_head
->emitted
= true;
10128 if (list_head
->vl_symbol
&& dwarf2out_locviews_in_attribute ())
10130 ASM_OUTPUT_LABEL (asm_out_file
, list_head
->vl_symbol
);
10132 for (dw_loc_list_ref curr
= list_head
; curr
!= NULL
;
10133 curr
= curr
->dw_loc_next
)
10135 unsigned long size
;
10137 if (skip_loc_list_entry (curr
, &size
))
10142 /* ?? dwarf_split_debug_info? */
10143 if (dwarf2out_as_locview_support
)
10145 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
10147 if (!ZERO_VIEW_P (curr
->vbegin
))
10149 ASM_GENERATE_INTERNAL_LABEL (label
, "LVU", curr
->vbegin
);
10150 dw2_asm_output_symname_uleb128 (label
,
10151 "View list begin (%s)",
10152 list_head
->vl_symbol
);
10155 dw2_asm_output_data_uleb128 (0,
10156 "View list begin (%s)",
10157 list_head
->vl_symbol
);
10159 if (!ZERO_VIEW_P (curr
->vend
))
10161 ASM_GENERATE_INTERNAL_LABEL (label
, "LVU", curr
->vend
);
10162 dw2_asm_output_symname_uleb128 (label
,
10163 "View list end (%s)",
10164 list_head
->vl_symbol
);
10167 dw2_asm_output_data_uleb128 (0,
10168 "View list end (%s)",
10169 list_head
->vl_symbol
);
10173 dw2_asm_output_data_uleb128 (curr
->vbegin
,
10174 "View list begin (%s)",
10175 list_head
->vl_symbol
);
10176 dw2_asm_output_data_uleb128 (curr
->vend
,
10177 "View list end (%s)",
10178 list_head
->vl_symbol
);
10183 ASM_OUTPUT_LABEL (asm_out_file
, list_head
->ll_symbol
);
10185 const char *last_section
= NULL
;
10186 const char *base_label
= NULL
;
10188 /* Walk the location list, and output each range + expression. */
10189 for (dw_loc_list_ref curr
= list_head
; curr
!= NULL
;
10190 curr
= curr
->dw_loc_next
)
10192 unsigned long size
;
10194 /* Skip this entry? If we skip it here, we must skip it in the
10195 view list above as well. */
10196 if (skip_loc_list_entry (curr
, &size
))
10201 if (dwarf_version
>= 5)
10203 if (dwarf_split_debug_info
)
10205 dwarf2out_maybe_output_loclist_view_pair (curr
);
10206 /* For -gsplit-dwarf, emit DW_LLE_starx_length, which has
10207 uleb128 index into .debug_addr and uleb128 length. */
10208 dw2_asm_output_data (1, DW_LLE_startx_length
,
10209 "DW_LLE_startx_length (%s)",
10210 list_head
->ll_symbol
);
10211 dw2_asm_output_data_uleb128 (curr
->begin_entry
->index
,
10212 "Location list range start index "
10213 "(%s)", curr
->begin
);
10214 /* FIXME: This will ICE ifndef HAVE_AS_LEB128.
10215 For that case we probably need to emit DW_LLE_startx_endx,
10216 but we'd need 2 .debug_addr entries rather than just one. */
10217 dw2_asm_output_delta_uleb128 (curr
->end
, curr
->begin
,
10218 "Location list length (%s)",
10219 list_head
->ll_symbol
);
10221 else if (!have_multiple_function_sections
&& HAVE_AS_LEB128
)
10223 dwarf2out_maybe_output_loclist_view_pair (curr
);
10224 /* If all code is in .text section, the base address is
10225 already provided by the CU attributes. Use
10226 DW_LLE_offset_pair where both addresses are uleb128 encoded
10227 offsets against that base. */
10228 dw2_asm_output_data (1, DW_LLE_offset_pair
,
10229 "DW_LLE_offset_pair (%s)",
10230 list_head
->ll_symbol
);
10231 dw2_asm_output_delta_uleb128 (curr
->begin
, curr
->section
,
10232 "Location list begin address (%s)",
10233 list_head
->ll_symbol
);
10234 dw2_asm_output_delta_uleb128 (curr
->end
, curr
->section
,
10235 "Location list end address (%s)",
10236 list_head
->ll_symbol
);
10238 else if (HAVE_AS_LEB128
)
10240 /* Otherwise, find out how many consecutive entries could share
10241 the same base entry. If just one, emit DW_LLE_start_length,
10242 otherwise emit DW_LLE_base_address for the base address
10243 followed by a series of DW_LLE_offset_pair. */
10244 if (last_section
== NULL
|| curr
->section
!= last_section
)
10246 dw_loc_list_ref curr2
;
10247 for (curr2
= curr
->dw_loc_next
; curr2
!= NULL
;
10248 curr2
= curr2
->dw_loc_next
)
10250 if (strcmp (curr2
->begin
, curr2
->end
) == 0
10255 if (curr2
== NULL
|| curr
->section
!= curr2
->section
)
10256 last_section
= NULL
;
10259 last_section
= curr
->section
;
10260 base_label
= curr
->begin
;
10261 dw2_asm_output_data (1, DW_LLE_base_address
,
10262 "DW_LLE_base_address (%s)",
10263 list_head
->ll_symbol
);
10264 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, base_label
,
10265 "Base address (%s)",
10266 list_head
->ll_symbol
);
10269 /* Only one entry with the same base address. Use
10270 DW_LLE_start_length with absolute address and uleb128
10272 if (last_section
== NULL
)
10274 dwarf2out_maybe_output_loclist_view_pair (curr
);
10275 dw2_asm_output_data (1, DW_LLE_start_length
,
10276 "DW_LLE_start_length (%s)",
10277 list_head
->ll_symbol
);
10278 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, curr
->begin
,
10279 "Location list begin address (%s)",
10280 list_head
->ll_symbol
);
10281 dw2_asm_output_delta_uleb128 (curr
->end
, curr
->begin
,
10282 "Location list length "
10283 "(%s)", list_head
->ll_symbol
);
10285 /* Otherwise emit DW_LLE_offset_pair, relative to above emitted
10286 DW_LLE_base_address. */
10289 dwarf2out_maybe_output_loclist_view_pair (curr
);
10290 dw2_asm_output_data (1, DW_LLE_offset_pair
,
10291 "DW_LLE_offset_pair (%s)",
10292 list_head
->ll_symbol
);
10293 dw2_asm_output_delta_uleb128 (curr
->begin
, base_label
,
10294 "Location list begin address "
10295 "(%s)", list_head
->ll_symbol
);
10296 dw2_asm_output_delta_uleb128 (curr
->end
, base_label
,
10297 "Location list end address "
10298 "(%s)", list_head
->ll_symbol
);
10301 /* The assembler does not support .uleb128 directive. Emit
10302 DW_LLE_start_end with a pair of absolute addresses. */
10305 dwarf2out_maybe_output_loclist_view_pair (curr
);
10306 dw2_asm_output_data (1, DW_LLE_start_end
,
10307 "DW_LLE_start_end (%s)",
10308 list_head
->ll_symbol
);
10309 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, curr
->begin
,
10310 "Location list begin address (%s)",
10311 list_head
->ll_symbol
);
10312 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, curr
->end
,
10313 "Location list end address (%s)",
10314 list_head
->ll_symbol
);
10317 else if (dwarf_split_debug_info
)
10319 /* For -gsplit-dwarf -gdwarf-{2,3,4} emit index into .debug_addr
10320 and 4 byte length. */
10321 dw2_asm_output_data (1, DW_LLE_GNU_start_length_entry
,
10322 "Location list start/length entry (%s)",
10323 list_head
->ll_symbol
);
10324 dw2_asm_output_data_uleb128 (curr
->begin_entry
->index
,
10325 "Location list range start index (%s)",
10327 /* The length field is 4 bytes. If we ever need to support
10328 an 8-byte length, we can add a new DW_LLE code or fall back
10329 to DW_LLE_GNU_start_end_entry. */
10330 dw2_asm_output_delta (4, curr
->end
, curr
->begin
,
10331 "Location list range length (%s)",
10332 list_head
->ll_symbol
);
10334 else if (!have_multiple_function_sections
)
10336 /* Pair of relative addresses against start of text section. */
10337 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, curr
->begin
, curr
->section
,
10338 "Location list begin address (%s)",
10339 list_head
->ll_symbol
);
10340 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, curr
->end
, curr
->section
,
10341 "Location list end address (%s)",
10342 list_head
->ll_symbol
);
10346 /* Pair of absolute addresses. */
10347 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, curr
->begin
,
10348 "Location list begin address (%s)",
10349 list_head
->ll_symbol
);
10350 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, curr
->end
,
10351 "Location list end address (%s)",
10352 list_head
->ll_symbol
);
10355 /* Output the block length for this list of location operations. */
10356 if (dwarf_version
>= 5)
10357 dw2_asm_output_data_uleb128 (size
, "Location expression size");
10360 gcc_assert (size
<= 0xffff);
10361 dw2_asm_output_data (2, size
, "Location expression size");
10364 output_loc_sequence (curr
->expr
, -1);
10367 /* And finally list termination. */
10368 if (dwarf_version
>= 5)
10369 dw2_asm_output_data (1, DW_LLE_end_of_list
,
10370 "DW_LLE_end_of_list (%s)", list_head
->ll_symbol
);
10371 else if (dwarf_split_debug_info
)
10372 dw2_asm_output_data (1, DW_LLE_GNU_end_of_list_entry
,
10373 "Location list terminator (%s)",
10374 list_head
->ll_symbol
);
10377 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0,
10378 "Location list terminator begin (%s)",
10379 list_head
->ll_symbol
);
10380 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0,
10381 "Location list terminator end (%s)",
10382 list_head
->ll_symbol
);
10385 gcc_assert (!list_head
->vl_symbol
10386 || vcount
== lcount
* (dwarf2out_locviews_in_attribute () ? 1 : 0));
10389 /* Output a range_list offset into the .debug_ranges or .debug_rnglists
10390 section. Emit a relocated reference if val_entry is NULL, otherwise,
10391 emit an indirect reference. */
10394 output_range_list_offset (dw_attr_node
*a
)
10396 const char *name
= dwarf_attr_name (a
->dw_attr
);
10398 if (a
->dw_attr_val
.val_entry
== RELOCATED_OFFSET
)
10400 if (dwarf_version
>= 5)
10402 dw_ranges
*r
= &(*ranges_table
)[a
->dw_attr_val
.v
.val_offset
];
10403 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, r
->label
,
10404 debug_ranges_section
, "%s", name
);
10408 char *p
= strchr (ranges_section_label
, '\0');
10409 sprintf (p
, "+" HOST_WIDE_INT_PRINT_HEX
,
10410 a
->dw_attr_val
.v
.val_offset
* 2 * DWARF2_ADDR_SIZE
);
10411 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, ranges_section_label
,
10412 debug_ranges_section
, "%s", name
);
10416 else if (dwarf_version
>= 5)
10418 dw_ranges
*r
= &(*ranges_table
)[a
->dw_attr_val
.v
.val_offset
];
10419 gcc_assert (rnglist_idx
);
10420 dw2_asm_output_data_uleb128 (r
->idx
, "%s", name
);
10423 dw2_asm_output_data (DWARF_OFFSET_SIZE
,
10424 a
->dw_attr_val
.v
.val_offset
* 2 * DWARF2_ADDR_SIZE
,
10425 "%s (offset from %s)", name
, ranges_section_label
);
10428 /* Output the offset into the debug_loc section. */
10431 output_loc_list_offset (dw_attr_node
*a
)
10433 char *sym
= AT_loc_list (a
)->ll_symbol
;
10436 if (!dwarf_split_debug_info
)
10437 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, sym
, debug_loc_section
,
10438 "%s", dwarf_attr_name (a
->dw_attr
));
10439 else if (dwarf_version
>= 5)
10441 gcc_assert (AT_loc_list (a
)->num_assigned
);
10442 dw2_asm_output_data_uleb128 (AT_loc_list (a
)->hash
, "%s (%s)",
10443 dwarf_attr_name (a
->dw_attr
),
10447 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, sym
, loc_section_label
,
10448 "%s", dwarf_attr_name (a
->dw_attr
));
10451 /* Output the offset into the debug_loc section. */
10454 output_view_list_offset (dw_attr_node
*a
)
10456 char *sym
= (*AT_loc_list_ptr (a
))->vl_symbol
;
10459 if (dwarf_split_debug_info
)
10460 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, sym
, loc_section_label
,
10461 "%s", dwarf_attr_name (a
->dw_attr
));
10463 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, sym
, debug_loc_section
,
10464 "%s", dwarf_attr_name (a
->dw_attr
));
10467 /* Output an attribute's index or value appropriately. */
10470 output_attr_index_or_value (dw_attr_node
*a
)
10472 const char *name
= dwarf_attr_name (a
->dw_attr
);
10474 if (dwarf_split_debug_info
&& AT_index (a
) != NOT_INDEXED
)
10476 dw2_asm_output_data_uleb128 (AT_index (a
), "%s", name
);
10479 switch (AT_class (a
))
10481 case dw_val_class_addr
:
10482 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
, AT_addr (a
), "%s", name
);
10484 case dw_val_class_high_pc
:
10485 case dw_val_class_lbl_id
:
10486 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, AT_lbl (a
), "%s", name
);
10489 gcc_unreachable ();
10493 /* Output a type signature. */
10496 output_signature (const char *sig
, const char *name
)
10500 for (i
= 0; i
< DWARF_TYPE_SIGNATURE_SIZE
; i
++)
10501 dw2_asm_output_data (1, sig
[i
], i
== 0 ? "%s" : NULL
, name
);
10504 /* Output a discriminant value. */
10507 output_discr_value (dw_discr_value
*discr_value
, const char *name
)
10509 if (discr_value
->pos
)
10510 dw2_asm_output_data_uleb128 (discr_value
->v
.uval
, "%s", name
);
10512 dw2_asm_output_data_sleb128 (discr_value
->v
.sval
, "%s", name
);
10515 /* Output the DIE and its attributes. Called recursively to generate
10516 the definitions of each child DIE. */
10519 output_die (dw_die_ref die
)
10523 unsigned long size
;
10526 dw2_asm_output_data_uleb128 (die
->die_abbrev
, "(DIE (%#lx) %s)",
10527 (unsigned long)die
->die_offset
,
10528 dwarf_tag_name (die
->die_tag
));
10530 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
10532 const char *name
= dwarf_attr_name (a
->dw_attr
);
10534 switch (AT_class (a
))
10536 case dw_val_class_addr
:
10537 output_attr_index_or_value (a
);
10540 case dw_val_class_offset
:
10541 dw2_asm_output_data (DWARF_OFFSET_SIZE
, a
->dw_attr_val
.v
.val_offset
,
10545 case dw_val_class_range_list
:
10546 output_range_list_offset (a
);
10549 case dw_val_class_loc
:
10550 size
= size_of_locs (AT_loc (a
));
10552 /* Output the block length for this list of location operations. */
10553 if (dwarf_version
>= 4)
10554 dw2_asm_output_data_uleb128 (size
, "%s", name
);
10556 dw2_asm_output_data (constant_size (size
), size
, "%s", name
);
10558 output_loc_sequence (AT_loc (a
), -1);
10561 case dw_val_class_const
:
10562 /* ??? It would be slightly more efficient to use a scheme like is
10563 used for unsigned constants below, but gdb 4.x does not sign
10564 extend. Gdb 5.x does sign extend. */
10565 dw2_asm_output_data_sleb128 (AT_int (a
), "%s", name
);
10568 case dw_val_class_unsigned_const
:
10570 int csize
= constant_size (AT_unsigned (a
));
10571 if (dwarf_version
== 3
10572 && a
->dw_attr
== DW_AT_data_member_location
10574 dw2_asm_output_data_uleb128 (AT_unsigned (a
), "%s", name
);
10576 dw2_asm_output_data (csize
, AT_unsigned (a
), "%s", name
);
10580 case dw_val_class_symview
:
10583 if (symview_upper_bound
<= 0xff)
10585 else if (symview_upper_bound
<= 0xffff)
10587 else if (symview_upper_bound
<= 0xffffffff)
10591 dw2_asm_output_addr (vsize
, a
->dw_attr_val
.v
.val_symbolic_view
,
10596 case dw_val_class_const_implicit
:
10597 if (flag_debug_asm
)
10598 fprintf (asm_out_file
, "\t\t\t%s %s ("
10599 HOST_WIDE_INT_PRINT_DEC
")\n",
10600 ASM_COMMENT_START
, name
, AT_int (a
));
10603 case dw_val_class_unsigned_const_implicit
:
10604 if (flag_debug_asm
)
10605 fprintf (asm_out_file
, "\t\t\t%s %s ("
10606 HOST_WIDE_INT_PRINT_HEX
")\n",
10607 ASM_COMMENT_START
, name
, AT_unsigned (a
));
10610 case dw_val_class_const_double
:
10612 unsigned HOST_WIDE_INT first
, second
;
10614 if (HOST_BITS_PER_WIDE_INT
>= DWARF_LARGEST_DATA_FORM_BITS
)
10615 dw2_asm_output_data (1,
10616 HOST_BITS_PER_DOUBLE_INT
10617 / HOST_BITS_PER_CHAR
,
10620 if (WORDS_BIG_ENDIAN
)
10622 first
= a
->dw_attr_val
.v
.val_double
.high
;
10623 second
= a
->dw_attr_val
.v
.val_double
.low
;
10627 first
= a
->dw_attr_val
.v
.val_double
.low
;
10628 second
= a
->dw_attr_val
.v
.val_double
.high
;
10631 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
,
10632 first
, "%s", name
);
10633 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
,
10638 case dw_val_class_wide_int
:
10641 int len
= get_full_len (*a
->dw_attr_val
.v
.val_wide
);
10642 int l
= HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
;
10643 if (len
* HOST_BITS_PER_WIDE_INT
> DWARF_LARGEST_DATA_FORM_BITS
)
10644 dw2_asm_output_data (1, get_full_len (*a
->dw_attr_val
.v
.val_wide
)
10647 if (WORDS_BIG_ENDIAN
)
10648 for (i
= len
- 1; i
>= 0; --i
)
10650 dw2_asm_output_data (l
, a
->dw_attr_val
.v
.val_wide
->elt (i
),
10655 for (i
= 0; i
< len
; ++i
)
10657 dw2_asm_output_data (l
, a
->dw_attr_val
.v
.val_wide
->elt (i
),
10664 case dw_val_class_vec
:
10666 unsigned int elt_size
= a
->dw_attr_val
.v
.val_vec
.elt_size
;
10667 unsigned int len
= a
->dw_attr_val
.v
.val_vec
.length
;
10671 dw2_asm_output_data (constant_size (len
* elt_size
),
10672 len
* elt_size
, "%s", name
);
10673 if (elt_size
> sizeof (HOST_WIDE_INT
))
10678 for (i
= 0, p
= (unsigned char *) a
->dw_attr_val
.v
.val_vec
.array
;
10680 i
++, p
+= elt_size
)
10681 dw2_asm_output_data (elt_size
, extract_int (p
, elt_size
),
10682 "fp or vector constant word %u", i
);
10686 case dw_val_class_flag
:
10687 if (dwarf_version
>= 4)
10689 /* Currently all add_AT_flag calls pass in 1 as last argument,
10690 so DW_FORM_flag_present can be used. If that ever changes,
10691 we'll need to use DW_FORM_flag and have some optimization
10692 in build_abbrev_table that will change those to
10693 DW_FORM_flag_present if it is set to 1 in all DIEs using
10694 the same abbrev entry. */
10695 gcc_assert (AT_flag (a
) == 1);
10696 if (flag_debug_asm
)
10697 fprintf (asm_out_file
, "\t\t\t%s %s\n",
10698 ASM_COMMENT_START
, name
);
10701 dw2_asm_output_data (1, AT_flag (a
), "%s", name
);
10704 case dw_val_class_loc_list
:
10705 output_loc_list_offset (a
);
10708 case dw_val_class_view_list
:
10709 output_view_list_offset (a
);
10712 case dw_val_class_die_ref
:
10713 if (AT_ref_external (a
))
10715 if (AT_ref (a
)->comdat_type_p
)
10717 comdat_type_node
*type_node
10718 = AT_ref (a
)->die_id
.die_type_node
;
10720 gcc_assert (type_node
);
10721 output_signature (type_node
->signature
, name
);
10725 const char *sym
= AT_ref (a
)->die_id
.die_symbol
;
10729 /* In DWARF2, DW_FORM_ref_addr is sized by target address
10730 length, whereas in DWARF3 it's always sized as an
10732 if (dwarf_version
== 2)
10733 size
= DWARF2_ADDR_SIZE
;
10735 size
= DWARF_OFFSET_SIZE
;
10736 /* ??? We cannot unconditionally output die_offset if
10737 non-zero - others might create references to those
10739 And we do not clear its DIE offset after outputting it
10740 (and the label refers to the actual DIEs, not the
10741 DWARF CU unit header which is when using label + offset
10742 would be the correct thing to do).
10743 ??? This is the reason for the with_offset flag. */
10744 if (AT_ref (a
)->with_offset
)
10745 dw2_asm_output_offset (size
, sym
, AT_ref (a
)->die_offset
,
10746 debug_info_section
, "%s", name
);
10748 dw2_asm_output_offset (size
, sym
, debug_info_section
, "%s",
10754 gcc_assert (AT_ref (a
)->die_offset
);
10755 dw2_asm_output_data (DWARF_OFFSET_SIZE
, AT_ref (a
)->die_offset
,
10760 case dw_val_class_fde_ref
:
10762 char l1
[MAX_ARTIFICIAL_LABEL_BYTES
];
10764 ASM_GENERATE_INTERNAL_LABEL (l1
, FDE_LABEL
,
10765 a
->dw_attr_val
.v
.val_fde_index
* 2);
10766 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, l1
, debug_frame_section
,
10771 case dw_val_class_vms_delta
:
10772 #ifdef ASM_OUTPUT_DWARF_VMS_DELTA
10773 dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE
,
10774 AT_vms_delta2 (a
), AT_vms_delta1 (a
),
10777 dw2_asm_output_delta (DWARF_OFFSET_SIZE
,
10778 AT_vms_delta2 (a
), AT_vms_delta1 (a
),
10783 case dw_val_class_lbl_id
:
10784 output_attr_index_or_value (a
);
10787 case dw_val_class_lineptr
:
10788 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, AT_lbl (a
),
10789 debug_line_section
, "%s", name
);
10792 case dw_val_class_macptr
:
10793 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, AT_lbl (a
),
10794 debug_macinfo_section
, "%s", name
);
10797 case dw_val_class_loclistsptr
:
10798 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, AT_lbl (a
),
10799 debug_loc_section
, "%s", name
);
10802 case dw_val_class_str
:
10803 if (a
->dw_attr_val
.v
.val_str
->form
== DW_FORM_strp
)
10804 dw2_asm_output_offset (DWARF_OFFSET_SIZE
,
10805 a
->dw_attr_val
.v
.val_str
->label
,
10807 "%s: \"%s\"", name
, AT_string (a
));
10808 else if (a
->dw_attr_val
.v
.val_str
->form
== DW_FORM_line_strp
)
10809 dw2_asm_output_offset (DWARF_OFFSET_SIZE
,
10810 a
->dw_attr_val
.v
.val_str
->label
,
10811 debug_line_str_section
,
10812 "%s: \"%s\"", name
, AT_string (a
));
10813 else if (a
->dw_attr_val
.v
.val_str
->form
== dwarf_FORM (DW_FORM_strx
))
10814 dw2_asm_output_data_uleb128 (AT_index (a
),
10815 "%s: \"%s\"", name
, AT_string (a
));
10817 dw2_asm_output_nstring (AT_string (a
), -1, "%s", name
);
10820 case dw_val_class_file
:
10822 int f
= maybe_emit_file (a
->dw_attr_val
.v
.val_file
);
10824 dw2_asm_output_data (constant_size (f
), f
, "%s (%s)", name
,
10825 a
->dw_attr_val
.v
.val_file
->filename
);
10829 case dw_val_class_file_implicit
:
10830 if (flag_debug_asm
)
10831 fprintf (asm_out_file
, "\t\t\t%s %s (%d, %s)\n",
10832 ASM_COMMENT_START
, name
,
10833 maybe_emit_file (a
->dw_attr_val
.v
.val_file
),
10834 a
->dw_attr_val
.v
.val_file
->filename
);
10837 case dw_val_class_data8
:
10841 for (i
= 0; i
< 8; i
++)
10842 dw2_asm_output_data (1, a
->dw_attr_val
.v
.val_data8
[i
],
10843 i
== 0 ? "%s" : NULL
, name
);
10847 case dw_val_class_high_pc
:
10848 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, AT_lbl (a
),
10849 get_AT_low_pc (die
), "DW_AT_high_pc");
10852 case dw_val_class_discr_value
:
10853 output_discr_value (&a
->dw_attr_val
.v
.val_discr_value
, name
);
10856 case dw_val_class_discr_list
:
10858 dw_discr_list_ref list
= AT_discr_list (a
);
10859 const int size
= size_of_discr_list (list
);
10861 /* This is a block, so output its length first. */
10862 dw2_asm_output_data (constant_size (size
), size
,
10863 "%s: block size", name
);
10865 for (; list
!= NULL
; list
= list
->dw_discr_next
)
10867 /* One byte for the discriminant value descriptor, and then as
10868 many LEB128 numbers as required. */
10869 if (list
->dw_discr_range
)
10870 dw2_asm_output_data (1, DW_DSC_range
,
10871 "%s: DW_DSC_range", name
);
10873 dw2_asm_output_data (1, DW_DSC_label
,
10874 "%s: DW_DSC_label", name
);
10876 output_discr_value (&list
->dw_discr_lower_bound
, name
);
10877 if (list
->dw_discr_range
)
10878 output_discr_value (&list
->dw_discr_upper_bound
, name
);
10884 gcc_unreachable ();
10888 FOR_EACH_CHILD (die
, c
, output_die (c
));
10890 /* Add null byte to terminate sibling list. */
10891 if (die
->die_child
!= NULL
)
10892 dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10893 (unsigned long) die
->die_offset
);
10896 /* Output the dwarf version number. */
10899 output_dwarf_version ()
10901 /* ??? For now, if -gdwarf-6 is specified, we output version 5 with
10902 views in loclist. That will change eventually. */
10903 if (dwarf_version
== 6)
10909 "-gdwarf-6 is output as version 5 with incompatibilities");
10912 dw2_asm_output_data (2, 5, "DWARF version number");
10915 dw2_asm_output_data (2, dwarf_version
, "DWARF version number");
10918 /* Output the compilation unit that appears at the beginning of the
10919 .debug_info section, and precedes the DIE descriptions. */
10922 output_compilation_unit_header (enum dwarf_unit_type ut
)
10924 if (!XCOFF_DEBUGGING_INFO
)
10926 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
10927 dw2_asm_output_data (4, 0xffffffff,
10928 "Initial length escape value indicating 64-bit DWARF extension");
10929 dw2_asm_output_data (DWARF_OFFSET_SIZE
,
10930 next_die_offset
- DWARF_INITIAL_LENGTH_SIZE
,
10931 "Length of Compilation Unit Info");
10934 output_dwarf_version ();
10935 if (dwarf_version
>= 5)
10940 case DW_UT_compile
: name
= "DW_UT_compile"; break;
10941 case DW_UT_type
: name
= "DW_UT_type"; break;
10942 case DW_UT_split_compile
: name
= "DW_UT_split_compile"; break;
10943 case DW_UT_split_type
: name
= "DW_UT_split_type"; break;
10944 default: gcc_unreachable ();
10946 dw2_asm_output_data (1, ut
, "%s", name
);
10947 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Pointer Size (in bytes)");
10949 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, abbrev_section_label
,
10950 debug_abbrev_section
,
10951 "Offset Into Abbrev. Section");
10952 if (dwarf_version
< 5)
10953 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Pointer Size (in bytes)");
10956 /* Output the compilation unit DIE and its children. */
10959 output_comp_unit (dw_die_ref die
, int output_if_empty
,
10960 const unsigned char *dwo_id
)
10962 const char *secname
, *oldsym
;
10965 /* Unless we are outputting main CU, we may throw away empty ones. */
10966 if (!output_if_empty
&& die
->die_child
== NULL
)
10969 /* Even if there are no children of this DIE, we must output the information
10970 about the compilation unit. Otherwise, on an empty translation unit, we
10971 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
10972 will then complain when examining the file. First mark all the DIEs in
10973 this CU so we know which get local refs. */
10976 external_ref_hash_type
*extern_map
= optimize_external_refs (die
);
10978 /* For now, optimize only the main CU, in order to optimize the rest
10979 we'd need to see all of them earlier. Leave the rest for post-linking
10981 if (die
== comp_unit_die ())
10982 abbrev_opt_start
= vec_safe_length (abbrev_die_table
);
10984 build_abbrev_table (die
, extern_map
);
10986 optimize_abbrev_table ();
10990 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
10991 next_die_offset
= (dwo_id
10992 ? DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
10993 : DWARF_COMPILE_UNIT_HEADER_SIZE
);
10994 calc_die_sizes (die
);
10996 oldsym
= die
->die_id
.die_symbol
;
10997 if (oldsym
&& die
->comdat_type_p
)
10999 tmp
= XALLOCAVEC (char, strlen (oldsym
) + 24);
11001 sprintf (tmp
, ".gnu.linkonce.wi.%s", oldsym
);
11003 die
->die_id
.die_symbol
= NULL
;
11004 switch_to_section (get_section (secname
, SECTION_DEBUG
, NULL
));
11008 switch_to_section (debug_info_section
);
11009 ASM_OUTPUT_LABEL (asm_out_file
, debug_info_section_label
);
11010 info_section_emitted
= true;
11013 /* For LTO cross unit DIE refs we want a symbol on the start of the
11014 debuginfo section, not on the CU DIE. */
11015 if ((flag_generate_lto
|| flag_generate_offload
) && oldsym
)
11017 /* ??? No way to get visibility assembled without a decl. */
11018 tree decl
= build_decl (UNKNOWN_LOCATION
, VAR_DECL
,
11019 get_identifier (oldsym
), char_type_node
);
11020 TREE_PUBLIC (decl
) = true;
11021 TREE_STATIC (decl
) = true;
11022 DECL_ARTIFICIAL (decl
) = true;
11023 DECL_VISIBILITY (decl
) = VISIBILITY_HIDDEN
;
11024 DECL_VISIBILITY_SPECIFIED (decl
) = true;
11025 targetm
.asm_out
.assemble_visibility (decl
, VISIBILITY_HIDDEN
);
11026 #ifdef ASM_WEAKEN_LABEL
11027 /* We prefer a .weak because that handles duplicates from duplicate
11028 archive members in a graceful way. */
11029 ASM_WEAKEN_LABEL (asm_out_file
, oldsym
);
11031 targetm
.asm_out
.globalize_label (asm_out_file
, oldsym
);
11033 ASM_OUTPUT_LABEL (asm_out_file
, oldsym
);
11036 /* Output debugging information. */
11037 output_compilation_unit_header (dwo_id
11038 ? DW_UT_split_compile
: DW_UT_compile
);
11039 if (dwarf_version
>= 5)
11041 if (dwo_id
!= NULL
)
11042 for (int i
= 0; i
< 8; i
++)
11043 dw2_asm_output_data (1, dwo_id
[i
], i
== 0 ? "DWO id" : NULL
);
11047 /* Leave the marks on the main CU, so we can check them in
11048 output_pubnames. */
11052 die
->die_id
.die_symbol
= oldsym
;
11056 /* Whether to generate the DWARF accelerator tables in .debug_pubnames
11057 and .debug_pubtypes. This is configured per-target, but can be
11058 overridden by the -gpubnames or -gno-pubnames options. */
11061 want_pubnames (void)
11063 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
11065 if (debug_generate_pub_sections
!= -1)
11066 return debug_generate_pub_sections
;
11067 return targetm
.want_debug_pub_sections
;
11070 /* Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes. */
11073 add_AT_pubnames (dw_die_ref die
)
11075 if (want_pubnames ())
11076 add_AT_flag (die
, DW_AT_GNU_pubnames
, 1);
11079 /* Add a string attribute value to a skeleton DIE. */
11082 add_skeleton_AT_string (dw_die_ref die
, enum dwarf_attribute attr_kind
,
11086 struct indirect_string_node
*node
;
11088 if (! skeleton_debug_str_hash
)
11089 skeleton_debug_str_hash
11090 = hash_table
<indirect_string_hasher
>::create_ggc (10);
11092 node
= find_AT_string_in_table (str
, skeleton_debug_str_hash
);
11093 find_string_form (node
);
11094 if (node
->form
== dwarf_FORM (DW_FORM_strx
))
11095 node
->form
= DW_FORM_strp
;
11097 attr
.dw_attr
= attr_kind
;
11098 attr
.dw_attr_val
.val_class
= dw_val_class_str
;
11099 attr
.dw_attr_val
.val_entry
= NULL
;
11100 attr
.dw_attr_val
.v
.val_str
= node
;
11101 add_dwarf_attr (die
, &attr
);
11104 /* Helper function to generate top-level dies for skeleton debug_info and
11108 add_top_level_skeleton_die_attrs (dw_die_ref die
)
11110 const char *dwo_file_name
= concat (aux_base_name
, ".dwo", NULL
);
11111 const char *comp_dir
= comp_dir_string ();
11113 add_skeleton_AT_string (die
, dwarf_AT (DW_AT_dwo_name
), dwo_file_name
);
11114 if (comp_dir
!= NULL
)
11115 add_skeleton_AT_string (die
, DW_AT_comp_dir
, comp_dir
);
11116 add_AT_pubnames (die
);
11117 add_AT_lineptr (die
, dwarf_AT (DW_AT_addr_base
), debug_addr_section_label
);
11120 /* Output skeleton debug sections that point to the dwo file. */
11123 output_skeleton_debug_sections (dw_die_ref comp_unit
,
11124 const unsigned char *dwo_id
)
11126 /* These attributes will be found in the full debug_info section. */
11127 remove_AT (comp_unit
, DW_AT_producer
);
11128 remove_AT (comp_unit
, DW_AT_language
);
11130 switch_to_section (debug_skeleton_info_section
);
11131 ASM_OUTPUT_LABEL (asm_out_file
, debug_skeleton_info_section_label
);
11133 /* Produce the skeleton compilation-unit header. This one differs enough from
11134 a normal CU header that it's better not to call output_compilation_unit
11136 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
11137 dw2_asm_output_data (4, 0xffffffff,
11138 "Initial length escape value indicating 64-bit "
11139 "DWARF extension");
11141 dw2_asm_output_data (DWARF_OFFSET_SIZE
,
11142 DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
11143 - DWARF_INITIAL_LENGTH_SIZE
11144 + size_of_die (comp_unit
),
11145 "Length of Compilation Unit Info");
11146 output_dwarf_version ();
11147 if (dwarf_version
>= 5)
11149 dw2_asm_output_data (1, DW_UT_skeleton
, "DW_UT_skeleton");
11150 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Pointer Size (in bytes)");
11152 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_skeleton_abbrev_section_label
,
11153 debug_skeleton_abbrev_section
,
11154 "Offset Into Abbrev. Section");
11155 if (dwarf_version
< 5)
11156 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Pointer Size (in bytes)");
11158 for (int i
= 0; i
< 8; i
++)
11159 dw2_asm_output_data (1, dwo_id
[i
], i
== 0 ? "DWO id" : NULL
);
11161 comp_unit
->die_abbrev
= SKELETON_COMP_DIE_ABBREV
;
11162 output_die (comp_unit
);
11164 /* Build the skeleton debug_abbrev section. */
11165 switch_to_section (debug_skeleton_abbrev_section
);
11166 ASM_OUTPUT_LABEL (asm_out_file
, debug_skeleton_abbrev_section_label
);
11168 output_die_abbrevs (SKELETON_COMP_DIE_ABBREV
, comp_unit
);
11170 dw2_asm_output_data (1, 0, "end of skeleton .debug_abbrev");
11173 /* Output a comdat type unit DIE and its children. */
11176 output_comdat_type_unit (comdat_type_node
*node
)
11178 const char *secname
;
11181 #if defined (OBJECT_FORMAT_ELF)
11185 /* First mark all the DIEs in this CU so we know which get local refs. */
11186 mark_dies (node
->root_die
);
11188 external_ref_hash_type
*extern_map
= optimize_external_refs (node
->root_die
);
11190 build_abbrev_table (node
->root_die
, extern_map
);
11195 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
11196 next_die_offset
= DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE
;
11197 calc_die_sizes (node
->root_die
);
11199 #if defined (OBJECT_FORMAT_ELF)
11200 if (dwarf_version
>= 5)
11202 if (!dwarf_split_debug_info
)
11203 secname
= ".debug_info";
11205 secname
= ".debug_info.dwo";
11207 else if (!dwarf_split_debug_info
)
11208 secname
= ".debug_types";
11210 secname
= ".debug_types.dwo";
11212 tmp
= XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE
* 2);
11213 sprintf (tmp
, dwarf_version
>= 5 ? "wi." : "wt.");
11214 for (i
= 0; i
< DWARF_TYPE_SIGNATURE_SIZE
; i
++)
11215 sprintf (tmp
+ 3 + i
* 2, "%02x", node
->signature
[i
] & 0xff);
11216 comdat_key
= get_identifier (tmp
);
11217 targetm
.asm_out
.named_section (secname
,
11218 SECTION_DEBUG
| SECTION_LINKONCE
,
11221 tmp
= XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE
* 2);
11222 sprintf (tmp
, (dwarf_version
>= 5
11223 ? ".gnu.linkonce.wi." : ".gnu.linkonce.wt."));
11224 for (i
= 0; i
< DWARF_TYPE_SIGNATURE_SIZE
; i
++)
11225 sprintf (tmp
+ 17 + i
* 2, "%02x", node
->signature
[i
] & 0xff);
11227 switch_to_section (get_section (secname
, SECTION_DEBUG
, NULL
));
11230 /* Output debugging information. */
11231 output_compilation_unit_header (dwarf_split_debug_info
11232 ? DW_UT_split_type
: DW_UT_type
);
11233 output_signature (node
->signature
, "Type Signature");
11234 dw2_asm_output_data (DWARF_OFFSET_SIZE
, node
->type_die
->die_offset
,
11235 "Offset to Type DIE");
11236 output_die (node
->root_die
);
11238 unmark_dies (node
->root_die
);
11241 /* Return the DWARF2/3 pubname associated with a decl. */
11243 static const char *
11244 dwarf2_name (tree decl
, int scope
)
11246 if (DECL_NAMELESS (decl
))
11248 return lang_hooks
.dwarf_name (decl
, scope
? 1 : 0);
11251 /* Add a new entry to .debug_pubnames if appropriate. */
11254 add_pubname_string (const char *str
, dw_die_ref die
)
11259 e
.name
= xstrdup (str
);
11260 vec_safe_push (pubname_table
, e
);
11264 add_pubname (tree decl
, dw_die_ref die
)
11266 if (!want_pubnames ())
11269 /* Don't add items to the table when we expect that the consumer will have
11270 just read the enclosing die. For example, if the consumer is looking at a
11271 class_member, it will either be inside the class already, or will have just
11272 looked up the class to find the member. Either way, searching the class is
11273 faster than searching the index. */
11274 if ((TREE_PUBLIC (decl
) && !class_scope_p (die
->die_parent
))
11275 || is_cu_die (die
->die_parent
) || is_namespace_die (die
->die_parent
))
11277 const char *name
= dwarf2_name (decl
, 1);
11280 add_pubname_string (name
, die
);
11284 /* Add an enumerator to the pubnames section. */
11287 add_enumerator_pubname (const char *scope_name
, dw_die_ref die
)
11291 gcc_assert (scope_name
);
11292 e
.name
= concat (scope_name
, get_AT_string (die
, DW_AT_name
), NULL
);
11294 vec_safe_push (pubname_table
, e
);
11297 /* Add a new entry to .debug_pubtypes if appropriate. */
11300 add_pubtype (tree decl
, dw_die_ref die
)
11304 if (!want_pubnames ())
11307 if ((TREE_PUBLIC (decl
)
11308 || is_cu_die (die
->die_parent
) || is_namespace_die (die
->die_parent
))
11309 && (die
->die_tag
== DW_TAG_typedef
|| COMPLETE_TYPE_P (decl
)))
11312 const char *scope_name
= "";
11313 const char *sep
= is_cxx () ? "::" : ".";
11316 scope
= TYPE_P (decl
) ? TYPE_CONTEXT (decl
) : NULL
;
11317 if (scope
&& TREE_CODE (scope
) == NAMESPACE_DECL
)
11319 scope_name
= lang_hooks
.dwarf_name (scope
, 1);
11320 if (scope_name
!= NULL
&& scope_name
[0] != '\0')
11321 scope_name
= concat (scope_name
, sep
, NULL
);
11327 name
= type_tag (decl
);
11329 name
= lang_hooks
.dwarf_name (decl
, 1);
11331 /* If we don't have a name for the type, there's no point in adding
11332 it to the table. */
11333 if (name
!= NULL
&& name
[0] != '\0')
11336 e
.name
= concat (scope_name
, name
, NULL
);
11337 vec_safe_push (pubtype_table
, e
);
11340 /* Although it might be more consistent to add the pubinfo for the
11341 enumerators as their dies are created, they should only be added if the
11342 enum type meets the criteria above. So rather than re-check the parent
11343 enum type whenever an enumerator die is created, just output them all
11344 here. This isn't protected by the name conditional because anonymous
11345 enums don't have names. */
11346 if (die
->die_tag
== DW_TAG_enumeration_type
)
11350 FOR_EACH_CHILD (die
, c
, add_enumerator_pubname (scope_name
, c
));
11355 /* Output a single entry in the pubnames table. */
11358 output_pubname (dw_offset die_offset
, pubname_entry
*entry
)
11360 dw_die_ref die
= entry
->die
;
11361 int is_static
= get_AT_flag (die
, DW_AT_external
) ? 0 : 1;
11363 dw2_asm_output_data (DWARF_OFFSET_SIZE
, die_offset
, "DIE offset");
11365 if (debug_generate_pub_sections
== 2)
11367 /* This logic follows gdb's method for determining the value of the flag
11369 uint32_t flags
= GDB_INDEX_SYMBOL_KIND_NONE
;
11370 switch (die
->die_tag
)
11372 case DW_TAG_typedef
:
11373 case DW_TAG_base_type
:
11374 case DW_TAG_subrange_type
:
11375 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags
, GDB_INDEX_SYMBOL_KIND_TYPE
);
11376 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags
, 1);
11378 case DW_TAG_enumerator
:
11379 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags
,
11380 GDB_INDEX_SYMBOL_KIND_VARIABLE
);
11382 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags
, 1);
11384 case DW_TAG_subprogram
:
11385 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags
,
11386 GDB_INDEX_SYMBOL_KIND_FUNCTION
);
11388 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags
, is_static
);
11390 case DW_TAG_constant
:
11391 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags
,
11392 GDB_INDEX_SYMBOL_KIND_VARIABLE
);
11393 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags
, is_static
);
11395 case DW_TAG_variable
:
11396 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags
,
11397 GDB_INDEX_SYMBOL_KIND_VARIABLE
);
11398 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags
, is_static
);
11400 case DW_TAG_namespace
:
11401 case DW_TAG_imported_declaration
:
11402 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags
, GDB_INDEX_SYMBOL_KIND_TYPE
);
11404 case DW_TAG_class_type
:
11405 case DW_TAG_interface_type
:
11406 case DW_TAG_structure_type
:
11407 case DW_TAG_union_type
:
11408 case DW_TAG_enumeration_type
:
11409 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags
, GDB_INDEX_SYMBOL_KIND_TYPE
);
11411 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags
, 1);
11414 /* An unusual tag. Leave the flag-byte empty. */
11417 dw2_asm_output_data (1, flags
>> GDB_INDEX_CU_BITSIZE
,
11418 "GDB-index flags");
11421 dw2_asm_output_nstring (entry
->name
, -1, "external name");
11425 /* Output the public names table used to speed up access to externally
11426 visible names; or the public types table used to find type definitions. */
11429 output_pubnames (vec
<pubname_entry
, va_gc
> *names
)
11432 unsigned long pubnames_length
= size_of_pubnames (names
);
11433 pubname_entry
*pub
;
11435 if (!XCOFF_DEBUGGING_INFO
)
11437 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
11438 dw2_asm_output_data (4, 0xffffffff,
11439 "Initial length escape value indicating 64-bit DWARF extension");
11440 dw2_asm_output_data (DWARF_OFFSET_SIZE
, pubnames_length
,
11441 "Pub Info Length");
11444 /* Version number for pubnames/pubtypes is independent of dwarf version. */
11445 dw2_asm_output_data (2, 2, "DWARF pubnames/pubtypes version");
11447 if (dwarf_split_debug_info
)
11448 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_skeleton_info_section_label
,
11449 debug_skeleton_info_section
,
11450 "Offset of Compilation Unit Info");
11452 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_info_section_label
,
11453 debug_info_section
,
11454 "Offset of Compilation Unit Info");
11455 dw2_asm_output_data (DWARF_OFFSET_SIZE
, next_die_offset
,
11456 "Compilation Unit Length");
11458 FOR_EACH_VEC_ELT (*names
, i
, pub
)
11460 if (include_pubname_in_output (names
, pub
))
11462 dw_offset die_offset
= pub
->die
->die_offset
;
11464 /* We shouldn't see pubnames for DIEs outside of the main CU. */
11465 if (names
== pubname_table
&& pub
->die
->die_tag
!= DW_TAG_enumerator
)
11466 gcc_assert (pub
->die
->die_mark
);
11468 /* If we're putting types in their own .debug_types sections,
11469 the .debug_pubtypes table will still point to the compile
11470 unit (not the type unit), so we want to use the offset of
11471 the skeleton DIE (if there is one). */
11472 if (pub
->die
->comdat_type_p
&& names
== pubtype_table
)
11474 comdat_type_node
*type_node
= pub
->die
->die_id
.die_type_node
;
11476 if (type_node
!= NULL
)
11477 die_offset
= (type_node
->skeleton_die
!= NULL
11478 ? type_node
->skeleton_die
->die_offset
11479 : comp_unit_die ()->die_offset
);
11482 output_pubname (die_offset
, pub
);
11486 dw2_asm_output_data (DWARF_OFFSET_SIZE
, 0, NULL
);
11489 /* Output public names and types tables if necessary. */
11492 output_pubtables (void)
11494 if (!want_pubnames () || !info_section_emitted
)
11497 switch_to_section (debug_pubnames_section
);
11498 output_pubnames (pubname_table
);
11499 /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
11500 It shouldn't hurt to emit it always, since pure DWARF2 consumers
11501 simply won't look for the section. */
11502 switch_to_section (debug_pubtypes_section
);
11503 output_pubnames (pubtype_table
);
11507 /* Output the information that goes into the .debug_aranges table.
11508 Namely, define the beginning and ending address range of the
11509 text section generated for this compilation unit. */
11512 output_aranges (void)
11515 unsigned long aranges_length
= size_of_aranges ();
11517 if (!XCOFF_DEBUGGING_INFO
)
11519 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
11520 dw2_asm_output_data (4, 0xffffffff,
11521 "Initial length escape value indicating 64-bit DWARF extension");
11522 dw2_asm_output_data (DWARF_OFFSET_SIZE
, aranges_length
,
11523 "Length of Address Ranges Info");
11526 /* Version number for aranges is still 2, even up to DWARF5. */
11527 dw2_asm_output_data (2, 2, "DWARF aranges version");
11528 if (dwarf_split_debug_info
)
11529 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_skeleton_info_section_label
,
11530 debug_skeleton_info_section
,
11531 "Offset of Compilation Unit Info");
11533 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_info_section_label
,
11534 debug_info_section
,
11535 "Offset of Compilation Unit Info");
11536 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Size of Address");
11537 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
11539 /* We need to align to twice the pointer size here. */
11540 if (DWARF_ARANGES_PAD_SIZE
)
11542 /* Pad using a 2 byte words so that padding is correct for any
11544 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
11545 2 * DWARF2_ADDR_SIZE
);
11546 for (i
= 2; i
< (unsigned) DWARF_ARANGES_PAD_SIZE
; i
+= 2)
11547 dw2_asm_output_data (2, 0, NULL
);
11550 /* It is necessary not to output these entries if the sections were
11551 not used; if the sections were not used, the length will be 0 and
11552 the address may end up as 0 if the section is discarded by ld
11553 --gc-sections, leaving an invalid (0, 0) entry that can be
11554 confused with the terminator. */
11555 if (text_section_used
)
11557 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, text_section_label
, "Address");
11558 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, text_end_label
,
11559 text_section_label
, "Length");
11561 if (cold_text_section_used
)
11563 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, cold_text_section_label
,
11565 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, cold_end_label
,
11566 cold_text_section_label
, "Length");
11569 if (have_multiple_function_sections
)
11574 FOR_EACH_VEC_ELT (*fde_vec
, fde_idx
, fde
)
11576 if (DECL_IGNORED_P (fde
->decl
))
11578 if (!fde
->in_std_section
)
11580 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, fde
->dw_fde_begin
,
11582 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, fde
->dw_fde_end
,
11583 fde
->dw_fde_begin
, "Length");
11585 if (fde
->dw_fde_second_begin
&& !fde
->second_in_std_section
)
11587 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, fde
->dw_fde_second_begin
,
11589 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, fde
->dw_fde_second_end
,
11590 fde
->dw_fde_second_begin
, "Length");
11595 /* Output the terminator words. */
11596 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
11597 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
11600 /* Add a new entry to .debug_ranges. Return its index into
11601 ranges_table vector. */
11603 static unsigned int
11604 add_ranges_num (int num
, bool maybe_new_sec
)
11606 dw_ranges r
= { NULL
, num
, 0, maybe_new_sec
};
11607 vec_safe_push (ranges_table
, r
);
11608 return vec_safe_length (ranges_table
) - 1;
11611 /* Add a new entry to .debug_ranges corresponding to a block, or a
11612 range terminator if BLOCK is NULL. MAYBE_NEW_SEC is true if
11613 this entry might be in a different section from previous range. */
11615 static unsigned int
11616 add_ranges (const_tree block
, bool maybe_new_sec
)
11618 return add_ranges_num (block
? BLOCK_NUMBER (block
) : 0, maybe_new_sec
);
11621 /* Note that (*rnglist_table)[offset] is either a head of a rnglist
11622 chain, or middle entry of a chain that will be directly referred to. */
11625 note_rnglist_head (unsigned int offset
)
11627 if (dwarf_version
< 5 || (*ranges_table
)[offset
].label
)
11629 (*ranges_table
)[offset
].label
= gen_internal_sym ("LLRL");
11632 /* Add a new entry to .debug_ranges corresponding to a pair of labels.
11633 When using dwarf_split_debug_info, address attributes in dies destined
11634 for the final executable should be direct references--setting the
11635 parameter force_direct ensures this behavior. */
11638 add_ranges_by_labels (dw_die_ref die
, const char *begin
, const char *end
,
11639 bool *added
, bool force_direct
)
11641 unsigned int in_use
= vec_safe_length (ranges_by_label
);
11642 unsigned int offset
;
11643 dw_ranges_by_label rbl
= { begin
, end
};
11644 vec_safe_push (ranges_by_label
, rbl
);
11645 offset
= add_ranges_num (-(int)in_use
- 1, true);
11648 add_AT_range_list (die
, DW_AT_ranges
, offset
, force_direct
);
11650 note_rnglist_head (offset
);
11654 /* Emit .debug_ranges section. */
11657 output_ranges (void)
11660 static const char *const start_fmt
= "Offset %#x";
11661 const char *fmt
= start_fmt
;
11664 switch_to_section (debug_ranges_section
);
11665 ASM_OUTPUT_LABEL (asm_out_file
, ranges_section_label
);
11666 FOR_EACH_VEC_SAFE_ELT (ranges_table
, i
, r
)
11668 int block_num
= r
->num
;
11672 char blabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
11673 char elabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
11675 ASM_GENERATE_INTERNAL_LABEL (blabel
, BLOCK_BEGIN_LABEL
, block_num
);
11676 ASM_GENERATE_INTERNAL_LABEL (elabel
, BLOCK_END_LABEL
, block_num
);
11678 /* If all code is in the text section, then the compilation
11679 unit base address defaults to DW_AT_low_pc, which is the
11680 base of the text section. */
11681 if (!have_multiple_function_sections
)
11683 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, blabel
,
11684 text_section_label
,
11685 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
11686 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, elabel
,
11687 text_section_label
, NULL
);
11690 /* Otherwise, the compilation unit base address is zero,
11691 which allows us to use absolute addresses, and not worry
11692 about whether the target supports cross-section
11696 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, blabel
,
11697 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
11698 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, elabel
, NULL
);
11704 /* Negative block_num stands for an index into ranges_by_label. */
11705 else if (block_num
< 0)
11707 int lab_idx
= - block_num
- 1;
11709 if (!have_multiple_function_sections
)
11711 gcc_unreachable ();
11713 /* If we ever use add_ranges_by_labels () for a single
11714 function section, all we have to do is to take out
11715 the #if 0 above. */
11716 dw2_asm_output_delta (DWARF2_ADDR_SIZE
,
11717 (*ranges_by_label
)[lab_idx
].begin
,
11718 text_section_label
,
11719 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
11720 dw2_asm_output_delta (DWARF2_ADDR_SIZE
,
11721 (*ranges_by_label
)[lab_idx
].end
,
11722 text_section_label
, NULL
);
11727 dw2_asm_output_addr (DWARF2_ADDR_SIZE
,
11728 (*ranges_by_label
)[lab_idx
].begin
,
11729 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
11730 dw2_asm_output_addr (DWARF2_ADDR_SIZE
,
11731 (*ranges_by_label
)[lab_idx
].end
,
11737 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
11738 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
11744 /* Non-zero if .debug_line_str should be used for .debug_line section
11745 strings or strings that are likely shareable with those. */
11746 #define DWARF5_USE_DEBUG_LINE_STR \
11747 (!DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET \
11748 && (DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) != 0 \
11749 /* FIXME: there is no .debug_line_str.dwo section, \
11750 for -gsplit-dwarf we should use DW_FORM_strx instead. */ \
11751 && !dwarf_split_debug_info)
11753 /* Assign .debug_rnglists indexes. */
11756 index_rnglists (void)
11761 FOR_EACH_VEC_SAFE_ELT (ranges_table
, i
, r
)
11763 r
->idx
= rnglist_idx
++;
11766 /* Emit .debug_rnglists section. */
11769 output_rnglists (unsigned generation
)
11773 char l1
[MAX_ARTIFICIAL_LABEL_BYTES
];
11774 char l2
[MAX_ARTIFICIAL_LABEL_BYTES
];
11775 char basebuf
[MAX_ARTIFICIAL_LABEL_BYTES
];
11777 switch_to_section (debug_ranges_section
);
11778 ASM_OUTPUT_LABEL (asm_out_file
, ranges_section_label
);
11779 /* There are up to 4 unique ranges labels per generation.
11780 See also init_sections_and_labels. */
11781 ASM_GENERATE_INTERNAL_LABEL (l1
, DEBUG_RANGES_SECTION_LABEL
,
11782 2 + generation
* 4);
11783 ASM_GENERATE_INTERNAL_LABEL (l2
, DEBUG_RANGES_SECTION_LABEL
,
11784 3 + generation
* 4);
11785 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
11786 dw2_asm_output_data (4, 0xffffffff,
11787 "Initial length escape value indicating "
11788 "64-bit DWARF extension");
11789 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, l2
, l1
,
11790 "Length of Range Lists");
11791 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
11792 output_dwarf_version ();
11793 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Address Size");
11794 dw2_asm_output_data (1, 0, "Segment Size");
11795 /* Emit the offset table only for -gsplit-dwarf. If we don't care
11796 about relocation sizes and primarily care about the size of .debug*
11797 sections in linked shared libraries and executables, then
11798 the offset table plus corresponding DW_FORM_rnglistx uleb128 indexes
11799 into it are usually larger than just DW_FORM_sec_offset offsets
11800 into the .debug_rnglists section. */
11801 dw2_asm_output_data (4, dwarf_split_debug_info
? rnglist_idx
: 0,
11802 "Offset Entry Count");
11803 if (dwarf_split_debug_info
)
11805 ASM_OUTPUT_LABEL (asm_out_file
, ranges_base_label
);
11806 FOR_EACH_VEC_SAFE_ELT (ranges_table
, i
, r
)
11808 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, r
->label
,
11809 ranges_base_label
, NULL
);
11812 const char *lab
= "";
11813 unsigned int len
= vec_safe_length (ranges_table
);
11814 const char *base
= NULL
;
11815 FOR_EACH_VEC_SAFE_ELT (ranges_table
, i
, r
)
11817 int block_num
= r
->num
;
11821 ASM_OUTPUT_LABEL (asm_out_file
, r
->label
);
11824 if (HAVE_AS_LEB128
&& (r
->label
|| r
->maybe_new_sec
))
11828 char blabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
11829 char elabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
11831 ASM_GENERATE_INTERNAL_LABEL (blabel
, BLOCK_BEGIN_LABEL
, block_num
);
11832 ASM_GENERATE_INTERNAL_LABEL (elabel
, BLOCK_END_LABEL
, block_num
);
11834 if (HAVE_AS_LEB128
)
11836 /* If all code is in the text section, then the compilation
11837 unit base address defaults to DW_AT_low_pc, which is the
11838 base of the text section. */
11839 if (!have_multiple_function_sections
)
11841 dw2_asm_output_data (1, DW_RLE_offset_pair
,
11842 "DW_RLE_offset_pair (%s)", lab
);
11843 dw2_asm_output_delta_uleb128 (blabel
, text_section_label
,
11844 "Range begin address (%s)", lab
);
11845 dw2_asm_output_delta_uleb128 (elabel
, text_section_label
,
11846 "Range end address (%s)", lab
);
11851 dw_ranges
*r2
= NULL
;
11853 r2
= &(*ranges_table
)[i
+ 1];
11856 && r2
->label
== NULL
11857 && !r2
->maybe_new_sec
)
11859 dw2_asm_output_data (1, DW_RLE_base_address
,
11860 "DW_RLE_base_address (%s)", lab
);
11861 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, blabel
,
11862 "Base address (%s)", lab
);
11863 strcpy (basebuf
, blabel
);
11869 dw2_asm_output_data (1, DW_RLE_offset_pair
,
11870 "DW_RLE_offset_pair (%s)", lab
);
11871 dw2_asm_output_delta_uleb128 (blabel
, base
,
11872 "Range begin address (%s)", lab
);
11873 dw2_asm_output_delta_uleb128 (elabel
, base
,
11874 "Range end address (%s)", lab
);
11877 dw2_asm_output_data (1, DW_RLE_start_length
,
11878 "DW_RLE_start_length (%s)", lab
);
11879 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, blabel
,
11880 "Range begin address (%s)", lab
);
11881 dw2_asm_output_delta_uleb128 (elabel
, blabel
,
11882 "Range length (%s)", lab
);
11886 dw2_asm_output_data (1, DW_RLE_start_end
,
11887 "DW_RLE_start_end (%s)", lab
);
11888 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, blabel
,
11889 "Range begin address (%s)", lab
);
11890 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, elabel
,
11891 "Range end address (%s)", lab
);
11895 /* Negative block_num stands for an index into ranges_by_label. */
11896 else if (block_num
< 0)
11898 int lab_idx
= - block_num
- 1;
11899 const char *blabel
= (*ranges_by_label
)[lab_idx
].begin
;
11900 const char *elabel
= (*ranges_by_label
)[lab_idx
].end
;
11902 if (!have_multiple_function_sections
)
11903 gcc_unreachable ();
11904 if (HAVE_AS_LEB128
)
11906 dw2_asm_output_data (1, DW_RLE_start_length
,
11907 "DW_RLE_start_length (%s)", lab
);
11908 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, blabel
,
11909 "Range begin address (%s)", lab
);
11910 dw2_asm_output_delta_uleb128 (elabel
, blabel
,
11911 "Range length (%s)", lab
);
11915 dw2_asm_output_data (1, DW_RLE_start_end
,
11916 "DW_RLE_start_end (%s)", lab
);
11917 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, blabel
,
11918 "Range begin address (%s)", lab
);
11919 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, elabel
,
11920 "Range end address (%s)", lab
);
11924 dw2_asm_output_data (1, DW_RLE_end_of_list
,
11925 "DW_RLE_end_of_list (%s)", lab
);
11927 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
11930 /* Data structure containing information about input files. */
11933 const char *path
; /* Complete file name. */
11934 const char *fname
; /* File name part. */
11935 int length
; /* Length of entire string. */
11936 struct dwarf_file_data
* file_idx
; /* Index in input file table. */
11937 int dir_idx
; /* Index in directory table. */
11940 /* Data structure containing information about directories with source
11944 const char *path
; /* Path including directory name. */
11945 int length
; /* Path length. */
11946 int prefix
; /* Index of directory entry which is a prefix. */
11947 int count
; /* Number of files in this directory. */
11948 int dir_idx
; /* Index of directory used as base. */
11951 /* Callback function for file_info comparison. We sort by looking at
11952 the directories in the path. */
11955 file_info_cmp (const void *p1
, const void *p2
)
11957 const struct file_info
*const s1
= (const struct file_info
*) p1
;
11958 const struct file_info
*const s2
= (const struct file_info
*) p2
;
11959 const unsigned char *cp1
;
11960 const unsigned char *cp2
;
11962 /* Take care of file names without directories. We need to make sure that
11963 we return consistent values to qsort since some will get confused if
11964 we return the same value when identical operands are passed in opposite
11965 orders. So if neither has a directory, return 0 and otherwise return
11966 1 or -1 depending on which one has the directory. We want the one with
11967 the directory to sort after the one without, so all no directory files
11968 are at the start (normally only the compilation unit file). */
11969 if ((s1
->path
== s1
->fname
|| s2
->path
== s2
->fname
))
11970 return (s2
->path
== s2
->fname
) - (s1
->path
== s1
->fname
);
11972 cp1
= (const unsigned char *) s1
->path
;
11973 cp2
= (const unsigned char *) s2
->path
;
11979 /* Reached the end of the first path? If so, handle like above,
11980 but now we want longer directory prefixes before shorter ones. */
11981 if ((cp1
== (const unsigned char *) s1
->fname
)
11982 || (cp2
== (const unsigned char *) s2
->fname
))
11983 return ((cp1
== (const unsigned char *) s1
->fname
)
11984 - (cp2
== (const unsigned char *) s2
->fname
));
11986 /* Character of current path component the same? */
11987 else if (*cp1
!= *cp2
)
11988 return *cp1
- *cp2
;
11992 struct file_name_acquire_data
11994 struct file_info
*files
;
11999 /* Traversal function for the hash table. */
12002 file_name_acquire (dwarf_file_data
**slot
, file_name_acquire_data
*fnad
)
12004 struct dwarf_file_data
*d
= *slot
;
12005 struct file_info
*fi
;
12008 gcc_assert (fnad
->max_files
>= d
->emitted_number
);
12010 if (! d
->emitted_number
)
12013 gcc_assert (fnad
->max_files
!= fnad
->used_files
);
12015 fi
= fnad
->files
+ fnad
->used_files
++;
12017 /* Skip all leading "./". */
12019 while (f
[0] == '.' && IS_DIR_SEPARATOR (f
[1]))
12022 /* Create a new array entry. */
12024 fi
->length
= strlen (f
);
12027 /* Search for the file name part. */
12028 f
= strrchr (f
, DIR_SEPARATOR
);
12029 #if defined (DIR_SEPARATOR_2)
12031 char *g
= strrchr (fi
->path
, DIR_SEPARATOR_2
);
12035 if (f
== NULL
|| f
< g
)
12041 fi
->fname
= f
== NULL
? fi
->path
: f
+ 1;
12045 /* Helper function for output_file_names. Emit a FORM encoded
12046 string STR, with assembly comment start ENTRY_KIND and
12050 output_line_string (enum dwarf_form form
, const char *str
,
12051 const char *entry_kind
, unsigned int idx
)
12055 case DW_FORM_string
:
12056 dw2_asm_output_nstring (str
, -1, "%s: %#x", entry_kind
, idx
);
12058 case DW_FORM_line_strp
:
12059 if (!debug_line_str_hash
)
12060 debug_line_str_hash
12061 = hash_table
<indirect_string_hasher
>::create_ggc (10);
12063 struct indirect_string_node
*node
;
12064 node
= find_AT_string_in_table (str
, debug_line_str_hash
);
12065 set_indirect_string (node
);
12067 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, node
->label
,
12068 debug_line_str_section
, "%s: %#x: \"%s\"",
12069 entry_kind
, 0, node
->str
);
12072 gcc_unreachable ();
12076 /* Output the directory table and the file name table. We try to minimize
12077 the total amount of memory needed. A heuristic is used to avoid large
12078 slowdowns with many input files. */
12081 output_file_names (void)
12083 struct file_name_acquire_data fnad
;
12085 struct file_info
*files
;
12086 struct dir_info
*dirs
;
12094 if (!last_emitted_file
)
12096 if (dwarf_version
>= 5)
12098 dw2_asm_output_data (1, 0, "Directory entry format count");
12099 dw2_asm_output_data_uleb128 (0, "Directories count");
12100 dw2_asm_output_data (1, 0, "File name entry format count");
12101 dw2_asm_output_data_uleb128 (0, "File names count");
12105 dw2_asm_output_data (1, 0, "End directory table");
12106 dw2_asm_output_data (1, 0, "End file name table");
12111 numfiles
= last_emitted_file
->emitted_number
;
12113 /* Allocate the various arrays we need. */
12114 files
= XALLOCAVEC (struct file_info
, numfiles
);
12115 dirs
= XALLOCAVEC (struct dir_info
, numfiles
);
12117 fnad
.files
= files
;
12118 fnad
.used_files
= 0;
12119 fnad
.max_files
= numfiles
;
12120 file_table
->traverse
<file_name_acquire_data
*, file_name_acquire
> (&fnad
);
12121 gcc_assert (fnad
.used_files
== fnad
.max_files
);
12123 qsort (files
, numfiles
, sizeof (files
[0]), file_info_cmp
);
12125 /* Find all the different directories used. */
12126 dirs
[0].path
= files
[0].path
;
12127 dirs
[0].length
= files
[0].fname
- files
[0].path
;
12128 dirs
[0].prefix
= -1;
12130 dirs
[0].dir_idx
= 0;
12131 files
[0].dir_idx
= 0;
12134 for (i
= 1; i
< numfiles
; i
++)
12135 if (files
[i
].fname
- files
[i
].path
== dirs
[ndirs
- 1].length
12136 && memcmp (dirs
[ndirs
- 1].path
, files
[i
].path
,
12137 dirs
[ndirs
- 1].length
) == 0)
12139 /* Same directory as last entry. */
12140 files
[i
].dir_idx
= ndirs
- 1;
12141 ++dirs
[ndirs
- 1].count
;
12147 /* This is a new directory. */
12148 dirs
[ndirs
].path
= files
[i
].path
;
12149 dirs
[ndirs
].length
= files
[i
].fname
- files
[i
].path
;
12150 dirs
[ndirs
].count
= 1;
12151 dirs
[ndirs
].dir_idx
= ndirs
;
12152 files
[i
].dir_idx
= ndirs
;
12154 /* Search for a prefix. */
12155 dirs
[ndirs
].prefix
= -1;
12156 for (j
= 0; j
< ndirs
; j
++)
12157 if (dirs
[j
].length
< dirs
[ndirs
].length
12158 && dirs
[j
].length
> 1
12159 && (dirs
[ndirs
].prefix
== -1
12160 || dirs
[j
].length
> dirs
[dirs
[ndirs
].prefix
].length
)
12161 && memcmp (dirs
[j
].path
, dirs
[ndirs
].path
, dirs
[j
].length
) == 0)
12162 dirs
[ndirs
].prefix
= j
;
12167 /* Now to the actual work. We have to find a subset of the directories which
12168 allow expressing the file name using references to the directory table
12169 with the least amount of characters. We do not do an exhaustive search
12170 where we would have to check out every combination of every single
12171 possible prefix. Instead we use a heuristic which provides nearly optimal
12172 results in most cases and never is much off. */
12173 saved
= XALLOCAVEC (int, ndirs
);
12174 savehere
= XALLOCAVEC (int, ndirs
);
12176 memset (saved
, '\0', ndirs
* sizeof (saved
[0]));
12177 for (i
= 0; i
< ndirs
; i
++)
12182 /* We can always save some space for the current directory. But this
12183 does not mean it will be enough to justify adding the directory. */
12184 savehere
[i
] = dirs
[i
].length
;
12185 total
= (savehere
[i
] - saved
[i
]) * dirs
[i
].count
;
12187 for (j
= i
+ 1; j
< ndirs
; j
++)
12190 if (saved
[j
] < dirs
[i
].length
)
12192 /* Determine whether the dirs[i] path is a prefix of the
12196 k
= dirs
[j
].prefix
;
12197 while (k
!= -1 && k
!= (int) i
)
12198 k
= dirs
[k
].prefix
;
12202 /* Yes it is. We can possibly save some memory by
12203 writing the filenames in dirs[j] relative to
12205 savehere
[j
] = dirs
[i
].length
;
12206 total
+= (savehere
[j
] - saved
[j
]) * dirs
[j
].count
;
12211 /* Check whether we can save enough to justify adding the dirs[i]
12213 if (total
> dirs
[i
].length
+ 1)
12215 /* It's worthwhile adding. */
12216 for (j
= i
; j
< ndirs
; j
++)
12217 if (savehere
[j
] > 0)
12219 /* Remember how much we saved for this directory so far. */
12220 saved
[j
] = savehere
[j
];
12222 /* Remember the prefix directory. */
12223 dirs
[j
].dir_idx
= i
;
12228 /* Emit the directory name table. */
12229 idx_offset
= dirs
[0].length
> 0 ? 1 : 0;
12230 enum dwarf_form str_form
= DW_FORM_string
;
12231 enum dwarf_form idx_form
= DW_FORM_udata
;
12232 if (dwarf_version
>= 5)
12234 const char *comp_dir
= comp_dir_string ();
12235 if (comp_dir
== NULL
)
12237 dw2_asm_output_data (1, 1, "Directory entry format count");
12238 if (DWARF5_USE_DEBUG_LINE_STR
)
12239 str_form
= DW_FORM_line_strp
;
12240 dw2_asm_output_data_uleb128 (DW_LNCT_path
, "DW_LNCT_path");
12241 dw2_asm_output_data_uleb128 (str_form
, "%s",
12242 get_DW_FORM_name (str_form
));
12243 dw2_asm_output_data_uleb128 (ndirs
+ idx_offset
, "Directories count");
12244 if (str_form
== DW_FORM_string
)
12246 dw2_asm_output_nstring (comp_dir
, -1, "Directory Entry: %#x", 0);
12247 for (i
= 1 - idx_offset
; i
< ndirs
; i
++)
12248 dw2_asm_output_nstring (dirs
[i
].path
,
12250 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
,
12251 "Directory Entry: %#x", i
+ idx_offset
);
12255 output_line_string (str_form
, comp_dir
, "Directory Entry", 0);
12256 for (i
= 1 - idx_offset
; i
< ndirs
; i
++)
12259 = ggc_alloc_string (dirs
[i
].path
,
12261 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
);
12262 output_line_string (str_form
, str
, "Directory Entry",
12263 (unsigned) i
+ idx_offset
);
12269 for (i
= 1 - idx_offset
; i
< ndirs
; i
++)
12270 dw2_asm_output_nstring (dirs
[i
].path
,
12272 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
,
12273 "Directory Entry: %#x", i
+ idx_offset
);
12275 dw2_asm_output_data (1, 0, "End directory table");
12278 /* We have to emit them in the order of emitted_number since that's
12279 used in the debug info generation. To do this efficiently we
12280 generate a back-mapping of the indices first. */
12281 backmap
= XALLOCAVEC (int, numfiles
);
12282 for (i
= 0; i
< numfiles
; i
++)
12283 backmap
[files
[i
].file_idx
->emitted_number
- 1] = i
;
12285 if (dwarf_version
>= 5)
12287 const char *filename0
= get_AT_string (comp_unit_die (), DW_AT_name
);
12288 if (filename0
== NULL
)
12290 /* DW_LNCT_directory_index can use DW_FORM_udata, DW_FORM_data1 and
12291 DW_FORM_data2. Choose one based on the number of directories
12292 and how much space would they occupy in each encoding.
12293 If we have at most 256 directories, all indexes fit into
12294 a single byte, so DW_FORM_data1 is most compact (if there
12295 are at most 128 directories, DW_FORM_udata would be as
12296 compact as that, but not shorter and slower to decode). */
12297 if (ndirs
+ idx_offset
<= 256)
12298 idx_form
= DW_FORM_data1
;
12299 /* If there are more than 65536 directories, we have to use
12300 DW_FORM_udata, DW_FORM_data2 can't refer to them.
12301 Otherwise, compute what space would occupy if all the indexes
12302 used DW_FORM_udata - sum - and compare that to how large would
12303 be DW_FORM_data2 encoding, and pick the more efficient one. */
12304 else if (ndirs
+ idx_offset
<= 65536)
12306 unsigned HOST_WIDE_INT sum
= 1;
12307 for (i
= 0; i
< numfiles
; i
++)
12309 int file_idx
= backmap
[i
];
12310 int dir_idx
= dirs
[files
[file_idx
].dir_idx
].dir_idx
;
12311 sum
+= size_of_uleb128 (dir_idx
);
12313 if (sum
>= HOST_WIDE_INT_UC (2) * (numfiles
+ 1))
12314 idx_form
= DW_FORM_data2
;
12316 #ifdef VMS_DEBUGGING_INFO
12317 dw2_asm_output_data (1, 4, "File name entry format count");
12319 dw2_asm_output_data (1, 2, "File name entry format count");
12321 dw2_asm_output_data_uleb128 (DW_LNCT_path
, "DW_LNCT_path");
12322 dw2_asm_output_data_uleb128 (str_form
, "%s",
12323 get_DW_FORM_name (str_form
));
12324 dw2_asm_output_data_uleb128 (DW_LNCT_directory_index
,
12325 "DW_LNCT_directory_index");
12326 dw2_asm_output_data_uleb128 (idx_form
, "%s",
12327 get_DW_FORM_name (idx_form
));
12328 #ifdef VMS_DEBUGGING_INFO
12329 dw2_asm_output_data_uleb128 (DW_LNCT_timestamp
, "DW_LNCT_timestamp");
12330 dw2_asm_output_data_uleb128 (DW_FORM_udata
, "DW_FORM_udata");
12331 dw2_asm_output_data_uleb128 (DW_LNCT_size
, "DW_LNCT_size");
12332 dw2_asm_output_data_uleb128 (DW_FORM_udata
, "DW_FORM_udata");
12334 dw2_asm_output_data_uleb128 (numfiles
+ 1, "File names count");
12336 output_line_string (str_form
, filename0
, "File Entry", 0);
12338 /* Include directory index. */
12339 if (idx_form
!= DW_FORM_udata
)
12340 dw2_asm_output_data (idx_form
== DW_FORM_data1
? 1 : 2,
12343 dw2_asm_output_data_uleb128 (0, NULL
);
12345 #ifdef VMS_DEBUGGING_INFO
12346 dw2_asm_output_data_uleb128 (0, NULL
);
12347 dw2_asm_output_data_uleb128 (0, NULL
);
12351 /* Now write all the file names. */
12352 for (i
= 0; i
< numfiles
; i
++)
12354 int file_idx
= backmap
[i
];
12355 int dir_idx
= dirs
[files
[file_idx
].dir_idx
].dir_idx
;
12357 #ifdef VMS_DEBUGGING_INFO
12358 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
12360 /* Setting these fields can lead to debugger miscomparisons,
12361 but VMS Debug requires them to be set correctly. */
12366 int maxfilelen
= (strlen (files
[file_idx
].path
)
12367 + dirs
[dir_idx
].length
12368 + MAX_VMS_VERSION_LEN
+ 1);
12369 char *filebuf
= XALLOCAVEC (char, maxfilelen
);
12371 vms_file_stats_name (files
[file_idx
].path
, 0, 0, 0, &ver
);
12372 snprintf (filebuf
, maxfilelen
, "%s;%d",
12373 files
[file_idx
].path
+ dirs
[dir_idx
].length
, ver
);
12375 output_line_string (str_form
, filebuf
, "File Entry", (unsigned) i
+ 1);
12377 /* Include directory index. */
12378 if (dwarf_version
>= 5 && idx_form
!= DW_FORM_udata
)
12379 dw2_asm_output_data (idx_form
== DW_FORM_data1
? 1 : 2,
12380 dir_idx
+ idx_offset
, NULL
);
12382 dw2_asm_output_data_uleb128 (dir_idx
+ idx_offset
, NULL
);
12384 /* Modification time. */
12385 dw2_asm_output_data_uleb128 ((vms_file_stats_name (files
[file_idx
].path
,
12386 &cdt
, 0, 0, 0) == 0)
12389 /* File length in bytes. */
12390 dw2_asm_output_data_uleb128 ((vms_file_stats_name (files
[file_idx
].path
,
12391 0, &siz
, 0, 0) == 0)
12394 output_line_string (str_form
,
12395 files
[file_idx
].path
+ dirs
[dir_idx
].length
,
12396 "File Entry", (unsigned) i
+ 1);
12398 /* Include directory index. */
12399 if (dwarf_version
>= 5 && idx_form
!= DW_FORM_udata
)
12400 dw2_asm_output_data (idx_form
== DW_FORM_data1
? 1 : 2,
12401 dir_idx
+ idx_offset
, NULL
);
12403 dw2_asm_output_data_uleb128 (dir_idx
+ idx_offset
, NULL
);
12405 if (dwarf_version
>= 5)
12408 /* Modification time. */
12409 dw2_asm_output_data_uleb128 (0, NULL
);
12411 /* File length in bytes. */
12412 dw2_asm_output_data_uleb128 (0, NULL
);
12413 #endif /* VMS_DEBUGGING_INFO */
12416 if (dwarf_version
< 5)
12417 dw2_asm_output_data (1, 0, "End file name table");
12421 /* Output one line number table into the .debug_line section. */
12424 output_one_line_info_table (dw_line_info_table
*table
)
12426 char line_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
12427 unsigned int current_line
= 1;
12428 bool current_is_stmt
= DWARF_LINE_DEFAULT_IS_STMT_START
;
12429 dw_line_info_entry
*ent
, *prev_addr
;
12435 FOR_EACH_VEC_SAFE_ELT (table
->entries
, i
, ent
)
12437 switch (ent
->opcode
)
12439 case LI_set_address
:
12440 /* ??? Unfortunately, we have little choice here currently, and
12441 must always use the most general form. GCC does not know the
12442 address delta itself, so we can't use DW_LNS_advance_pc. Many
12443 ports do have length attributes which will give an upper bound
12444 on the address range. We could perhaps use length attributes
12445 to determine when it is safe to use DW_LNS_fixed_advance_pc. */
12446 ASM_GENERATE_INTERNAL_LABEL (line_label
, LINE_CODE_LABEL
, ent
->val
);
12450 /* This can handle any delta. This takes
12451 4+DWARF2_ADDR_SIZE bytes. */
12452 dw2_asm_output_data (1, 0, "set address %s%s", line_label
,
12453 debug_variable_location_views
12454 ? ", reset view to 0" : "");
12455 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
12456 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
12457 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
12462 case LI_adv_address
:
12464 ASM_GENERATE_INTERNAL_LABEL (line_label
, LINE_CODE_LABEL
, ent
->val
);
12465 char prev_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
12466 ASM_GENERATE_INTERNAL_LABEL (prev_label
, LINE_CODE_LABEL
, prev_addr
->val
);
12470 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
, "fixed advance PC, increment view to %i", view
);
12471 dw2_asm_output_delta (2, line_label
, prev_label
,
12472 "from %s to %s", prev_label
, line_label
);
12479 if (ent
->val
== current_line
)
12481 /* We still need to start a new row, so output a copy insn. */
12482 dw2_asm_output_data (1, DW_LNS_copy
,
12483 "copy line %u", current_line
);
12487 int line_offset
= ent
->val
- current_line
;
12488 int line_delta
= line_offset
- DWARF_LINE_BASE
;
12490 current_line
= ent
->val
;
12491 if (line_delta
>= 0 && line_delta
< (DWARF_LINE_RANGE
- 1))
12493 /* This can handle deltas from -10 to 234, using the current
12494 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
12495 This takes 1 byte. */
12496 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE
+ line_delta
,
12497 "line %u", current_line
);
12501 /* This can handle any delta. This takes at least 4 bytes,
12502 depending on the value being encoded. */
12503 dw2_asm_output_data (1, DW_LNS_advance_line
,
12504 "advance to line %u", current_line
);
12505 dw2_asm_output_data_sleb128 (line_offset
, NULL
);
12506 dw2_asm_output_data (1, DW_LNS_copy
, NULL
);
12512 dw2_asm_output_data (1, DW_LNS_set_file
, "set file %u", ent
->val
);
12513 dw2_asm_output_data_uleb128 (ent
->val
, "%u", ent
->val
);
12516 case LI_set_column
:
12517 dw2_asm_output_data (1, DW_LNS_set_column
, "column %u", ent
->val
);
12518 dw2_asm_output_data_uleb128 (ent
->val
, "%u", ent
->val
);
12521 case LI_negate_stmt
:
12522 current_is_stmt
= !current_is_stmt
;
12523 dw2_asm_output_data (1, DW_LNS_negate_stmt
,
12524 "is_stmt %d", current_is_stmt
);
12527 case LI_set_prologue_end
:
12528 dw2_asm_output_data (1, DW_LNS_set_prologue_end
,
12529 "set prologue end");
12532 case LI_set_epilogue_begin
:
12533 dw2_asm_output_data (1, DW_LNS_set_epilogue_begin
,
12534 "set epilogue begin");
12537 case LI_set_discriminator
:
12538 dw2_asm_output_data (1, 0, "discriminator %u", ent
->val
);
12539 dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent
->val
), NULL
);
12540 dw2_asm_output_data (1, DW_LNE_set_discriminator
, NULL
);
12541 dw2_asm_output_data_uleb128 (ent
->val
, NULL
);
12546 /* Emit debug info for the address of the end of the table. */
12547 dw2_asm_output_data (1, 0, "set address %s", table
->end_label
);
12548 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
12549 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
12550 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, table
->end_label
, NULL
);
12552 dw2_asm_output_data (1, 0, "end sequence");
12553 dw2_asm_output_data_uleb128 (1, NULL
);
12554 dw2_asm_output_data (1, DW_LNE_end_sequence
, NULL
);
12557 /* Output the source line number correspondence information. This
12558 information goes into the .debug_line section. */
12561 output_line_info (bool prologue_only
)
12563 static unsigned int generation
;
12564 char l1
[MAX_ARTIFICIAL_LABEL_BYTES
], l2
[MAX_ARTIFICIAL_LABEL_BYTES
];
12565 char p1
[MAX_ARTIFICIAL_LABEL_BYTES
], p2
[MAX_ARTIFICIAL_LABEL_BYTES
];
12566 bool saw_one
= false;
12569 ASM_GENERATE_INTERNAL_LABEL (l1
, LINE_NUMBER_BEGIN_LABEL
, generation
);
12570 ASM_GENERATE_INTERNAL_LABEL (l2
, LINE_NUMBER_END_LABEL
, generation
);
12571 ASM_GENERATE_INTERNAL_LABEL (p1
, LN_PROLOG_AS_LABEL
, generation
);
12572 ASM_GENERATE_INTERNAL_LABEL (p2
, LN_PROLOG_END_LABEL
, generation
++);
12574 if (!XCOFF_DEBUGGING_INFO
)
12576 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
12577 dw2_asm_output_data (4, 0xffffffff,
12578 "Initial length escape value indicating 64-bit DWARF extension");
12579 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, l2
, l1
,
12580 "Length of Source Line Info");
12583 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
12585 output_dwarf_version ();
12586 if (dwarf_version
>= 5)
12588 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Address Size");
12589 dw2_asm_output_data (1, 0, "Segment Size");
12591 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, p2
, p1
, "Prolog Length");
12592 ASM_OUTPUT_LABEL (asm_out_file
, p1
);
12594 /* Define the architecture-dependent minimum instruction length (in bytes).
12595 In this implementation of DWARF, this field is used for information
12596 purposes only. Since GCC generates assembly language, we have no
12597 a priori knowledge of how many instruction bytes are generated for each
12598 source line, and therefore can use only the DW_LNE_set_address and
12599 DW_LNS_fixed_advance_pc line information commands. Accordingly, we fix
12600 this as '1', which is "correct enough" for all architectures,
12601 and don't let the target override. */
12602 dw2_asm_output_data (1, 1, "Minimum Instruction Length");
12604 if (dwarf_version
>= 4)
12605 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
,
12606 "Maximum Operations Per Instruction");
12607 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START
,
12608 "Default is_stmt_start flag");
12609 dw2_asm_output_data (1, DWARF_LINE_BASE
,
12610 "Line Base Value (Special Opcodes)");
12611 dw2_asm_output_data (1, DWARF_LINE_RANGE
,
12612 "Line Range Value (Special Opcodes)");
12613 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE
,
12614 "Special Opcode Base");
12616 for (opc
= 1; opc
< DWARF_LINE_OPCODE_BASE
; opc
++)
12621 case DW_LNS_advance_pc
:
12622 case DW_LNS_advance_line
:
12623 case DW_LNS_set_file
:
12624 case DW_LNS_set_column
:
12625 case DW_LNS_fixed_advance_pc
:
12626 case DW_LNS_set_isa
:
12634 dw2_asm_output_data (1, n_op_args
, "opcode: %#x has %d args",
12638 /* Write out the information about the files we use. */
12639 output_file_names ();
12640 ASM_OUTPUT_LABEL (asm_out_file
, p2
);
12643 /* Output the marker for the end of the line number info. */
12644 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
12648 if (separate_line_info
)
12650 dw_line_info_table
*table
;
12653 FOR_EACH_VEC_ELT (*separate_line_info
, i
, table
)
12656 output_one_line_info_table (table
);
12660 if (cold_text_section_line_info
&& cold_text_section_line_info
->in_use
)
12662 output_one_line_info_table (cold_text_section_line_info
);
12666 /* ??? Some Darwin linkers crash on a .debug_line section with no
12667 sequences. Further, merely a DW_LNE_end_sequence entry is not
12668 sufficient -- the address column must also be initialized.
12669 Make sure to output at least one set_address/end_sequence pair,
12670 choosing .text since that section is always present. */
12671 if (text_section_line_info
->in_use
|| !saw_one
)
12672 output_one_line_info_table (text_section_line_info
);
12674 /* Output the marker for the end of the line number info. */
12675 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
12678 /* Return true if DW_AT_endianity should be emitted according to REVERSE. */
12681 need_endianity_attribute_p (bool reverse
)
12683 return reverse
&& (dwarf_version
>= 3 || !dwarf_strict
);
12686 /* Given a pointer to a tree node for some base type, return a pointer to
12687 a DIE that describes the given type. REVERSE is true if the type is
12688 to be interpreted in the reverse storage order wrt the target order.
12690 This routine must only be called for GCC type nodes that correspond to
12691 Dwarf base (fundamental) types. */
12694 base_type_die (tree type
, bool reverse
)
12696 dw_die_ref base_type_result
;
12697 enum dwarf_type encoding
;
12698 bool fpt_used
= false;
12699 struct fixed_point_type_info fpt_info
;
12700 tree type_bias
= NULL_TREE
;
12702 /* If this is a subtype that should not be emitted as a subrange type,
12703 use the base type. See subrange_type_for_debug_p. */
12704 if (TREE_CODE (type
) == INTEGER_TYPE
&& TREE_TYPE (type
) != NULL_TREE
)
12705 type
= TREE_TYPE (type
);
12707 switch (TREE_CODE (type
))
12710 if ((dwarf_version
>= 4 || !dwarf_strict
)
12711 && TYPE_NAME (type
)
12712 && TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
12713 && DECL_IS_BUILTIN (TYPE_NAME (type
))
12714 && DECL_NAME (TYPE_NAME (type
)))
12716 const char *name
= IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type
)));
12717 if (strcmp (name
, "char16_t") == 0
12718 || strcmp (name
, "char32_t") == 0)
12720 encoding
= DW_ATE_UTF
;
12724 if ((dwarf_version
>= 3 || !dwarf_strict
)
12725 && lang_hooks
.types
.get_fixed_point_type_info
)
12727 memset (&fpt_info
, 0, sizeof (fpt_info
));
12728 if (lang_hooks
.types
.get_fixed_point_type_info (type
, &fpt_info
))
12731 encoding
= ((TYPE_UNSIGNED (type
))
12732 ? DW_ATE_unsigned_fixed
12733 : DW_ATE_signed_fixed
);
12737 if (TYPE_STRING_FLAG (type
))
12739 if (TYPE_UNSIGNED (type
))
12740 encoding
= DW_ATE_unsigned_char
;
12742 encoding
= DW_ATE_signed_char
;
12744 else if (TYPE_UNSIGNED (type
))
12745 encoding
= DW_ATE_unsigned
;
12747 encoding
= DW_ATE_signed
;
12750 && lang_hooks
.types
.get_type_bias
)
12751 type_bias
= lang_hooks
.types
.get_type_bias (type
);
12755 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type
)))
12757 if (dwarf_version
>= 3 || !dwarf_strict
)
12758 encoding
= DW_ATE_decimal_float
;
12760 encoding
= DW_ATE_lo_user
;
12763 encoding
= DW_ATE_float
;
12766 case FIXED_POINT_TYPE
:
12767 if (!(dwarf_version
>= 3 || !dwarf_strict
))
12768 encoding
= DW_ATE_lo_user
;
12769 else if (TYPE_UNSIGNED (type
))
12770 encoding
= DW_ATE_unsigned_fixed
;
12772 encoding
= DW_ATE_signed_fixed
;
12775 /* Dwarf2 doesn't know anything about complex ints, so use
12776 a user defined type for it. */
12778 if (TREE_CODE (TREE_TYPE (type
)) == REAL_TYPE
)
12779 encoding
= DW_ATE_complex_float
;
12781 encoding
= DW_ATE_lo_user
;
12785 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
12786 encoding
= DW_ATE_boolean
;
12790 /* No other TREE_CODEs are Dwarf fundamental types. */
12791 gcc_unreachable ();
12794 base_type_result
= new_die_raw (DW_TAG_base_type
);
12796 add_AT_unsigned (base_type_result
, DW_AT_byte_size
,
12797 int_size_in_bytes (type
));
12798 add_AT_unsigned (base_type_result
, DW_AT_encoding
, encoding
);
12800 if (need_endianity_attribute_p (reverse
))
12801 add_AT_unsigned (base_type_result
, DW_AT_endianity
,
12802 BYTES_BIG_ENDIAN
? DW_END_little
: DW_END_big
);
12804 add_alignment_attribute (base_type_result
, type
);
12808 switch (fpt_info
.scale_factor_kind
)
12810 case fixed_point_scale_factor_binary
:
12811 add_AT_int (base_type_result
, DW_AT_binary_scale
,
12812 fpt_info
.scale_factor
.binary
);
12815 case fixed_point_scale_factor_decimal
:
12816 add_AT_int (base_type_result
, DW_AT_decimal_scale
,
12817 fpt_info
.scale_factor
.decimal
);
12820 case fixed_point_scale_factor_arbitrary
:
12821 /* Arbitrary scale factors cannot be described in standard DWARF,
12825 /* Describe the scale factor as a rational constant. */
12826 const dw_die_ref scale_factor
12827 = new_die (DW_TAG_constant
, comp_unit_die (), type
);
12829 add_AT_unsigned (scale_factor
, DW_AT_GNU_numerator
,
12830 fpt_info
.scale_factor
.arbitrary
.numerator
);
12831 add_AT_int (scale_factor
, DW_AT_GNU_denominator
,
12832 fpt_info
.scale_factor
.arbitrary
.denominator
);
12834 add_AT_die_ref (base_type_result
, DW_AT_small
, scale_factor
);
12839 gcc_unreachable ();
12844 add_scalar_info (base_type_result
, DW_AT_GNU_bias
, type_bias
,
12845 dw_scalar_form_constant
12846 | dw_scalar_form_exprloc
12847 | dw_scalar_form_reference
,
12850 return base_type_result
;
12853 /* A C++ function with deduced return type can have a TEMPLATE_TYPE_PARM
12854 named 'auto' in its type: return true for it, false otherwise. */
12857 is_cxx_auto (tree type
)
12861 tree name
= TYPE_IDENTIFIER (type
);
12862 if (name
== get_identifier ("auto")
12863 || name
== get_identifier ("decltype(auto)"))
12869 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12870 given input type is a Dwarf "fundamental" type. Otherwise return null. */
12873 is_base_type (tree type
)
12875 switch (TREE_CODE (type
))
12879 case FIXED_POINT_TYPE
:
12888 case QUAL_UNION_TYPE
:
12889 case ENUMERAL_TYPE
:
12890 case FUNCTION_TYPE
:
12893 case REFERENCE_TYPE
:
12901 if (is_cxx_auto (type
))
12903 gcc_unreachable ();
12909 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12910 node, return the size in bits for the type if it is a constant, or else
12911 return the alignment for the type if the type's size is not constant, or
12912 else return BITS_PER_WORD if the type actually turns out to be an
12913 ERROR_MARK node. */
12915 static inline unsigned HOST_WIDE_INT
12916 simple_type_size_in_bits (const_tree type
)
12918 if (TREE_CODE (type
) == ERROR_MARK
)
12919 return BITS_PER_WORD
;
12920 else if (TYPE_SIZE (type
) == NULL_TREE
)
12922 else if (tree_fits_uhwi_p (TYPE_SIZE (type
)))
12923 return tree_to_uhwi (TYPE_SIZE (type
));
12925 return TYPE_ALIGN (type
);
12928 /* Similarly, but return an offset_int instead of UHWI. */
12930 static inline offset_int
12931 offset_int_type_size_in_bits (const_tree type
)
12933 if (TREE_CODE (type
) == ERROR_MARK
)
12934 return BITS_PER_WORD
;
12935 else if (TYPE_SIZE (type
) == NULL_TREE
)
12937 else if (TREE_CODE (TYPE_SIZE (type
)) == INTEGER_CST
)
12938 return wi::to_offset (TYPE_SIZE (type
));
12940 return TYPE_ALIGN (type
);
12943 /* Given a pointer to a tree node for a subrange type, return a pointer
12944 to a DIE that describes the given type. */
12947 subrange_type_die (tree type
, tree low
, tree high
, tree bias
,
12948 dw_die_ref context_die
)
12950 dw_die_ref subrange_die
;
12951 const HOST_WIDE_INT size_in_bytes
= int_size_in_bytes (type
);
12953 if (context_die
== NULL
)
12954 context_die
= comp_unit_die ();
12956 subrange_die
= new_die (DW_TAG_subrange_type
, context_die
, type
);
12958 if (int_size_in_bytes (TREE_TYPE (type
)) != size_in_bytes
)
12960 /* The size of the subrange type and its base type do not match,
12961 so we need to generate a size attribute for the subrange type. */
12962 add_AT_unsigned (subrange_die
, DW_AT_byte_size
, size_in_bytes
);
12965 add_alignment_attribute (subrange_die
, type
);
12968 add_bound_info (subrange_die
, DW_AT_lower_bound
, low
, NULL
);
12970 add_bound_info (subrange_die
, DW_AT_upper_bound
, high
, NULL
);
12971 if (bias
&& !dwarf_strict
)
12972 add_scalar_info (subrange_die
, DW_AT_GNU_bias
, bias
,
12973 dw_scalar_form_constant
12974 | dw_scalar_form_exprloc
12975 | dw_scalar_form_reference
,
12978 return subrange_die
;
12981 /* Returns the (const and/or volatile) cv_qualifiers associated with
12982 the decl node. This will normally be augmented with the
12983 cv_qualifiers of the underlying type in add_type_attribute. */
12986 decl_quals (const_tree decl
)
12988 return ((TREE_READONLY (decl
)
12989 /* The C++ front-end correctly marks reference-typed
12990 variables as readonly, but from a language (and debug
12991 info) standpoint they are not const-qualified. */
12992 && TREE_CODE (TREE_TYPE (decl
)) != REFERENCE_TYPE
12993 ? TYPE_QUAL_CONST
: TYPE_UNQUALIFIED
)
12994 | (TREE_THIS_VOLATILE (decl
)
12995 ? TYPE_QUAL_VOLATILE
: TYPE_UNQUALIFIED
));
12998 /* Determine the TYPE whose qualifiers match the largest strict subset
12999 of the given TYPE_QUALS, and return its qualifiers. Ignore all
13000 qualifiers outside QUAL_MASK. */
13003 get_nearest_type_subqualifiers (tree type
, int type_quals
, int qual_mask
)
13006 int best_rank
= 0, best_qual
= 0, max_rank
;
13008 type_quals
&= qual_mask
;
13009 max_rank
= popcount_hwi (type_quals
) - 1;
13011 for (t
= TYPE_MAIN_VARIANT (type
); t
&& best_rank
< max_rank
;
13012 t
= TYPE_NEXT_VARIANT (t
))
13014 int q
= TYPE_QUALS (t
) & qual_mask
;
13016 if ((q
& type_quals
) == q
&& q
!= type_quals
13017 && check_base_type (t
, type
))
13019 int rank
= popcount_hwi (q
);
13021 if (rank
> best_rank
)
13032 struct dwarf_qual_info_t
{ int q
; enum dwarf_tag t
; };
13033 static const dwarf_qual_info_t dwarf_qual_info
[] =
13035 { TYPE_QUAL_CONST
, DW_TAG_const_type
},
13036 { TYPE_QUAL_VOLATILE
, DW_TAG_volatile_type
},
13037 { TYPE_QUAL_RESTRICT
, DW_TAG_restrict_type
},
13038 { TYPE_QUAL_ATOMIC
, DW_TAG_atomic_type
}
13040 static const unsigned int dwarf_qual_info_size
13041 = sizeof (dwarf_qual_info
) / sizeof (dwarf_qual_info
[0]);
13043 /* If DIE is a qualified DIE of some base DIE with the same parent,
13044 return the base DIE, otherwise return NULL. Set MASK to the
13045 qualifiers added compared to the returned DIE. */
13048 qualified_die_p (dw_die_ref die
, int *mask
, unsigned int depth
)
13051 for (i
= 0; i
< dwarf_qual_info_size
; i
++)
13052 if (die
->die_tag
== dwarf_qual_info
[i
].t
)
13054 if (i
== dwarf_qual_info_size
)
13056 if (vec_safe_length (die
->die_attr
) != 1)
13058 dw_die_ref type
= get_AT_ref (die
, DW_AT_type
);
13059 if (type
== NULL
|| type
->die_parent
!= die
->die_parent
)
13061 *mask
|= dwarf_qual_info
[i
].q
;
13064 dw_die_ref ret
= qualified_die_p (type
, mask
, depth
- 1);
13071 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
13072 entry that chains the modifiers specified by CV_QUALS in front of the
13073 given type. REVERSE is true if the type is to be interpreted in the
13074 reverse storage order wrt the target order. */
13077 modified_type_die (tree type
, int cv_quals
, bool reverse
,
13078 dw_die_ref context_die
)
13080 enum tree_code code
= TREE_CODE (type
);
13081 dw_die_ref mod_type_die
;
13082 dw_die_ref sub_die
= NULL
;
13083 tree item_type
= NULL
;
13084 tree qualified_type
;
13085 tree name
, low
, high
;
13086 dw_die_ref mod_scope
;
13087 /* Only these cv-qualifiers are currently handled. */
13088 const int cv_qual_mask
= (TYPE_QUAL_CONST
| TYPE_QUAL_VOLATILE
13089 | TYPE_QUAL_RESTRICT
| TYPE_QUAL_ATOMIC
|
13090 ENCODE_QUAL_ADDR_SPACE(~0U));
13091 const bool reverse_base_type
13092 = need_endianity_attribute_p (reverse
) && is_base_type (type
);
13094 if (code
== ERROR_MARK
)
13097 if (lang_hooks
.types
.get_debug_type
)
13099 tree debug_type
= lang_hooks
.types
.get_debug_type (type
);
13101 if (debug_type
!= NULL_TREE
&& debug_type
!= type
)
13102 return modified_type_die (debug_type
, cv_quals
, reverse
, context_die
);
13105 cv_quals
&= cv_qual_mask
;
13107 /* Don't emit DW_TAG_restrict_type for DWARFv2, since it is a type
13108 tag modifier (and not an attribute) old consumers won't be able
13110 if (dwarf_version
< 3)
13111 cv_quals
&= ~TYPE_QUAL_RESTRICT
;
13113 /* Likewise for DW_TAG_atomic_type for DWARFv5. */
13114 if (dwarf_version
< 5)
13115 cv_quals
&= ~TYPE_QUAL_ATOMIC
;
13117 /* See if we already have the appropriately qualified variant of
13119 qualified_type
= get_qualified_type (type
, cv_quals
);
13121 if (qualified_type
== sizetype
)
13123 /* Try not to expose the internal sizetype type's name. */
13124 if (TYPE_NAME (qualified_type
)
13125 && TREE_CODE (TYPE_NAME (qualified_type
)) == TYPE_DECL
)
13127 tree t
= TREE_TYPE (TYPE_NAME (qualified_type
));
13129 gcc_checking_assert (TREE_CODE (t
) == INTEGER_TYPE
13130 && (TYPE_PRECISION (t
)
13131 == TYPE_PRECISION (qualified_type
))
13132 && (TYPE_UNSIGNED (t
)
13133 == TYPE_UNSIGNED (qualified_type
)));
13134 qualified_type
= t
;
13136 else if (qualified_type
== sizetype
13137 && TREE_CODE (sizetype
) == TREE_CODE (size_type_node
)
13138 && TYPE_PRECISION (sizetype
) == TYPE_PRECISION (size_type_node
)
13139 && TYPE_UNSIGNED (sizetype
) == TYPE_UNSIGNED (size_type_node
))
13140 qualified_type
= size_type_node
;
13143 /* If we do, then we can just use its DIE, if it exists. */
13144 if (qualified_type
)
13146 mod_type_die
= lookup_type_die (qualified_type
);
13148 /* DW_AT_endianity doesn't come from a qualifier on the type, so it is
13149 dealt with specially: the DIE with the attribute, if it exists, is
13150 placed immediately after the regular DIE for the same base type. */
13152 && (!reverse_base_type
13153 || ((mod_type_die
= mod_type_die
->die_sib
) != NULL
13154 && get_AT_unsigned (mod_type_die
, DW_AT_endianity
))))
13155 return mod_type_die
;
13158 name
= qualified_type
? TYPE_NAME (qualified_type
) : NULL
;
13160 /* Handle C typedef types. */
13162 && TREE_CODE (name
) == TYPE_DECL
13163 && DECL_ORIGINAL_TYPE (name
)
13164 && !DECL_ARTIFICIAL (name
))
13166 tree dtype
= TREE_TYPE (name
);
13168 /* Skip the typedef for base types with DW_AT_endianity, no big deal. */
13169 if (qualified_type
== dtype
&& !reverse_base_type
)
13171 tree origin
= decl_ultimate_origin (name
);
13173 /* Typedef variants that have an abstract origin don't get their own
13174 type DIE (see gen_typedef_die), so fall back on the ultimate
13175 abstract origin instead. */
13176 if (origin
!= NULL
&& origin
!= name
)
13177 return modified_type_die (TREE_TYPE (origin
), cv_quals
, reverse
,
13180 /* For a named type, use the typedef. */
13181 gen_type_die (qualified_type
, context_die
);
13182 return lookup_type_die (qualified_type
);
13186 int dquals
= TYPE_QUALS_NO_ADDR_SPACE (dtype
);
13187 dquals
&= cv_qual_mask
;
13188 if ((dquals
& ~cv_quals
) != TYPE_UNQUALIFIED
13189 || (cv_quals
== dquals
&& DECL_ORIGINAL_TYPE (name
) != type
))
13190 /* cv-unqualified version of named type. Just use
13191 the unnamed type to which it refers. */
13192 return modified_type_die (DECL_ORIGINAL_TYPE (name
), cv_quals
,
13193 reverse
, context_die
);
13194 /* Else cv-qualified version of named type; fall through. */
13198 mod_scope
= scope_die_for (type
, context_die
);
13202 int sub_quals
= 0, first_quals
= 0;
13204 dw_die_ref first
= NULL
, last
= NULL
;
13206 /* Determine a lesser qualified type that most closely matches
13207 this one. Then generate DW_TAG_* entries for the remaining
13209 sub_quals
= get_nearest_type_subqualifiers (type
, cv_quals
,
13211 if (sub_quals
&& use_debug_types
)
13213 bool needed
= false;
13214 /* If emitting type units, make sure the order of qualifiers
13215 is canonical. Thus, start from unqualified type if
13216 an earlier qualifier is missing in sub_quals, but some later
13217 one is present there. */
13218 for (i
= 0; i
< dwarf_qual_info_size
; i
++)
13219 if (dwarf_qual_info
[i
].q
& cv_quals
& ~sub_quals
)
13221 else if (needed
&& (dwarf_qual_info
[i
].q
& cv_quals
))
13227 mod_type_die
= modified_type_die (type
, sub_quals
, reverse
, context_die
);
13228 if (mod_scope
&& mod_type_die
&& mod_type_die
->die_parent
== mod_scope
)
13230 /* As not all intermediate qualified DIEs have corresponding
13231 tree types, ensure that qualified DIEs in the same scope
13232 as their DW_AT_type are emitted after their DW_AT_type,
13233 only with other qualified DIEs for the same type possibly
13234 in between them. Determine the range of such qualified
13235 DIEs now (first being the base type, last being corresponding
13236 last qualified DIE for it). */
13237 unsigned int count
= 0;
13238 first
= qualified_die_p (mod_type_die
, &first_quals
,
13239 dwarf_qual_info_size
);
13241 first
= mod_type_die
;
13242 gcc_assert ((first_quals
& ~sub_quals
) == 0);
13243 for (count
= 0, last
= first
;
13244 count
< (1U << dwarf_qual_info_size
);
13245 count
++, last
= last
->die_sib
)
13248 if (last
== mod_scope
->die_child
)
13250 if (qualified_die_p (last
->die_sib
, &quals
, dwarf_qual_info_size
)
13256 for (i
= 0; i
< dwarf_qual_info_size
; i
++)
13257 if (dwarf_qual_info
[i
].q
& cv_quals
& ~sub_quals
)
13260 if (first
&& first
!= last
)
13262 for (d
= first
->die_sib
; ; d
= d
->die_sib
)
13265 qualified_die_p (d
, &quals
, dwarf_qual_info_size
);
13266 if (quals
== (first_quals
| dwarf_qual_info
[i
].q
))
13282 d
= new_die_raw (dwarf_qual_info
[i
].t
);
13283 add_child_die_after (mod_scope
, d
, last
);
13287 d
= new_die (dwarf_qual_info
[i
].t
, mod_scope
, type
);
13289 add_AT_die_ref (d
, DW_AT_type
, mod_type_die
);
13291 first_quals
|= dwarf_qual_info
[i
].q
;
13294 else if (code
== POINTER_TYPE
|| code
== REFERENCE_TYPE
)
13296 dwarf_tag tag
= DW_TAG_pointer_type
;
13297 if (code
== REFERENCE_TYPE
)
13299 if (TYPE_REF_IS_RVALUE (type
) && dwarf_version
>= 4)
13300 tag
= DW_TAG_rvalue_reference_type
;
13302 tag
= DW_TAG_reference_type
;
13304 mod_type_die
= new_die (tag
, mod_scope
, type
);
13306 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
,
13307 simple_type_size_in_bits (type
) / BITS_PER_UNIT
);
13308 add_alignment_attribute (mod_type_die
, type
);
13309 item_type
= TREE_TYPE (type
);
13311 addr_space_t as
= TYPE_ADDR_SPACE (item_type
);
13312 if (!ADDR_SPACE_GENERIC_P (as
))
13314 int action
= targetm
.addr_space
.debug (as
);
13317 /* Positive values indicate an address_class. */
13318 add_AT_unsigned (mod_type_die
, DW_AT_address_class
, action
);
13322 /* Negative values indicate an (inverted) segment base reg. */
13324 = one_reg_loc_descriptor (~action
, VAR_INIT_STATUS_INITIALIZED
);
13325 add_AT_loc (mod_type_die
, DW_AT_segment
, d
);
13329 else if (code
== INTEGER_TYPE
13330 && TREE_TYPE (type
) != NULL_TREE
13331 && subrange_type_for_debug_p (type
, &low
, &high
))
13333 tree bias
= NULL_TREE
;
13334 if (lang_hooks
.types
.get_type_bias
)
13335 bias
= lang_hooks
.types
.get_type_bias (type
);
13336 mod_type_die
= subrange_type_die (type
, low
, high
, bias
, context_die
);
13337 item_type
= TREE_TYPE (type
);
13339 else if (is_base_type (type
))
13341 mod_type_die
= base_type_die (type
, reverse
);
13343 /* The DIE with DW_AT_endianity is placed right after the naked DIE. */
13344 if (reverse_base_type
)
13346 dw_die_ref after_die
13347 = modified_type_die (type
, cv_quals
, false, context_die
);
13348 add_child_die_after (comp_unit_die (), mod_type_die
, after_die
);
13351 add_child_die (comp_unit_die (), mod_type_die
);
13353 add_pubtype (type
, mod_type_die
);
13357 gen_type_die (type
, context_die
);
13359 /* We have to get the type_main_variant here (and pass that to the
13360 `lookup_type_die' routine) because the ..._TYPE node we have
13361 might simply be a *copy* of some original type node (where the
13362 copy was created to help us keep track of typedef names) and
13363 that copy might have a different TYPE_UID from the original
13365 if (TREE_CODE (type
) == FUNCTION_TYPE
13366 || TREE_CODE (type
) == METHOD_TYPE
)
13368 /* For function/method types, can't just use type_main_variant here,
13369 because that can have different ref-qualifiers for C++,
13370 but try to canonicalize. */
13371 tree main
= TYPE_MAIN_VARIANT (type
);
13372 for (tree t
= main
; t
; t
= TYPE_NEXT_VARIANT (t
))
13373 if (TYPE_QUALS_NO_ADDR_SPACE (t
) == 0
13374 && check_base_type (t
, main
)
13375 && check_lang_type (t
, type
))
13376 return lookup_type_die (t
);
13377 return lookup_type_die (type
);
13379 else if (TREE_CODE (type
) != VECTOR_TYPE
13380 && TREE_CODE (type
) != ARRAY_TYPE
)
13381 return lookup_type_die (type_main_variant (type
));
13383 /* Vectors have the debugging information in the type,
13384 not the main variant. */
13385 return lookup_type_die (type
);
13388 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those,
13389 don't output a DW_TAG_typedef, since there isn't one in the
13390 user's program; just attach a DW_AT_name to the type.
13391 Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
13392 if the base type already has the same name. */
13394 && ((TREE_CODE (name
) != TYPE_DECL
13395 && (qualified_type
== TYPE_MAIN_VARIANT (type
)
13396 || (cv_quals
== TYPE_UNQUALIFIED
)))
13397 || (TREE_CODE (name
) == TYPE_DECL
13398 && TREE_TYPE (name
) == qualified_type
13399 && DECL_NAME (name
))))
13401 if (TREE_CODE (name
) == TYPE_DECL
)
13402 /* Could just call add_name_and_src_coords_attributes here,
13403 but since this is a builtin type it doesn't have any
13404 useful source coordinates anyway. */
13405 name
= DECL_NAME (name
);
13406 add_name_attribute (mod_type_die
, IDENTIFIER_POINTER (name
));
13408 /* This probably indicates a bug. */
13409 else if (mod_type_die
&& mod_type_die
->die_tag
== DW_TAG_base_type
)
13411 name
= TYPE_IDENTIFIER (type
);
13412 add_name_attribute (mod_type_die
,
13413 name
? IDENTIFIER_POINTER (name
) : "__unknown__");
13416 if (qualified_type
&& !reverse_base_type
)
13417 equate_type_number_to_die (qualified_type
, mod_type_die
);
13420 /* We must do this after the equate_type_number_to_die call, in case
13421 this is a recursive type. This ensures that the modified_type_die
13422 recursion will terminate even if the type is recursive. Recursive
13423 types are possible in Ada. */
13424 sub_die
= modified_type_die (item_type
,
13425 TYPE_QUALS_NO_ADDR_SPACE (item_type
),
13429 if (sub_die
!= NULL
)
13430 add_AT_die_ref (mod_type_die
, DW_AT_type
, sub_die
);
13432 add_gnat_descriptive_type_attribute (mod_type_die
, type
, context_die
);
13433 if (TYPE_ARTIFICIAL (type
))
13434 add_AT_flag (mod_type_die
, DW_AT_artificial
, 1);
13436 return mod_type_die
;
13439 /* Generate DIEs for the generic parameters of T.
13440 T must be either a generic type or a generic function.
13441 See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more. */
13444 gen_generic_params_dies (tree t
)
13448 dw_die_ref die
= NULL
;
13451 if (!t
|| (TYPE_P (t
) && !COMPLETE_TYPE_P (t
)))
13455 die
= lookup_type_die (t
);
13456 else if (DECL_P (t
))
13457 die
= lookup_decl_die (t
);
13461 parms
= lang_hooks
.get_innermost_generic_parms (t
);
13463 /* T has no generic parameter. It means T is neither a generic type
13464 or function. End of story. */
13467 parms_num
= TREE_VEC_LENGTH (parms
);
13468 args
= lang_hooks
.get_innermost_generic_args (t
);
13469 if (TREE_CHAIN (args
) && TREE_CODE (TREE_CHAIN (args
)) == INTEGER_CST
)
13470 non_default
= int_cst_value (TREE_CHAIN (args
));
13472 non_default
= TREE_VEC_LENGTH (args
);
13473 for (i
= 0; i
< parms_num
; i
++)
13475 tree parm
, arg
, arg_pack_elems
;
13476 dw_die_ref parm_die
;
13478 parm
= TREE_VEC_ELT (parms
, i
);
13479 arg
= TREE_VEC_ELT (args
, i
);
13480 arg_pack_elems
= lang_hooks
.types
.get_argument_pack_elems (arg
);
13481 gcc_assert (parm
&& TREE_VALUE (parm
) && arg
);
13483 if (parm
&& TREE_VALUE (parm
) && arg
)
13485 /* If PARM represents a template parameter pack,
13486 emit a DW_TAG_GNU_template_parameter_pack DIE, followed
13487 by DW_TAG_template_*_parameter DIEs for the argument
13488 pack elements of ARG. Note that ARG would then be
13489 an argument pack. */
13490 if (arg_pack_elems
)
13491 parm_die
= template_parameter_pack_die (TREE_VALUE (parm
),
13495 parm_die
= generic_parameter_die (TREE_VALUE (parm
), arg
,
13496 true /* emit name */, die
);
13497 if (i
>= non_default
)
13498 add_AT_flag (parm_die
, DW_AT_default_value
, 1);
13503 /* Create and return a DIE for PARM which should be
13504 the representation of a generic type parameter.
13505 For instance, in the C++ front end, PARM would be a template parameter.
13506 ARG is the argument to PARM.
13507 EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
13509 PARENT_DIE is the parent DIE which the new created DIE should be added to,
13510 as a child node. */
13513 generic_parameter_die (tree parm
, tree arg
,
13515 dw_die_ref parent_die
)
13517 dw_die_ref tmpl_die
= NULL
;
13518 const char *name
= NULL
;
13520 if (!parm
|| !DECL_NAME (parm
) || !arg
)
13523 /* We support non-type generic parameters and arguments,
13524 type generic parameters and arguments, as well as
13525 generic generic parameters (a.k.a. template template parameters in C++)
13527 if (TREE_CODE (parm
) == PARM_DECL
)
13528 /* PARM is a nontype generic parameter */
13529 tmpl_die
= new_die (DW_TAG_template_value_param
, parent_die
, parm
);
13530 else if (TREE_CODE (parm
) == TYPE_DECL
)
13531 /* PARM is a type generic parameter. */
13532 tmpl_die
= new_die (DW_TAG_template_type_param
, parent_die
, parm
);
13533 else if (lang_hooks
.decls
.generic_generic_parameter_decl_p (parm
))
13534 /* PARM is a generic generic parameter.
13535 Its DIE is a GNU extension. It shall have a
13536 DW_AT_name attribute to represent the name of the template template
13537 parameter, and a DW_AT_GNU_template_name attribute to represent the
13538 name of the template template argument. */
13539 tmpl_die
= new_die (DW_TAG_GNU_template_template_param
,
13542 gcc_unreachable ();
13548 /* If PARM is a generic parameter pack, it means we are
13549 emitting debug info for a template argument pack element.
13550 In other terms, ARG is a template argument pack element.
13551 In that case, we don't emit any DW_AT_name attribute for
13555 name
= IDENTIFIER_POINTER (DECL_NAME (parm
));
13557 add_AT_string (tmpl_die
, DW_AT_name
, name
);
13560 if (!lang_hooks
.decls
.generic_generic_parameter_decl_p (parm
))
13562 /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
13563 TMPL_DIE should have a child DW_AT_type attribute that is set
13564 to the type of the argument to PARM, which is ARG.
13565 If PARM is a type generic parameter, TMPL_DIE should have a
13566 child DW_AT_type that is set to ARG. */
13567 tmpl_type
= TYPE_P (arg
) ? arg
: TREE_TYPE (arg
);
13568 add_type_attribute (tmpl_die
, tmpl_type
,
13569 (TREE_THIS_VOLATILE (tmpl_type
)
13570 ? TYPE_QUAL_VOLATILE
: TYPE_UNQUALIFIED
),
13571 false, parent_die
);
13575 /* So TMPL_DIE is a DIE representing a
13576 a generic generic template parameter, a.k.a template template
13577 parameter in C++ and arg is a template. */
13579 /* The DW_AT_GNU_template_name attribute of the DIE must be set
13580 to the name of the argument. */
13581 name
= dwarf2_name (TYPE_P (arg
) ? TYPE_NAME (arg
) : arg
, 1);
13583 add_AT_string (tmpl_die
, DW_AT_GNU_template_name
, name
);
13586 if (TREE_CODE (parm
) == PARM_DECL
)
13587 /* So PARM is a non-type generic parameter.
13588 DWARF3 5.6.8 says we must set a DW_AT_const_value child
13589 attribute of TMPL_DIE which value represents the value
13591 We must be careful here:
13592 The value of ARG might reference some function decls.
13593 We might currently be emitting debug info for a generic
13594 type and types are emitted before function decls, we don't
13595 know if the function decls referenced by ARG will actually be
13596 emitted after cgraph computations.
13597 So must defer the generation of the DW_AT_const_value to
13598 after cgraph is ready. */
13599 append_entry_to_tmpl_value_parm_die_table (tmpl_die
, arg
);
13605 /* Generate and return a DW_TAG_GNU_template_parameter_pack DIE representing.
13606 PARM_PACK must be a template parameter pack. The returned DIE
13607 will be child DIE of PARENT_DIE. */
13610 template_parameter_pack_die (tree parm_pack
,
13611 tree parm_pack_args
,
13612 dw_die_ref parent_die
)
13617 gcc_assert (parent_die
&& parm_pack
);
13619 die
= new_die (DW_TAG_GNU_template_parameter_pack
, parent_die
, parm_pack
);
13620 add_name_and_src_coords_attributes (die
, parm_pack
);
13621 for (j
= 0; j
< TREE_VEC_LENGTH (parm_pack_args
); j
++)
13622 generic_parameter_die (parm_pack
,
13623 TREE_VEC_ELT (parm_pack_args
, j
),
13624 false /* Don't emit DW_AT_name */,
13629 /* Return the DBX register number described by a given RTL node. */
13631 static unsigned int
13632 dbx_reg_number (const_rtx rtl
)
13634 unsigned regno
= REGNO (rtl
);
13636 gcc_assert (regno
< FIRST_PSEUDO_REGISTER
);
13638 #ifdef LEAF_REG_REMAP
13639 if (crtl
->uses_only_leaf_regs
)
13641 int leaf_reg
= LEAF_REG_REMAP (regno
);
13642 if (leaf_reg
!= -1)
13643 regno
= (unsigned) leaf_reg
;
13647 regno
= DBX_REGISTER_NUMBER (regno
);
13648 gcc_assert (regno
!= INVALID_REGNUM
);
13652 /* Optionally add a DW_OP_piece term to a location description expression.
13653 DW_OP_piece is only added if the location description expression already
13654 doesn't end with DW_OP_piece. */
13657 add_loc_descr_op_piece (dw_loc_descr_ref
*list_head
, int size
)
13659 dw_loc_descr_ref loc
;
13661 if (*list_head
!= NULL
)
13663 /* Find the end of the chain. */
13664 for (loc
= *list_head
; loc
->dw_loc_next
!= NULL
; loc
= loc
->dw_loc_next
)
13667 if (loc
->dw_loc_opc
!= DW_OP_piece
)
13668 loc
->dw_loc_next
= new_loc_descr (DW_OP_piece
, size
, 0);
13672 /* Return a location descriptor that designates a machine register or
13673 zero if there is none. */
13675 static dw_loc_descr_ref
13676 reg_loc_descriptor (rtx rtl
, enum var_init_status initialized
)
13680 if (REGNO (rtl
) >= FIRST_PSEUDO_REGISTER
)
13683 /* We only use "frame base" when we're sure we're talking about the
13684 post-prologue local stack frame. We do this by *not* running
13685 register elimination until this point, and recognizing the special
13686 argument pointer and soft frame pointer rtx's.
13687 Use DW_OP_fbreg offset DW_OP_stack_value in this case. */
13688 if ((rtl
== arg_pointer_rtx
|| rtl
== frame_pointer_rtx
)
13689 && eliminate_regs (rtl
, VOIDmode
, NULL_RTX
) != rtl
)
13691 dw_loc_descr_ref result
= NULL
;
13693 if (dwarf_version
>= 4 || !dwarf_strict
)
13695 result
= mem_loc_descriptor (rtl
, GET_MODE (rtl
), VOIDmode
,
13698 add_loc_descr (&result
,
13699 new_loc_descr (DW_OP_stack_value
, 0, 0));
13704 regs
= targetm
.dwarf_register_span (rtl
);
13706 if (REG_NREGS (rtl
) > 1 || regs
)
13707 return multiple_reg_loc_descriptor (rtl
, regs
, initialized
);
13710 unsigned int dbx_regnum
= dbx_reg_number (rtl
);
13711 if (dbx_regnum
== IGNORED_DWARF_REGNUM
)
13713 return one_reg_loc_descriptor (dbx_regnum
, initialized
);
13717 /* Return a location descriptor that designates a machine register for
13718 a given hard register number. */
13720 static dw_loc_descr_ref
13721 one_reg_loc_descriptor (unsigned int regno
, enum var_init_status initialized
)
13723 dw_loc_descr_ref reg_loc_descr
;
13727 = new_loc_descr ((enum dwarf_location_atom
) (DW_OP_reg0
+ regno
), 0, 0);
13729 reg_loc_descr
= new_loc_descr (DW_OP_regx
, regno
, 0);
13731 if (initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
13732 add_loc_descr (®_loc_descr
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
13734 return reg_loc_descr
;
13737 /* Given an RTL of a register, return a location descriptor that
13738 designates a value that spans more than one register. */
13740 static dw_loc_descr_ref
13741 multiple_reg_loc_descriptor (rtx rtl
, rtx regs
,
13742 enum var_init_status initialized
)
13745 dw_loc_descr_ref loc_result
= NULL
;
13747 /* Simple, contiguous registers. */
13748 if (regs
== NULL_RTX
)
13750 unsigned reg
= REGNO (rtl
);
13753 #ifdef LEAF_REG_REMAP
13754 if (crtl
->uses_only_leaf_regs
)
13756 int leaf_reg
= LEAF_REG_REMAP (reg
);
13757 if (leaf_reg
!= -1)
13758 reg
= (unsigned) leaf_reg
;
13762 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg
) == dbx_reg_number (rtl
));
13763 nregs
= REG_NREGS (rtl
);
13765 /* At present we only track constant-sized pieces. */
13766 if (!GET_MODE_SIZE (GET_MODE (rtl
)).is_constant (&size
))
13773 dw_loc_descr_ref t
;
13775 t
= one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg
),
13776 VAR_INIT_STATUS_INITIALIZED
);
13777 add_loc_descr (&loc_result
, t
);
13778 add_loc_descr_op_piece (&loc_result
, size
);
13784 /* Now onto stupid register sets in non contiguous locations. */
13786 gcc_assert (GET_CODE (regs
) == PARALLEL
);
13788 /* At present we only track constant-sized pieces. */
13789 if (!GET_MODE_SIZE (GET_MODE (XVECEXP (regs
, 0, 0))).is_constant (&size
))
13793 for (i
= 0; i
< XVECLEN (regs
, 0); ++i
)
13795 dw_loc_descr_ref t
;
13797 t
= one_reg_loc_descriptor (dbx_reg_number (XVECEXP (regs
, 0, i
)),
13798 VAR_INIT_STATUS_INITIALIZED
);
13799 add_loc_descr (&loc_result
, t
);
13800 add_loc_descr_op_piece (&loc_result
, size
);
13803 if (loc_result
&& initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
13804 add_loc_descr (&loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
13808 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT
);
13810 /* Return a location descriptor that designates a constant i,
13811 as a compound operation from constant (i >> shift), constant shift
13814 static dw_loc_descr_ref
13815 int_shift_loc_descriptor (HOST_WIDE_INT i
, int shift
)
13817 dw_loc_descr_ref ret
= int_loc_descriptor (i
>> shift
);
13818 add_loc_descr (&ret
, int_loc_descriptor (shift
));
13819 add_loc_descr (&ret
, new_loc_descr (DW_OP_shl
, 0, 0));
13823 /* Return a location descriptor that designates constant POLY_I. */
13825 static dw_loc_descr_ref
13826 int_loc_descriptor (poly_int64 poly_i
)
13828 enum dwarf_location_atom op
;
13831 if (!poly_i
.is_constant (&i
))
13833 /* Create location descriptions for the non-constant part and
13834 add any constant offset at the end. */
13835 dw_loc_descr_ref ret
= NULL
;
13836 HOST_WIDE_INT constant
= poly_i
.coeffs
[0];
13837 for (unsigned int j
= 1; j
< NUM_POLY_INT_COEFFS
; ++j
)
13839 HOST_WIDE_INT coeff
= poly_i
.coeffs
[j
];
13842 dw_loc_descr_ref start
= ret
;
13843 unsigned int factor
;
13845 unsigned int regno
= targetm
.dwarf_poly_indeterminate_value
13846 (j
, &factor
, &bias
);
13848 /* Add COEFF * ((REGNO / FACTOR) - BIAS) to the value:
13849 add COEFF * (REGNO / FACTOR) now and subtract
13850 COEFF * BIAS from the final constant part. */
13851 constant
-= coeff
* bias
;
13852 add_loc_descr (&ret
, new_reg_loc_descr (regno
, 0));
13853 if (coeff
% factor
== 0)
13857 int amount
= exact_log2 (factor
);
13858 gcc_assert (amount
>= 0);
13859 add_loc_descr (&ret
, int_loc_descriptor (amount
));
13860 add_loc_descr (&ret
, new_loc_descr (DW_OP_shr
, 0, 0));
13864 add_loc_descr (&ret
, int_loc_descriptor (coeff
));
13865 add_loc_descr (&ret
, new_loc_descr (DW_OP_mul
, 0, 0));
13868 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus
, 0, 0));
13871 loc_descr_plus_const (&ret
, constant
);
13875 /* Pick the smallest representation of a constant, rather than just
13876 defaulting to the LEB encoding. */
13879 int clz
= clz_hwi (i
);
13880 int ctz
= ctz_hwi (i
);
13882 op
= (enum dwarf_location_atom
) (DW_OP_lit0
+ i
);
13883 else if (i
<= 0xff)
13884 op
= DW_OP_const1u
;
13885 else if (i
<= 0xffff)
13886 op
= DW_OP_const2u
;
13887 else if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 5
13888 && clz
+ 5 + 255 >= HOST_BITS_PER_WIDE_INT
)
13889 /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
13890 DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
13891 while DW_OP_const4u is 5 bytes. */
13892 return int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
- clz
- 5);
13893 else if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 8
13894 && clz
+ 8 + 31 >= HOST_BITS_PER_WIDE_INT
)
13895 /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
13896 while DW_OP_const4u is 5 bytes. */
13897 return int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
- clz
- 8);
13899 else if (DWARF2_ADDR_SIZE
== 4 && i
> 0x7fffffff
13900 && size_of_int_loc_descriptor ((HOST_WIDE_INT
) (int32_t) i
)
13903 /* As i >= 2**31, the double cast above will yield a negative number.
13904 Since wrapping is defined in DWARF expressions we can output big
13905 positive integers as small negative ones, regardless of the size
13908 Here, since the evaluator will handle 32-bit values and since i >=
13909 2**31, we know it's going to be interpreted as a negative literal:
13910 store it this way if we can do better than 5 bytes this way. */
13911 return int_loc_descriptor ((HOST_WIDE_INT
) (int32_t) i
);
13913 else if (HOST_BITS_PER_WIDE_INT
== 32 || i
<= 0xffffffff)
13914 op
= DW_OP_const4u
;
13916 /* Past this point, i >= 0x100000000 and thus DW_OP_constu will take at
13917 least 6 bytes: see if we can do better before falling back to it. */
13918 else if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 8
13919 && clz
+ 8 + 255 >= HOST_BITS_PER_WIDE_INT
)
13920 /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes. */
13921 return int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
- clz
- 8);
13922 else if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 16
13923 && clz
+ 16 + (size_of_uleb128 (i
) > 5 ? 255 : 31)
13924 >= HOST_BITS_PER_WIDE_INT
)
13925 /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
13926 DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes. */
13927 return int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
- clz
- 16);
13928 else if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 32
13929 && clz
+ 32 + 31 >= HOST_BITS_PER_WIDE_INT
13930 && size_of_uleb128 (i
) > 6)
13931 /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes. */
13932 return int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
- clz
- 32);
13939 op
= DW_OP_const1s
;
13940 else if (i
>= -0x8000)
13941 op
= DW_OP_const2s
;
13942 else if (HOST_BITS_PER_WIDE_INT
== 32 || i
>= -0x80000000)
13944 if (size_of_int_loc_descriptor (i
) < 5)
13946 dw_loc_descr_ref ret
= int_loc_descriptor (-i
);
13947 add_loc_descr (&ret
, new_loc_descr (DW_OP_neg
, 0, 0));
13950 op
= DW_OP_const4s
;
13954 if (size_of_int_loc_descriptor (i
)
13955 < (unsigned long) 1 + size_of_sleb128 (i
))
13957 dw_loc_descr_ref ret
= int_loc_descriptor (-i
);
13958 add_loc_descr (&ret
, new_loc_descr (DW_OP_neg
, 0, 0));
13965 return new_loc_descr (op
, i
, 0);
13968 /* Likewise, for unsigned constants. */
13970 static dw_loc_descr_ref
13971 uint_loc_descriptor (unsigned HOST_WIDE_INT i
)
13973 const unsigned HOST_WIDE_INT max_int
= INTTYPE_MAXIMUM (HOST_WIDE_INT
);
13974 const unsigned HOST_WIDE_INT max_uint
13975 = INTTYPE_MAXIMUM (unsigned HOST_WIDE_INT
);
13977 /* If possible, use the clever signed constants handling. */
13979 return int_loc_descriptor ((HOST_WIDE_INT
) i
);
13981 /* Here, we are left with positive numbers that cannot be represented as
13982 HOST_WIDE_INT, i.e.:
13983 max (HOST_WIDE_INT) < i <= max (unsigned HOST_WIDE_INT)
13985 Using DW_OP_const4/8/./u operation to encode them consumes a lot of bytes
13986 whereas may be better to output a negative integer: thanks to integer
13987 wrapping, we know that:
13988 x = x - 2 ** DWARF2_ADDR_SIZE
13989 = x - 2 * (max (HOST_WIDE_INT) + 1)
13990 So numbers close to max (unsigned HOST_WIDE_INT) could be represented as
13991 small negative integers. Let's try that in cases it will clearly improve
13992 the encoding: there is no gain turning DW_OP_const4u into
13994 if (DWARF2_ADDR_SIZE
* 8 == HOST_BITS_PER_WIDE_INT
13995 && ((DWARF2_ADDR_SIZE
== 4 && i
> max_uint
- 0x8000)
13996 || (DWARF2_ADDR_SIZE
== 8 && i
> max_uint
- 0x80000000)))
13998 const unsigned HOST_WIDE_INT first_shift
= i
- max_int
- 1;
14000 /* Now, -1 < first_shift <= max (HOST_WIDE_INT)
14001 i.e. 0 <= first_shift <= max (HOST_WIDE_INT). */
14002 const HOST_WIDE_INT second_shift
14003 = (HOST_WIDE_INT
) first_shift
- (HOST_WIDE_INT
) max_int
- 1;
14005 /* So we finally have:
14006 -max (HOST_WIDE_INT) - 1 <= second_shift <= -1.
14007 i.e. min (HOST_WIDE_INT) <= second_shift < 0. */
14008 return int_loc_descriptor (second_shift
);
14011 /* Last chance: fallback to a simple constant operation. */
14012 return new_loc_descr
14013 ((HOST_BITS_PER_WIDE_INT
== 32 || i
<= 0xffffffff)
14019 /* Generate and return a location description that computes the unsigned
14020 comparison of the two stack top entries (a OP b where b is the top-most
14021 entry and a is the second one). The KIND of comparison can be LT_EXPR,
14022 LE_EXPR, GT_EXPR or GE_EXPR. */
14024 static dw_loc_descr_ref
14025 uint_comparison_loc_list (enum tree_code kind
)
14027 enum dwarf_location_atom op
, flip_op
;
14028 dw_loc_descr_ref ret
, bra_node
, jmp_node
, tmp
;
14045 gcc_unreachable ();
14048 bra_node
= new_loc_descr (DW_OP_bra
, 0, 0);
14049 jmp_node
= new_loc_descr (DW_OP_skip
, 0, 0);
14051 /* Until DWARFv4, operations all work on signed integers. It is nevertheless
14052 possible to perform unsigned comparisons: we just have to distinguish
14055 1. when a and b have the same sign (as signed integers); then we should
14056 return: a OP(signed) b;
14058 2. when a is a negative signed integer while b is a positive one, then a
14059 is a greater unsigned integer than b; likewise when a and b's roles
14062 So first, compare the sign of the two operands. */
14063 ret
= new_loc_descr (DW_OP_over
, 0, 0);
14064 add_loc_descr (&ret
, new_loc_descr (DW_OP_over
, 0, 0));
14065 add_loc_descr (&ret
, new_loc_descr (DW_OP_xor
, 0, 0));
14066 /* If they have different signs (i.e. they have different sign bits), then
14067 the stack top value has now the sign bit set and thus it's smaller than
14069 add_loc_descr (&ret
, new_loc_descr (DW_OP_lit0
, 0, 0));
14070 add_loc_descr (&ret
, new_loc_descr (DW_OP_lt
, 0, 0));
14071 add_loc_descr (&ret
, bra_node
);
14073 /* We are in case 1. At this point, we know both operands have the same
14074 sign, to it's safe to use the built-in signed comparison. */
14075 add_loc_descr (&ret
, new_loc_descr (op
, 0, 0));
14076 add_loc_descr (&ret
, jmp_node
);
14078 /* We are in case 2. Here, we know both operands do not have the same sign,
14079 so we have to flip the signed comparison. */
14080 flip_op
= (kind
== LT_EXPR
|| kind
== LE_EXPR
) ? DW_OP_gt
: DW_OP_lt
;
14081 tmp
= new_loc_descr (flip_op
, 0, 0);
14082 bra_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
14083 bra_node
->dw_loc_oprnd1
.v
.val_loc
= tmp
;
14084 add_loc_descr (&ret
, tmp
);
14086 /* This dummy operation is necessary to make the two branches join. */
14087 tmp
= new_loc_descr (DW_OP_nop
, 0, 0);
14088 jmp_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
14089 jmp_node
->dw_loc_oprnd1
.v
.val_loc
= tmp
;
14090 add_loc_descr (&ret
, tmp
);
14095 /* Likewise, but takes the location description lists (might be destructive on
14096 them). Return NULL if either is NULL or if concatenation fails. */
14098 static dw_loc_list_ref
14099 loc_list_from_uint_comparison (dw_loc_list_ref left
, dw_loc_list_ref right
,
14100 enum tree_code kind
)
14102 if (left
== NULL
|| right
== NULL
)
14105 add_loc_list (&left
, right
);
14109 add_loc_descr_to_each (left
, uint_comparison_loc_list (kind
));
14113 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
14114 without actually allocating it. */
14116 static unsigned long
14117 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i
, int shift
)
14119 return size_of_int_loc_descriptor (i
>> shift
)
14120 + size_of_int_loc_descriptor (shift
)
14124 /* Return size_of_locs (int_loc_descriptor (i)) without
14125 actually allocating it. */
14127 static unsigned long
14128 size_of_int_loc_descriptor (HOST_WIDE_INT i
)
14137 else if (i
<= 0xff)
14139 else if (i
<= 0xffff)
14143 if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 5
14144 && clz
+ 5 + 255 >= HOST_BITS_PER_WIDE_INT
)
14145 return size_of_int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
14147 else if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 8
14148 && clz
+ 8 + 31 >= HOST_BITS_PER_WIDE_INT
)
14149 return size_of_int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
14151 else if (DWARF2_ADDR_SIZE
== 4 && i
> 0x7fffffff
14152 && size_of_int_loc_descriptor ((HOST_WIDE_INT
) (int32_t) i
)
14154 return size_of_int_loc_descriptor ((HOST_WIDE_INT
) (int32_t) i
);
14155 else if (HOST_BITS_PER_WIDE_INT
== 32 || i
<= 0xffffffff)
14157 s
= size_of_uleb128 ((unsigned HOST_WIDE_INT
) i
);
14158 if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 8
14159 && clz
+ 8 + 255 >= HOST_BITS_PER_WIDE_INT
)
14160 return size_of_int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
14162 else if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 16
14163 && clz
+ 16 + (s
> 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT
)
14164 return size_of_int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
14166 else if (clz
+ ctz
>= HOST_BITS_PER_WIDE_INT
- 32
14167 && clz
+ 32 + 31 >= HOST_BITS_PER_WIDE_INT
14169 return size_of_int_shift_loc_descriptor (i
, HOST_BITS_PER_WIDE_INT
14178 else if (i
>= -0x8000)
14180 else if (HOST_BITS_PER_WIDE_INT
== 32 || i
>= -0x80000000)
14182 if (-(unsigned HOST_WIDE_INT
) i
!= (unsigned HOST_WIDE_INT
) i
)
14184 s
= size_of_int_loc_descriptor (-i
) + 1;
14192 unsigned long r
= 1 + size_of_sleb128 (i
);
14193 if (-(unsigned HOST_WIDE_INT
) i
!= (unsigned HOST_WIDE_INT
) i
)
14195 s
= size_of_int_loc_descriptor (-i
) + 1;
14204 /* Return loc description representing "address" of integer value.
14205 This can appear only as toplevel expression. */
14207 static dw_loc_descr_ref
14208 address_of_int_loc_descriptor (int size
, HOST_WIDE_INT i
)
14211 dw_loc_descr_ref loc_result
= NULL
;
14213 if (!(dwarf_version
>= 4 || !dwarf_strict
))
14216 litsize
= size_of_int_loc_descriptor (i
);
14217 /* Determine if DW_OP_stack_value or DW_OP_implicit_value
14218 is more compact. For DW_OP_stack_value we need:
14219 litsize + 1 (DW_OP_stack_value)
14220 and for DW_OP_implicit_value:
14221 1 (DW_OP_implicit_value) + 1 (length) + size. */
14222 if ((int) DWARF2_ADDR_SIZE
>= size
&& litsize
+ 1 <= 1 + 1 + size
)
14224 loc_result
= int_loc_descriptor (i
);
14225 add_loc_descr (&loc_result
,
14226 new_loc_descr (DW_OP_stack_value
, 0, 0));
14230 loc_result
= new_loc_descr (DW_OP_implicit_value
,
14232 loc_result
->dw_loc_oprnd2
.val_class
= dw_val_class_const
;
14233 loc_result
->dw_loc_oprnd2
.v
.val_int
= i
;
14237 /* Return a location descriptor that designates a base+offset location. */
14239 static dw_loc_descr_ref
14240 based_loc_descr (rtx reg
, poly_int64 offset
,
14241 enum var_init_status initialized
)
14243 unsigned int regno
;
14244 dw_loc_descr_ref result
;
14245 dw_fde_ref fde
= cfun
->fde
;
14247 /* We only use "frame base" when we're sure we're talking about the
14248 post-prologue local stack frame. We do this by *not* running
14249 register elimination until this point, and recognizing the special
14250 argument pointer and soft frame pointer rtx's. */
14251 if (reg
== arg_pointer_rtx
|| reg
== frame_pointer_rtx
)
14253 rtx elim
= (ira_use_lra_p
14254 ? lra_eliminate_regs (reg
, VOIDmode
, NULL_RTX
)
14255 : eliminate_regs (reg
, VOIDmode
, NULL_RTX
));
14259 /* Allow hard frame pointer here even if frame pointer
14260 isn't used since hard frame pointer is encoded with
14261 DW_OP_fbreg which uses the DW_AT_frame_base attribute,
14262 not hard frame pointer directly. */
14263 elim
= strip_offset_and_add (elim
, &offset
);
14264 gcc_assert (elim
== hard_frame_pointer_rtx
14265 || elim
== stack_pointer_rtx
);
14267 /* If drap register is used to align stack, use frame
14268 pointer + offset to access stack variables. If stack
14269 is aligned without drap, use stack pointer + offset to
14270 access stack variables. */
14271 if (crtl
->stack_realign_tried
14272 && reg
== frame_pointer_rtx
)
14275 = DWARF_FRAME_REGNUM ((fde
&& fde
->drap_reg
!= INVALID_REGNUM
)
14276 ? HARD_FRAME_POINTER_REGNUM
14278 return new_reg_loc_descr (base_reg
, offset
);
14281 gcc_assert (frame_pointer_fb_offset_valid
);
14282 offset
+= frame_pointer_fb_offset
;
14283 HOST_WIDE_INT const_offset
;
14284 if (offset
.is_constant (&const_offset
))
14285 return new_loc_descr (DW_OP_fbreg
, const_offset
, 0);
14288 dw_loc_descr_ref ret
= new_loc_descr (DW_OP_fbreg
, 0, 0);
14289 loc_descr_plus_const (&ret
, offset
);
14295 regno
= REGNO (reg
);
14296 #ifdef LEAF_REG_REMAP
14297 if (crtl
->uses_only_leaf_regs
)
14299 int leaf_reg
= LEAF_REG_REMAP (regno
);
14300 if (leaf_reg
!= -1)
14301 regno
= (unsigned) leaf_reg
;
14304 regno
= DWARF_FRAME_REGNUM (regno
);
14306 HOST_WIDE_INT const_offset
;
14307 if (!optimize
&& fde
14308 && (fde
->drap_reg
== regno
|| fde
->vdrap_reg
== regno
)
14309 && offset
.is_constant (&const_offset
))
14311 /* Use cfa+offset to represent the location of arguments passed
14312 on the stack when drap is used to align stack.
14313 Only do this when not optimizing, for optimized code var-tracking
14314 is supposed to track where the arguments live and the register
14315 used as vdrap or drap in some spot might be used for something
14316 else in other part of the routine. */
14317 return new_loc_descr (DW_OP_fbreg
, const_offset
, 0);
14320 result
= new_reg_loc_descr (regno
, offset
);
14322 if (initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
14323 add_loc_descr (&result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
14328 /* Return true if this RTL expression describes a base+offset calculation. */
14331 is_based_loc (const_rtx rtl
)
14333 return (GET_CODE (rtl
) == PLUS
14334 && ((REG_P (XEXP (rtl
, 0))
14335 && REGNO (XEXP (rtl
, 0)) < FIRST_PSEUDO_REGISTER
14336 && CONST_INT_P (XEXP (rtl
, 1)))));
14339 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
14342 static dw_loc_descr_ref
14343 tls_mem_loc_descriptor (rtx mem
)
14346 dw_loc_descr_ref loc_result
;
14348 if (MEM_EXPR (mem
) == NULL_TREE
|| !MEM_OFFSET_KNOWN_P (mem
))
14351 base
= get_base_address (MEM_EXPR (mem
));
14354 || !DECL_THREAD_LOCAL_P (base
))
14357 loc_result
= loc_descriptor_from_tree (MEM_EXPR (mem
), 1, NULL
);
14358 if (loc_result
== NULL
)
14361 if (maybe_ne (MEM_OFFSET (mem
), 0))
14362 loc_descr_plus_const (&loc_result
, MEM_OFFSET (mem
));
14367 /* Output debug info about reason why we failed to expand expression as dwarf
14371 expansion_failed (tree expr
, rtx rtl
, char const *reason
)
14373 if (dump_file
&& (dump_flags
& TDF_DETAILS
))
14375 fprintf (dump_file
, "Failed to expand as dwarf: ");
14377 print_generic_expr (dump_file
, expr
, dump_flags
);
14380 fprintf (dump_file
, "\n");
14381 print_rtl (dump_file
, rtl
);
14383 fprintf (dump_file
, "\nReason: %s\n", reason
);
14387 /* Helper function for const_ok_for_output. */
14390 const_ok_for_output_1 (rtx rtl
)
14392 if (targetm
.const_not_ok_for_debug_p (rtl
))
14394 if (GET_CODE (rtl
) != UNSPEC
)
14396 expansion_failed (NULL_TREE
, rtl
,
14397 "Expression rejected for debug by the backend.\n");
14401 /* If delegitimize_address couldn't do anything with the UNSPEC, and
14402 the target hook doesn't explicitly allow it in debug info, assume
14403 we can't express it in the debug info. */
14404 /* Don't complain about TLS UNSPECs, those are just too hard to
14405 delegitimize. Note this could be a non-decl SYMBOL_REF such as
14406 one in a constant pool entry, so testing SYMBOL_REF_TLS_MODEL
14407 rather than DECL_THREAD_LOCAL_P is not just an optimization. */
14409 && (XVECLEN (rtl
, 0) == 0
14410 || GET_CODE (XVECEXP (rtl
, 0, 0)) != SYMBOL_REF
14411 || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl
, 0, 0)) == TLS_MODEL_NONE
))
14412 inform (current_function_decl
14413 ? DECL_SOURCE_LOCATION (current_function_decl
)
14414 : UNKNOWN_LOCATION
,
14415 #if NUM_UNSPEC_VALUES > 0
14416 "non-delegitimized UNSPEC %s (%d) found in variable location",
14417 ((XINT (rtl
, 1) >= 0 && XINT (rtl
, 1) < NUM_UNSPEC_VALUES
)
14418 ? unspec_strings
[XINT (rtl
, 1)] : "unknown"),
14421 "non-delegitimized UNSPEC %d found in variable location",
14424 expansion_failed (NULL_TREE
, rtl
,
14425 "UNSPEC hasn't been delegitimized.\n");
14429 if (CONST_POLY_INT_P (rtl
))
14432 if (targetm
.const_not_ok_for_debug_p (rtl
))
14434 expansion_failed (NULL_TREE
, rtl
,
14435 "Expression rejected for debug by the backend.\n");
14439 /* FIXME: Refer to PR60655. It is possible for simplification
14440 of rtl expressions in var tracking to produce such expressions.
14441 We should really identify / validate expressions
14442 enclosed in CONST that can be handled by assemblers on various
14443 targets and only handle legitimate cases here. */
14444 switch (GET_CODE (rtl
))
14455 if (CONSTANT_POOL_ADDRESS_P (rtl
))
14458 get_pool_constant_mark (rtl
, &marked
);
14459 /* If all references to this pool constant were optimized away,
14460 it was not output and thus we can't represent it. */
14463 expansion_failed (NULL_TREE
, rtl
,
14464 "Constant was removed from constant pool.\n");
14469 if (SYMBOL_REF_TLS_MODEL (rtl
) != TLS_MODEL_NONE
)
14472 /* Avoid references to external symbols in debug info, on several targets
14473 the linker might even refuse to link when linking a shared library,
14474 and in many other cases the relocations for .debug_info/.debug_loc are
14475 dropped, so the address becomes zero anyway. Hidden symbols, guaranteed
14476 to be defined within the same shared library or executable are fine. */
14477 if (SYMBOL_REF_EXTERNAL_P (rtl
))
14479 tree decl
= SYMBOL_REF_DECL (rtl
);
14481 if (decl
== NULL
|| !targetm
.binds_local_p (decl
))
14483 expansion_failed (NULL_TREE
, rtl
,
14484 "Symbol not defined in current TU.\n");
14492 /* Return true if constant RTL can be emitted in DW_OP_addr or
14493 DW_AT_const_value. TLS SYMBOL_REFs, external SYMBOL_REFs or
14494 non-marked constant pool SYMBOL_REFs can't be referenced in it. */
14497 const_ok_for_output (rtx rtl
)
14499 if (GET_CODE (rtl
) == SYMBOL_REF
)
14500 return const_ok_for_output_1 (rtl
);
14502 if (GET_CODE (rtl
) == CONST
)
14504 subrtx_var_iterator::array_type array
;
14505 FOR_EACH_SUBRTX_VAR (iter
, array
, XEXP (rtl
, 0), ALL
)
14506 if (!const_ok_for_output_1 (*iter
))
14514 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
14515 if possible, NULL otherwise. */
14518 base_type_for_mode (machine_mode mode
, bool unsignedp
)
14520 dw_die_ref type_die
;
14521 tree type
= lang_hooks
.types
.type_for_mode (mode
, unsignedp
);
14525 switch (TREE_CODE (type
))
14533 type_die
= lookup_type_die (type
);
14535 type_die
= modified_type_die (type
, TYPE_UNQUALIFIED
, false,
14537 if (type_die
== NULL
|| type_die
->die_tag
!= DW_TAG_base_type
)
14542 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
14543 type matching MODE, or, if MODE is narrower than or as wide as
14544 DWARF2_ADDR_SIZE, untyped. Return NULL if the conversion is not
14547 static dw_loc_descr_ref
14548 convert_descriptor_to_mode (scalar_int_mode mode
, dw_loc_descr_ref op
)
14550 machine_mode outer_mode
= mode
;
14551 dw_die_ref type_die
;
14552 dw_loc_descr_ref cvt
;
14554 if (GET_MODE_SIZE (mode
) <= DWARF2_ADDR_SIZE
)
14556 add_loc_descr (&op
, new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0));
14559 type_die
= base_type_for_mode (outer_mode
, 1);
14560 if (type_die
== NULL
)
14562 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
14563 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
14564 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
14565 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
14566 add_loc_descr (&op
, cvt
);
14570 /* Return location descriptor for comparison OP with operands OP0 and OP1. */
14572 static dw_loc_descr_ref
14573 compare_loc_descriptor (enum dwarf_location_atom op
, dw_loc_descr_ref op0
,
14574 dw_loc_descr_ref op1
)
14576 dw_loc_descr_ref ret
= op0
;
14577 add_loc_descr (&ret
, op1
);
14578 add_loc_descr (&ret
, new_loc_descr (op
, 0, 0));
14579 if (STORE_FLAG_VALUE
!= 1)
14581 add_loc_descr (&ret
, int_loc_descriptor (STORE_FLAG_VALUE
));
14582 add_loc_descr (&ret
, new_loc_descr (DW_OP_mul
, 0, 0));
14587 /* Subroutine of scompare_loc_descriptor for the case in which we're
14588 comparing two scalar integer operands OP0 and OP1 that have mode OP_MODE,
14589 and in which OP_MODE is bigger than DWARF2_ADDR_SIZE. */
14591 static dw_loc_descr_ref
14592 scompare_loc_descriptor_wide (enum dwarf_location_atom op
,
14593 scalar_int_mode op_mode
,
14594 dw_loc_descr_ref op0
, dw_loc_descr_ref op1
)
14596 dw_die_ref type_die
= base_type_for_mode (op_mode
, 0);
14597 dw_loc_descr_ref cvt
;
14599 if (type_die
== NULL
)
14601 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
14602 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
14603 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
14604 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
14605 add_loc_descr (&op0
, cvt
);
14606 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
14607 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
14608 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
14609 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
14610 add_loc_descr (&op1
, cvt
);
14611 return compare_loc_descriptor (op
, op0
, op1
);
14614 /* Subroutine of scompare_loc_descriptor for the case in which we're
14615 comparing two scalar integer operands OP0 and OP1 that have mode OP_MODE,
14616 and in which OP_MODE is smaller than DWARF2_ADDR_SIZE. */
14618 static dw_loc_descr_ref
14619 scompare_loc_descriptor_narrow (enum dwarf_location_atom op
, rtx rtl
,
14620 scalar_int_mode op_mode
,
14621 dw_loc_descr_ref op0
, dw_loc_descr_ref op1
)
14623 int shift
= (DWARF2_ADDR_SIZE
- GET_MODE_SIZE (op_mode
)) * BITS_PER_UNIT
;
14624 /* For eq/ne, if the operands are known to be zero-extended,
14625 there is no need to do the fancy shifting up. */
14626 if (op
== DW_OP_eq
|| op
== DW_OP_ne
)
14628 dw_loc_descr_ref last0
, last1
;
14629 for (last0
= op0
; last0
->dw_loc_next
!= NULL
; last0
= last0
->dw_loc_next
)
14631 for (last1
= op1
; last1
->dw_loc_next
!= NULL
; last1
= last1
->dw_loc_next
)
14633 /* deref_size zero extends, and for constants we can check
14634 whether they are zero extended or not. */
14635 if (((last0
->dw_loc_opc
== DW_OP_deref_size
14636 && last0
->dw_loc_oprnd1
.v
.val_int
<= GET_MODE_SIZE (op_mode
))
14637 || (CONST_INT_P (XEXP (rtl
, 0))
14638 && (unsigned HOST_WIDE_INT
) INTVAL (XEXP (rtl
, 0))
14639 == (INTVAL (XEXP (rtl
, 0)) & GET_MODE_MASK (op_mode
))))
14640 && ((last1
->dw_loc_opc
== DW_OP_deref_size
14641 && last1
->dw_loc_oprnd1
.v
.val_int
<= GET_MODE_SIZE (op_mode
))
14642 || (CONST_INT_P (XEXP (rtl
, 1))
14643 && (unsigned HOST_WIDE_INT
) INTVAL (XEXP (rtl
, 1))
14644 == (INTVAL (XEXP (rtl
, 1)) & GET_MODE_MASK (op_mode
)))))
14645 return compare_loc_descriptor (op
, op0
, op1
);
14647 /* EQ/NE comparison against constant in narrower type than
14648 DWARF2_ADDR_SIZE can be performed either as
14649 DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
14652 DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
14653 DW_OP_{eq,ne}. Pick whatever is shorter. */
14654 if (CONST_INT_P (XEXP (rtl
, 1))
14655 && GET_MODE_BITSIZE (op_mode
) < HOST_BITS_PER_WIDE_INT
14656 && (size_of_int_loc_descriptor (shift
) + 1
14657 + size_of_int_loc_descriptor (UINTVAL (XEXP (rtl
, 1)) << shift
)
14658 >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode
)) + 1
14659 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl
, 1))
14660 & GET_MODE_MASK (op_mode
))))
14662 add_loc_descr (&op0
, int_loc_descriptor (GET_MODE_MASK (op_mode
)));
14663 add_loc_descr (&op0
, new_loc_descr (DW_OP_and
, 0, 0));
14664 op1
= int_loc_descriptor (INTVAL (XEXP (rtl
, 1))
14665 & GET_MODE_MASK (op_mode
));
14666 return compare_loc_descriptor (op
, op0
, op1
);
14669 add_loc_descr (&op0
, int_loc_descriptor (shift
));
14670 add_loc_descr (&op0
, new_loc_descr (DW_OP_shl
, 0, 0));
14671 if (CONST_INT_P (XEXP (rtl
, 1)))
14672 op1
= int_loc_descriptor (UINTVAL (XEXP (rtl
, 1)) << shift
);
14675 add_loc_descr (&op1
, int_loc_descriptor (shift
));
14676 add_loc_descr (&op1
, new_loc_descr (DW_OP_shl
, 0, 0));
14678 return compare_loc_descriptor (op
, op0
, op1
);
14681 /* Return location descriptor for unsigned comparison OP RTL. */
14683 static dw_loc_descr_ref
14684 scompare_loc_descriptor (enum dwarf_location_atom op
, rtx rtl
,
14685 machine_mode mem_mode
)
14687 machine_mode op_mode
= GET_MODE (XEXP (rtl
, 0));
14688 dw_loc_descr_ref op0
, op1
;
14690 if (op_mode
== VOIDmode
)
14691 op_mode
= GET_MODE (XEXP (rtl
, 1));
14692 if (op_mode
== VOIDmode
)
14695 scalar_int_mode int_op_mode
;
14697 && dwarf_version
< 5
14698 && (!is_a
<scalar_int_mode
> (op_mode
, &int_op_mode
)
14699 || GET_MODE_SIZE (int_op_mode
) > DWARF2_ADDR_SIZE
))
14702 op0
= mem_loc_descriptor (XEXP (rtl
, 0), op_mode
, mem_mode
,
14703 VAR_INIT_STATUS_INITIALIZED
);
14704 op1
= mem_loc_descriptor (XEXP (rtl
, 1), op_mode
, mem_mode
,
14705 VAR_INIT_STATUS_INITIALIZED
);
14707 if (op0
== NULL
|| op1
== NULL
)
14710 if (is_a
<scalar_int_mode
> (op_mode
, &int_op_mode
))
14712 if (GET_MODE_SIZE (int_op_mode
) < DWARF2_ADDR_SIZE
)
14713 return scompare_loc_descriptor_narrow (op
, rtl
, int_op_mode
, op0
, op1
);
14715 if (GET_MODE_SIZE (int_op_mode
) > DWARF2_ADDR_SIZE
)
14716 return scompare_loc_descriptor_wide (op
, int_op_mode
, op0
, op1
);
14718 return compare_loc_descriptor (op
, op0
, op1
);
14721 /* Return location descriptor for unsigned comparison OP RTL. */
14723 static dw_loc_descr_ref
14724 ucompare_loc_descriptor (enum dwarf_location_atom op
, rtx rtl
,
14725 machine_mode mem_mode
)
14727 dw_loc_descr_ref op0
, op1
;
14729 machine_mode test_op_mode
= GET_MODE (XEXP (rtl
, 0));
14730 if (test_op_mode
== VOIDmode
)
14731 test_op_mode
= GET_MODE (XEXP (rtl
, 1));
14733 scalar_int_mode op_mode
;
14734 if (!is_a
<scalar_int_mode
> (test_op_mode
, &op_mode
))
14738 && dwarf_version
< 5
14739 && GET_MODE_SIZE (op_mode
) > DWARF2_ADDR_SIZE
)
14742 op0
= mem_loc_descriptor (XEXP (rtl
, 0), op_mode
, mem_mode
,
14743 VAR_INIT_STATUS_INITIALIZED
);
14744 op1
= mem_loc_descriptor (XEXP (rtl
, 1), op_mode
, mem_mode
,
14745 VAR_INIT_STATUS_INITIALIZED
);
14747 if (op0
== NULL
|| op1
== NULL
)
14750 if (GET_MODE_SIZE (op_mode
) < DWARF2_ADDR_SIZE
)
14752 HOST_WIDE_INT mask
= GET_MODE_MASK (op_mode
);
14753 dw_loc_descr_ref last0
, last1
;
14754 for (last0
= op0
; last0
->dw_loc_next
!= NULL
; last0
= last0
->dw_loc_next
)
14756 for (last1
= op1
; last1
->dw_loc_next
!= NULL
; last1
= last1
->dw_loc_next
)
14758 if (CONST_INT_P (XEXP (rtl
, 0)))
14759 op0
= int_loc_descriptor (INTVAL (XEXP (rtl
, 0)) & mask
);
14760 /* deref_size zero extends, so no need to mask it again. */
14761 else if (last0
->dw_loc_opc
!= DW_OP_deref_size
14762 || last0
->dw_loc_oprnd1
.v
.val_int
> GET_MODE_SIZE (op_mode
))
14764 add_loc_descr (&op0
, int_loc_descriptor (mask
));
14765 add_loc_descr (&op0
, new_loc_descr (DW_OP_and
, 0, 0));
14767 if (CONST_INT_P (XEXP (rtl
, 1)))
14768 op1
= int_loc_descriptor (INTVAL (XEXP (rtl
, 1)) & mask
);
14769 /* deref_size zero extends, so no need to mask it again. */
14770 else if (last1
->dw_loc_opc
!= DW_OP_deref_size
14771 || last1
->dw_loc_oprnd1
.v
.val_int
> GET_MODE_SIZE (op_mode
))
14773 add_loc_descr (&op1
, int_loc_descriptor (mask
));
14774 add_loc_descr (&op1
, new_loc_descr (DW_OP_and
, 0, 0));
14777 else if (GET_MODE_SIZE (op_mode
) == DWARF2_ADDR_SIZE
)
14779 HOST_WIDE_INT bias
= 1;
14780 bias
<<= (DWARF2_ADDR_SIZE
* BITS_PER_UNIT
- 1);
14781 add_loc_descr (&op0
, new_loc_descr (DW_OP_plus_uconst
, bias
, 0));
14782 if (CONST_INT_P (XEXP (rtl
, 1)))
14783 op1
= int_loc_descriptor ((unsigned HOST_WIDE_INT
) bias
14784 + INTVAL (XEXP (rtl
, 1)));
14786 add_loc_descr (&op1
, new_loc_descr (DW_OP_plus_uconst
,
14789 return compare_loc_descriptor (op
, op0
, op1
);
14792 /* Return location descriptor for {U,S}{MIN,MAX}. */
14794 static dw_loc_descr_ref
14795 minmax_loc_descriptor (rtx rtl
, machine_mode mode
,
14796 machine_mode mem_mode
)
14798 enum dwarf_location_atom op
;
14799 dw_loc_descr_ref op0
, op1
, ret
;
14800 dw_loc_descr_ref bra_node
, drop_node
;
14802 scalar_int_mode int_mode
;
14804 && dwarf_version
< 5
14805 && (!is_a
<scalar_int_mode
> (mode
, &int_mode
)
14806 || GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
))
14809 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
14810 VAR_INIT_STATUS_INITIALIZED
);
14811 op1
= mem_loc_descriptor (XEXP (rtl
, 1), mode
, mem_mode
,
14812 VAR_INIT_STATUS_INITIALIZED
);
14814 if (op0
== NULL
|| op1
== NULL
)
14817 add_loc_descr (&op0
, new_loc_descr (DW_OP_dup
, 0, 0));
14818 add_loc_descr (&op1
, new_loc_descr (DW_OP_swap
, 0, 0));
14819 add_loc_descr (&op1
, new_loc_descr (DW_OP_over
, 0, 0));
14820 if (GET_CODE (rtl
) == UMIN
|| GET_CODE (rtl
) == UMAX
)
14822 /* Checked by the caller. */
14823 int_mode
= as_a
<scalar_int_mode
> (mode
);
14824 if (GET_MODE_SIZE (int_mode
) < DWARF2_ADDR_SIZE
)
14826 HOST_WIDE_INT mask
= GET_MODE_MASK (int_mode
);
14827 add_loc_descr (&op0
, int_loc_descriptor (mask
));
14828 add_loc_descr (&op0
, new_loc_descr (DW_OP_and
, 0, 0));
14829 add_loc_descr (&op1
, int_loc_descriptor (mask
));
14830 add_loc_descr (&op1
, new_loc_descr (DW_OP_and
, 0, 0));
14832 else if (GET_MODE_SIZE (int_mode
) == DWARF2_ADDR_SIZE
)
14834 HOST_WIDE_INT bias
= 1;
14835 bias
<<= (DWARF2_ADDR_SIZE
* BITS_PER_UNIT
- 1);
14836 add_loc_descr (&op0
, new_loc_descr (DW_OP_plus_uconst
, bias
, 0));
14837 add_loc_descr (&op1
, new_loc_descr (DW_OP_plus_uconst
, bias
, 0));
14840 else if (is_a
<scalar_int_mode
> (mode
, &int_mode
)
14841 && GET_MODE_SIZE (int_mode
) < DWARF2_ADDR_SIZE
)
14843 int shift
= (DWARF2_ADDR_SIZE
- GET_MODE_SIZE (int_mode
)) * BITS_PER_UNIT
;
14844 add_loc_descr (&op0
, int_loc_descriptor (shift
));
14845 add_loc_descr (&op0
, new_loc_descr (DW_OP_shl
, 0, 0));
14846 add_loc_descr (&op1
, int_loc_descriptor (shift
));
14847 add_loc_descr (&op1
, new_loc_descr (DW_OP_shl
, 0, 0));
14849 else if (is_a
<scalar_int_mode
> (mode
, &int_mode
)
14850 && GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
)
14852 dw_die_ref type_die
= base_type_for_mode (int_mode
, 0);
14853 dw_loc_descr_ref cvt
;
14854 if (type_die
== NULL
)
14856 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
14857 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
14858 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
14859 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
14860 add_loc_descr (&op0
, cvt
);
14861 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
14862 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
14863 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
14864 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
14865 add_loc_descr (&op1
, cvt
);
14868 if (GET_CODE (rtl
) == SMIN
|| GET_CODE (rtl
) == UMIN
)
14873 add_loc_descr (&ret
, op1
);
14874 add_loc_descr (&ret
, new_loc_descr (op
, 0, 0));
14875 bra_node
= new_loc_descr (DW_OP_bra
, 0, 0);
14876 add_loc_descr (&ret
, bra_node
);
14877 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
14878 drop_node
= new_loc_descr (DW_OP_drop
, 0, 0);
14879 add_loc_descr (&ret
, drop_node
);
14880 bra_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
14881 bra_node
->dw_loc_oprnd1
.v
.val_loc
= drop_node
;
14882 if ((GET_CODE (rtl
) == SMIN
|| GET_CODE (rtl
) == SMAX
)
14883 && is_a
<scalar_int_mode
> (mode
, &int_mode
)
14884 && GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
)
14885 ret
= convert_descriptor_to_mode (int_mode
, ret
);
14889 /* Helper function for mem_loc_descriptor. Perform OP binary op,
14890 but after converting arguments to type_die, afterwards
14891 convert back to unsigned. */
14893 static dw_loc_descr_ref
14894 typed_binop (enum dwarf_location_atom op
, rtx rtl
, dw_die_ref type_die
,
14895 scalar_int_mode mode
, machine_mode mem_mode
)
14897 dw_loc_descr_ref cvt
, op0
, op1
;
14899 if (type_die
== NULL
)
14901 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
14902 VAR_INIT_STATUS_INITIALIZED
);
14903 op1
= mem_loc_descriptor (XEXP (rtl
, 1), mode
, mem_mode
,
14904 VAR_INIT_STATUS_INITIALIZED
);
14905 if (op0
== NULL
|| op1
== NULL
)
14907 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
14908 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
14909 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
14910 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
14911 add_loc_descr (&op0
, cvt
);
14912 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
14913 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
14914 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
14915 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
14916 add_loc_descr (&op1
, cvt
);
14917 add_loc_descr (&op0
, op1
);
14918 add_loc_descr (&op0
, new_loc_descr (op
, 0, 0));
14919 return convert_descriptor_to_mode (mode
, op0
);
14922 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
14923 const0 is DW_OP_lit0 or corresponding typed constant,
14924 const1 is DW_OP_lit1 or corresponding typed constant
14925 and constMSB is constant with just the MSB bit set
14927 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
14928 L1: const0 DW_OP_swap
14929 L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
14930 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
14935 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
14936 L1: const0 DW_OP_swap
14937 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
14938 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
14943 DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
14944 L1: const1 DW_OP_swap
14945 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
14946 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
14950 static dw_loc_descr_ref
14951 clz_loc_descriptor (rtx rtl
, scalar_int_mode mode
,
14952 machine_mode mem_mode
)
14954 dw_loc_descr_ref op0
, ret
, tmp
;
14955 HOST_WIDE_INT valv
;
14956 dw_loc_descr_ref l1jump
, l1label
;
14957 dw_loc_descr_ref l2jump
, l2label
;
14958 dw_loc_descr_ref l3jump
, l3label
;
14959 dw_loc_descr_ref l4jump
, l4label
;
14962 if (GET_MODE (XEXP (rtl
, 0)) != mode
)
14965 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
14966 VAR_INIT_STATUS_INITIALIZED
);
14970 if (GET_CODE (rtl
) == CLZ
)
14972 if (!CLZ_DEFINED_VALUE_AT_ZERO (mode
, valv
))
14973 valv
= GET_MODE_BITSIZE (mode
);
14975 else if (GET_CODE (rtl
) == FFS
)
14977 else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode
, valv
))
14978 valv
= GET_MODE_BITSIZE (mode
);
14979 add_loc_descr (&ret
, new_loc_descr (DW_OP_dup
, 0, 0));
14980 l1jump
= new_loc_descr (DW_OP_bra
, 0, 0);
14981 add_loc_descr (&ret
, l1jump
);
14982 add_loc_descr (&ret
, new_loc_descr (DW_OP_drop
, 0, 0));
14983 tmp
= mem_loc_descriptor (GEN_INT (valv
), mode
, mem_mode
,
14984 VAR_INIT_STATUS_INITIALIZED
);
14987 add_loc_descr (&ret
, tmp
);
14988 l4jump
= new_loc_descr (DW_OP_skip
, 0, 0);
14989 add_loc_descr (&ret
, l4jump
);
14990 l1label
= mem_loc_descriptor (GET_CODE (rtl
) == FFS
14991 ? const1_rtx
: const0_rtx
,
14993 VAR_INIT_STATUS_INITIALIZED
);
14994 if (l1label
== NULL
)
14996 add_loc_descr (&ret
, l1label
);
14997 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
14998 l2label
= new_loc_descr (DW_OP_dup
, 0, 0);
14999 add_loc_descr (&ret
, l2label
);
15000 if (GET_CODE (rtl
) != CLZ
)
15002 else if (GET_MODE_BITSIZE (mode
) <= HOST_BITS_PER_WIDE_INT
)
15003 msb
= GEN_INT (HOST_WIDE_INT_1U
15004 << (GET_MODE_BITSIZE (mode
) - 1));
15006 msb
= immed_wide_int_const
15007 (wi::set_bit_in_zero (GET_MODE_PRECISION (mode
) - 1,
15008 GET_MODE_PRECISION (mode
)), mode
);
15009 if (GET_CODE (msb
) == CONST_INT
&& INTVAL (msb
) < 0)
15010 tmp
= new_loc_descr (HOST_BITS_PER_WIDE_INT
== 32
15011 ? DW_OP_const4u
: HOST_BITS_PER_WIDE_INT
== 64
15012 ? DW_OP_const8u
: DW_OP_constu
, INTVAL (msb
), 0);
15014 tmp
= mem_loc_descriptor (msb
, mode
, mem_mode
,
15015 VAR_INIT_STATUS_INITIALIZED
);
15018 add_loc_descr (&ret
, tmp
);
15019 add_loc_descr (&ret
, new_loc_descr (DW_OP_and
, 0, 0));
15020 l3jump
= new_loc_descr (DW_OP_bra
, 0, 0);
15021 add_loc_descr (&ret
, l3jump
);
15022 tmp
= mem_loc_descriptor (const1_rtx
, mode
, mem_mode
,
15023 VAR_INIT_STATUS_INITIALIZED
);
15026 add_loc_descr (&ret
, tmp
);
15027 add_loc_descr (&ret
, new_loc_descr (GET_CODE (rtl
) == CLZ
15028 ? DW_OP_shl
: DW_OP_shr
, 0, 0));
15029 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15030 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus_uconst
, 1, 0));
15031 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15032 l2jump
= new_loc_descr (DW_OP_skip
, 0, 0);
15033 add_loc_descr (&ret
, l2jump
);
15034 l3label
= new_loc_descr (DW_OP_drop
, 0, 0);
15035 add_loc_descr (&ret
, l3label
);
15036 l4label
= new_loc_descr (DW_OP_nop
, 0, 0);
15037 add_loc_descr (&ret
, l4label
);
15038 l1jump
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15039 l1jump
->dw_loc_oprnd1
.v
.val_loc
= l1label
;
15040 l2jump
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15041 l2jump
->dw_loc_oprnd1
.v
.val_loc
= l2label
;
15042 l3jump
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15043 l3jump
->dw_loc_oprnd1
.v
.val_loc
= l3label
;
15044 l4jump
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15045 l4jump
->dw_loc_oprnd1
.v
.val_loc
= l4label
;
15049 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
15050 const1 is DW_OP_lit1 or corresponding typed constant):
15052 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
15053 DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
15057 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
15058 DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
15061 static dw_loc_descr_ref
15062 popcount_loc_descriptor (rtx rtl
, scalar_int_mode mode
,
15063 machine_mode mem_mode
)
15065 dw_loc_descr_ref op0
, ret
, tmp
;
15066 dw_loc_descr_ref l1jump
, l1label
;
15067 dw_loc_descr_ref l2jump
, l2label
;
15069 if (GET_MODE (XEXP (rtl
, 0)) != mode
)
15072 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
15073 VAR_INIT_STATUS_INITIALIZED
);
15077 tmp
= mem_loc_descriptor (const0_rtx
, mode
, mem_mode
,
15078 VAR_INIT_STATUS_INITIALIZED
);
15081 add_loc_descr (&ret
, tmp
);
15082 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15083 l1label
= new_loc_descr (DW_OP_dup
, 0, 0);
15084 add_loc_descr (&ret
, l1label
);
15085 l2jump
= new_loc_descr (DW_OP_bra
, 0, 0);
15086 add_loc_descr (&ret
, l2jump
);
15087 add_loc_descr (&ret
, new_loc_descr (DW_OP_dup
, 0, 0));
15088 add_loc_descr (&ret
, new_loc_descr (DW_OP_rot
, 0, 0));
15089 tmp
= mem_loc_descriptor (const1_rtx
, mode
, mem_mode
,
15090 VAR_INIT_STATUS_INITIALIZED
);
15093 add_loc_descr (&ret
, tmp
);
15094 add_loc_descr (&ret
, new_loc_descr (DW_OP_and
, 0, 0));
15095 add_loc_descr (&ret
, new_loc_descr (GET_CODE (rtl
) == POPCOUNT
15096 ? DW_OP_plus
: DW_OP_xor
, 0, 0));
15097 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15098 tmp
= mem_loc_descriptor (const1_rtx
, mode
, mem_mode
,
15099 VAR_INIT_STATUS_INITIALIZED
);
15100 add_loc_descr (&ret
, tmp
);
15101 add_loc_descr (&ret
, new_loc_descr (DW_OP_shr
, 0, 0));
15102 l1jump
= new_loc_descr (DW_OP_skip
, 0, 0);
15103 add_loc_descr (&ret
, l1jump
);
15104 l2label
= new_loc_descr (DW_OP_drop
, 0, 0);
15105 add_loc_descr (&ret
, l2label
);
15106 l1jump
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15107 l1jump
->dw_loc_oprnd1
.v
.val_loc
= l1label
;
15108 l2jump
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15109 l2jump
->dw_loc_oprnd1
.v
.val_loc
= l2label
;
15113 /* BSWAP (constS is initial shift count, either 56 or 24):
15115 L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
15116 const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
15117 DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
15118 DW_OP_minus DW_OP_swap DW_OP_skip <L1>
15119 L2: DW_OP_drop DW_OP_swap DW_OP_drop */
15121 static dw_loc_descr_ref
15122 bswap_loc_descriptor (rtx rtl
, scalar_int_mode mode
,
15123 machine_mode mem_mode
)
15125 dw_loc_descr_ref op0
, ret
, tmp
;
15126 dw_loc_descr_ref l1jump
, l1label
;
15127 dw_loc_descr_ref l2jump
, l2label
;
15129 if (BITS_PER_UNIT
!= 8
15130 || (GET_MODE_BITSIZE (mode
) != 32
15131 && GET_MODE_BITSIZE (mode
) != 64))
15134 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
15135 VAR_INIT_STATUS_INITIALIZED
);
15140 tmp
= mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode
) - 8),
15142 VAR_INIT_STATUS_INITIALIZED
);
15145 add_loc_descr (&ret
, tmp
);
15146 tmp
= mem_loc_descriptor (const0_rtx
, mode
, mem_mode
,
15147 VAR_INIT_STATUS_INITIALIZED
);
15150 add_loc_descr (&ret
, tmp
);
15151 l1label
= new_loc_descr (DW_OP_pick
, 2, 0);
15152 add_loc_descr (&ret
, l1label
);
15153 tmp
= mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode
) - 8),
15155 VAR_INIT_STATUS_INITIALIZED
);
15156 add_loc_descr (&ret
, tmp
);
15157 add_loc_descr (&ret
, new_loc_descr (DW_OP_pick
, 3, 0));
15158 add_loc_descr (&ret
, new_loc_descr (DW_OP_minus
, 0, 0));
15159 add_loc_descr (&ret
, new_loc_descr (DW_OP_shr
, 0, 0));
15160 tmp
= mem_loc_descriptor (GEN_INT (255), mode
, mem_mode
,
15161 VAR_INIT_STATUS_INITIALIZED
);
15164 add_loc_descr (&ret
, tmp
);
15165 add_loc_descr (&ret
, new_loc_descr (DW_OP_and
, 0, 0));
15166 add_loc_descr (&ret
, new_loc_descr (DW_OP_pick
, 2, 0));
15167 add_loc_descr (&ret
, new_loc_descr (DW_OP_shl
, 0, 0));
15168 add_loc_descr (&ret
, new_loc_descr (DW_OP_or
, 0, 0));
15169 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15170 add_loc_descr (&ret
, new_loc_descr (DW_OP_dup
, 0, 0));
15171 tmp
= mem_loc_descriptor (const0_rtx
, mode
, mem_mode
,
15172 VAR_INIT_STATUS_INITIALIZED
);
15173 add_loc_descr (&ret
, tmp
);
15174 add_loc_descr (&ret
, new_loc_descr (DW_OP_eq
, 0, 0));
15175 l2jump
= new_loc_descr (DW_OP_bra
, 0, 0);
15176 add_loc_descr (&ret
, l2jump
);
15177 tmp
= mem_loc_descriptor (GEN_INT (8), mode
, mem_mode
,
15178 VAR_INIT_STATUS_INITIALIZED
);
15179 add_loc_descr (&ret
, tmp
);
15180 add_loc_descr (&ret
, new_loc_descr (DW_OP_minus
, 0, 0));
15181 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15182 l1jump
= new_loc_descr (DW_OP_skip
, 0, 0);
15183 add_loc_descr (&ret
, l1jump
);
15184 l2label
= new_loc_descr (DW_OP_drop
, 0, 0);
15185 add_loc_descr (&ret
, l2label
);
15186 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15187 add_loc_descr (&ret
, new_loc_descr (DW_OP_drop
, 0, 0));
15188 l1jump
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15189 l1jump
->dw_loc_oprnd1
.v
.val_loc
= l1label
;
15190 l2jump
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15191 l2jump
->dw_loc_oprnd1
.v
.val_loc
= l2label
;
15195 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
15196 DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
15197 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
15198 DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
15200 ROTATERT is similar:
15201 DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
15202 DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
15203 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or */
15205 static dw_loc_descr_ref
15206 rotate_loc_descriptor (rtx rtl
, scalar_int_mode mode
,
15207 machine_mode mem_mode
)
15209 rtx rtlop1
= XEXP (rtl
, 1);
15210 dw_loc_descr_ref op0
, op1
, ret
, mask
[2] = { NULL
, NULL
};
15213 if (is_narrower_int_mode (GET_MODE (rtlop1
), mode
))
15214 rtlop1
= gen_rtx_ZERO_EXTEND (mode
, rtlop1
);
15215 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
15216 VAR_INIT_STATUS_INITIALIZED
);
15217 op1
= mem_loc_descriptor (rtlop1
, mode
, mem_mode
,
15218 VAR_INIT_STATUS_INITIALIZED
);
15219 if (op0
== NULL
|| op1
== NULL
)
15221 if (GET_MODE_SIZE (mode
) < DWARF2_ADDR_SIZE
)
15222 for (i
= 0; i
< 2; i
++)
15224 if (GET_MODE_BITSIZE (mode
) < HOST_BITS_PER_WIDE_INT
)
15225 mask
[i
] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode
)),
15227 VAR_INIT_STATUS_INITIALIZED
);
15228 else if (GET_MODE_BITSIZE (mode
) == HOST_BITS_PER_WIDE_INT
)
15229 mask
[i
] = new_loc_descr (HOST_BITS_PER_WIDE_INT
== 32
15231 : HOST_BITS_PER_WIDE_INT
== 64
15232 ? DW_OP_const8u
: DW_OP_constu
,
15233 GET_MODE_MASK (mode
), 0);
15236 if (mask
[i
] == NULL
)
15238 add_loc_descr (&mask
[i
], new_loc_descr (DW_OP_and
, 0, 0));
15241 add_loc_descr (&ret
, op1
);
15242 add_loc_descr (&ret
, new_loc_descr (DW_OP_over
, 0, 0));
15243 add_loc_descr (&ret
, new_loc_descr (DW_OP_over
, 0, 0));
15244 if (GET_CODE (rtl
) == ROTATERT
)
15246 add_loc_descr (&ret
, new_loc_descr (DW_OP_neg
, 0, 0));
15247 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus_uconst
,
15248 GET_MODE_BITSIZE (mode
), 0));
15250 add_loc_descr (&ret
, new_loc_descr (DW_OP_shl
, 0, 0));
15251 if (mask
[0] != NULL
)
15252 add_loc_descr (&ret
, mask
[0]);
15253 add_loc_descr (&ret
, new_loc_descr (DW_OP_rot
, 0, 0));
15254 if (mask
[1] != NULL
)
15256 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15257 add_loc_descr (&ret
, mask
[1]);
15258 add_loc_descr (&ret
, new_loc_descr (DW_OP_swap
, 0, 0));
15260 if (GET_CODE (rtl
) == ROTATE
)
15262 add_loc_descr (&ret
, new_loc_descr (DW_OP_neg
, 0, 0));
15263 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus_uconst
,
15264 GET_MODE_BITSIZE (mode
), 0));
15266 add_loc_descr (&ret
, new_loc_descr (DW_OP_shr
, 0, 0));
15267 add_loc_descr (&ret
, new_loc_descr (DW_OP_or
, 0, 0));
15271 /* Helper function for mem_loc_descriptor. Return DW_OP_GNU_parameter_ref
15272 for DEBUG_PARAMETER_REF RTL. */
15274 static dw_loc_descr_ref
15275 parameter_ref_descriptor (rtx rtl
)
15277 dw_loc_descr_ref ret
;
15282 gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl
)) == PARM_DECL
);
15283 /* With LTO during LTRANS we get the late DIE that refers to the early
15284 DIE, thus we add another indirection here. This seems to confuse
15285 gdb enough to make gcc.dg/guality/pr68860-1.c FAIL with LTO. */
15286 ref
= lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl
));
15287 ret
= new_loc_descr (DW_OP_GNU_parameter_ref
, 0, 0);
15290 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
15291 ret
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
15292 ret
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
15296 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_decl_ref
;
15297 ret
->dw_loc_oprnd1
.v
.val_decl_ref
= DEBUG_PARAMETER_REF_DECL (rtl
);
15302 /* The following routine converts the RTL for a variable or parameter
15303 (resident in memory) into an equivalent Dwarf representation of a
15304 mechanism for getting the address of that same variable onto the top of a
15305 hypothetical "address evaluation" stack.
15307 When creating memory location descriptors, we are effectively transforming
15308 the RTL for a memory-resident object into its Dwarf postfix expression
15309 equivalent. This routine recursively descends an RTL tree, turning
15310 it into Dwarf postfix code as it goes.
15312 MODE is the mode that should be assumed for the rtl if it is VOIDmode.
15314 MEM_MODE is the mode of the memory reference, needed to handle some
15315 autoincrement addressing modes.
15317 Return 0 if we can't represent the location. */
15320 mem_loc_descriptor (rtx rtl
, machine_mode mode
,
15321 machine_mode mem_mode
,
15322 enum var_init_status initialized
)
15324 dw_loc_descr_ref mem_loc_result
= NULL
;
15325 enum dwarf_location_atom op
;
15326 dw_loc_descr_ref op0
, op1
;
15327 rtx inner
= NULL_RTX
;
15330 if (mode
== VOIDmode
)
15331 mode
= GET_MODE (rtl
);
15333 /* Note that for a dynamically sized array, the location we will generate a
15334 description of here will be the lowest numbered location which is
15335 actually within the array. That's *not* necessarily the same as the
15336 zeroth element of the array. */
15338 rtl
= targetm
.delegitimize_address (rtl
);
15340 if (mode
!= GET_MODE (rtl
) && GET_MODE (rtl
) != VOIDmode
)
15343 scalar_int_mode int_mode
, inner_mode
, op1_mode
;
15344 switch (GET_CODE (rtl
))
15349 return mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
, initialized
);
15352 /* The case of a subreg may arise when we have a local (register)
15353 variable or a formal (register) parameter which doesn't quite fill
15354 up an entire register. For now, just assume that it is
15355 legitimate to make the Dwarf info refer to the whole register which
15356 contains the given subreg. */
15357 if (!subreg_lowpart_p (rtl
))
15359 inner
= SUBREG_REG (rtl
);
15362 if (inner
== NULL_RTX
)
15363 inner
= XEXP (rtl
, 0);
15364 if (is_a
<scalar_int_mode
> (mode
, &int_mode
)
15365 && is_a
<scalar_int_mode
> (GET_MODE (inner
), &inner_mode
)
15366 && (GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
15367 #ifdef POINTERS_EXTEND_UNSIGNED
15368 || (int_mode
== Pmode
&& mem_mode
!= VOIDmode
)
15371 && GET_MODE_SIZE (inner_mode
) <= DWARF2_ADDR_SIZE
)
15373 mem_loc_result
= mem_loc_descriptor (inner
,
15375 mem_mode
, initialized
);
15378 if (dwarf_strict
&& dwarf_version
< 5)
15380 if (is_a
<scalar_int_mode
> (mode
, &int_mode
)
15381 && is_a
<scalar_int_mode
> (GET_MODE (inner
), &inner_mode
)
15382 ? GET_MODE_SIZE (int_mode
) <= GET_MODE_SIZE (inner_mode
)
15383 : known_eq (GET_MODE_SIZE (mode
), GET_MODE_SIZE (GET_MODE (inner
))))
15385 dw_die_ref type_die
;
15386 dw_loc_descr_ref cvt
;
15388 mem_loc_result
= mem_loc_descriptor (inner
,
15390 mem_mode
, initialized
);
15391 if (mem_loc_result
== NULL
)
15393 type_die
= base_type_for_mode (mode
, SCALAR_INT_MODE_P (mode
));
15394 if (type_die
== NULL
)
15396 mem_loc_result
= NULL
;
15399 if (maybe_ne (GET_MODE_SIZE (mode
), GET_MODE_SIZE (GET_MODE (inner
))))
15400 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
15402 cvt
= new_loc_descr (dwarf_OP (DW_OP_reinterpret
), 0, 0);
15403 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
15404 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
15405 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
15406 add_loc_descr (&mem_loc_result
, cvt
);
15407 if (is_a
<scalar_int_mode
> (mode
, &int_mode
)
15408 && GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
)
15410 /* Convert it to untyped afterwards. */
15411 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
15412 add_loc_descr (&mem_loc_result
, cvt
);
15418 if (!is_a
<scalar_int_mode
> (mode
, &int_mode
)
15419 || (GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
15420 && rtl
!= arg_pointer_rtx
15421 && rtl
!= frame_pointer_rtx
15422 #ifdef POINTERS_EXTEND_UNSIGNED
15423 && (int_mode
!= Pmode
|| mem_mode
== VOIDmode
)
15427 dw_die_ref type_die
;
15428 unsigned int dbx_regnum
;
15430 if (dwarf_strict
&& dwarf_version
< 5)
15432 if (REGNO (rtl
) >= FIRST_PSEUDO_REGISTER
)
15434 type_die
= base_type_for_mode (mode
, SCALAR_INT_MODE_P (mode
));
15435 if (type_die
== NULL
)
15438 dbx_regnum
= dbx_reg_number (rtl
);
15439 if (dbx_regnum
== IGNORED_DWARF_REGNUM
)
15441 mem_loc_result
= new_loc_descr (dwarf_OP (DW_OP_regval_type
),
15443 mem_loc_result
->dw_loc_oprnd2
.val_class
= dw_val_class_die_ref
;
15444 mem_loc_result
->dw_loc_oprnd2
.v
.val_die_ref
.die
= type_die
;
15445 mem_loc_result
->dw_loc_oprnd2
.v
.val_die_ref
.external
= 0;
15448 /* Whenever a register number forms a part of the description of the
15449 method for calculating the (dynamic) address of a memory resident
15450 object, DWARF rules require the register number be referred to as
15451 a "base register". This distinction is not based in any way upon
15452 what category of register the hardware believes the given register
15453 belongs to. This is strictly DWARF terminology we're dealing with
15454 here. Note that in cases where the location of a memory-resident
15455 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
15456 OP_CONST (0)) the actual DWARF location descriptor that we generate
15457 may just be OP_BASEREG (basereg). This may look deceptively like
15458 the object in question was allocated to a register (rather than in
15459 memory) so DWARF consumers need to be aware of the subtle
15460 distinction between OP_REG and OP_BASEREG. */
15461 if (REGNO (rtl
) < FIRST_PSEUDO_REGISTER
)
15462 mem_loc_result
= based_loc_descr (rtl
, 0, VAR_INIT_STATUS_INITIALIZED
);
15463 else if (stack_realign_drap
15465 && crtl
->args
.internal_arg_pointer
== rtl
15466 && REGNO (crtl
->drap_reg
) < FIRST_PSEUDO_REGISTER
)
15468 /* If RTL is internal_arg_pointer, which has been optimized
15469 out, use DRAP instead. */
15470 mem_loc_result
= based_loc_descr (crtl
->drap_reg
, 0,
15471 VAR_INIT_STATUS_INITIALIZED
);
15477 if (!is_a
<scalar_int_mode
> (mode
, &int_mode
)
15478 || !is_a
<scalar_int_mode
> (GET_MODE (XEXP (rtl
, 0)), &inner_mode
))
15480 op0
= mem_loc_descriptor (XEXP (rtl
, 0), inner_mode
,
15481 mem_mode
, VAR_INIT_STATUS_INITIALIZED
);
15484 else if (GET_CODE (rtl
) == ZERO_EXTEND
15485 && GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
15486 && GET_MODE_BITSIZE (inner_mode
) < HOST_BITS_PER_WIDE_INT
15487 /* If DW_OP_const{1,2,4}u won't be used, it is shorter
15488 to expand zero extend as two shifts instead of
15490 && GET_MODE_SIZE (inner_mode
) <= 4)
15492 mem_loc_result
= op0
;
15493 add_loc_descr (&mem_loc_result
,
15494 int_loc_descriptor (GET_MODE_MASK (inner_mode
)));
15495 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_and
, 0, 0));
15497 else if (GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
)
15499 int shift
= DWARF2_ADDR_SIZE
- GET_MODE_SIZE (inner_mode
);
15500 shift
*= BITS_PER_UNIT
;
15501 if (GET_CODE (rtl
) == SIGN_EXTEND
)
15505 mem_loc_result
= op0
;
15506 add_loc_descr (&mem_loc_result
, int_loc_descriptor (shift
));
15507 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_shl
, 0, 0));
15508 add_loc_descr (&mem_loc_result
, int_loc_descriptor (shift
));
15509 add_loc_descr (&mem_loc_result
, new_loc_descr (op
, 0, 0));
15511 else if (!dwarf_strict
|| dwarf_version
>= 5)
15513 dw_die_ref type_die1
, type_die2
;
15514 dw_loc_descr_ref cvt
;
15516 type_die1
= base_type_for_mode (inner_mode
,
15517 GET_CODE (rtl
) == ZERO_EXTEND
);
15518 if (type_die1
== NULL
)
15520 type_die2
= base_type_for_mode (int_mode
, 1);
15521 if (type_die2
== NULL
)
15523 mem_loc_result
= op0
;
15524 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
15525 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
15526 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die1
;
15527 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
15528 add_loc_descr (&mem_loc_result
, cvt
);
15529 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
15530 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
15531 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die2
;
15532 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
15533 add_loc_descr (&mem_loc_result
, cvt
);
15539 rtx new_rtl
= avoid_constant_pool_reference (rtl
);
15540 if (new_rtl
!= rtl
)
15542 mem_loc_result
= mem_loc_descriptor (new_rtl
, mode
, mem_mode
,
15544 if (mem_loc_result
!= NULL
)
15545 return mem_loc_result
;
15548 mem_loc_result
= mem_loc_descriptor (XEXP (rtl
, 0),
15549 get_address_mode (rtl
), mode
,
15550 VAR_INIT_STATUS_INITIALIZED
);
15551 if (mem_loc_result
== NULL
)
15552 mem_loc_result
= tls_mem_loc_descriptor (rtl
);
15553 if (mem_loc_result
!= NULL
)
15555 if (!is_a
<scalar_int_mode
> (mode
, &int_mode
)
15556 || GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
)
15558 dw_die_ref type_die
;
15559 dw_loc_descr_ref deref
;
15560 HOST_WIDE_INT size
;
15562 if (dwarf_strict
&& dwarf_version
< 5)
15564 if (!GET_MODE_SIZE (mode
).is_constant (&size
))
15567 = base_type_for_mode (mode
, SCALAR_INT_MODE_P (mode
));
15568 if (type_die
== NULL
)
15570 deref
= new_loc_descr (dwarf_OP (DW_OP_deref_type
), size
, 0);
15571 deref
->dw_loc_oprnd2
.val_class
= dw_val_class_die_ref
;
15572 deref
->dw_loc_oprnd2
.v
.val_die_ref
.die
= type_die
;
15573 deref
->dw_loc_oprnd2
.v
.val_die_ref
.external
= 0;
15574 add_loc_descr (&mem_loc_result
, deref
);
15576 else if (GET_MODE_SIZE (int_mode
) == DWARF2_ADDR_SIZE
)
15577 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_deref
, 0, 0));
15579 add_loc_descr (&mem_loc_result
,
15580 new_loc_descr (DW_OP_deref_size
,
15581 GET_MODE_SIZE (int_mode
), 0));
15586 return mem_loc_descriptor (XEXP (rtl
, 1), mode
, mem_mode
, initialized
);
15589 /* Some ports can transform a symbol ref into a label ref, because
15590 the symbol ref is too far away and has to be dumped into a constant
15594 if (!is_a
<scalar_int_mode
> (mode
, &int_mode
)
15595 || (GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
15596 #ifdef POINTERS_EXTEND_UNSIGNED
15597 && (int_mode
!= Pmode
|| mem_mode
== VOIDmode
)
15601 if (GET_CODE (rtl
) == SYMBOL_REF
15602 && SYMBOL_REF_TLS_MODEL (rtl
) != TLS_MODEL_NONE
)
15604 dw_loc_descr_ref temp
;
15606 /* If this is not defined, we have no way to emit the data. */
15607 if (!targetm
.have_tls
|| !targetm
.asm_out
.output_dwarf_dtprel
)
15610 temp
= new_addr_loc_descr (rtl
, dtprel_true
);
15612 /* We check for DWARF 5 here because gdb did not implement
15613 DW_OP_form_tls_address until after 7.12. */
15614 mem_loc_result
= new_loc_descr ((dwarf_version
>= 5
15615 ? DW_OP_form_tls_address
15616 : DW_OP_GNU_push_tls_address
),
15618 add_loc_descr (&mem_loc_result
, temp
);
15623 if (!const_ok_for_output (rtl
))
15625 if (GET_CODE (rtl
) == CONST
)
15626 switch (GET_CODE (XEXP (rtl
, 0)))
15630 goto try_const_unop
;
15633 goto try_const_unop
;
15636 arg
= XEXP (XEXP (rtl
, 0), 0);
15637 if (!CONSTANT_P (arg
))
15638 arg
= gen_rtx_CONST (int_mode
, arg
);
15639 op0
= mem_loc_descriptor (arg
, int_mode
, mem_mode
,
15643 mem_loc_result
= op0
;
15644 add_loc_descr (&mem_loc_result
, new_loc_descr (op
, 0, 0));
15648 mem_loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), int_mode
,
15649 mem_mode
, initialized
);
15656 mem_loc_result
= new_addr_loc_descr (rtl
, dtprel_false
);
15657 vec_safe_push (used_rtx_array
, rtl
);
15663 case DEBUG_IMPLICIT_PTR
:
15664 expansion_failed (NULL_TREE
, rtl
,
15665 "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
15669 if (dwarf_strict
&& dwarf_version
< 5)
15671 if (REG_P (ENTRY_VALUE_EXP (rtl
)))
15673 if (!is_a
<scalar_int_mode
> (mode
, &int_mode
)
15674 || GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
)
15675 op0
= mem_loc_descriptor (ENTRY_VALUE_EXP (rtl
), mode
,
15676 VOIDmode
, VAR_INIT_STATUS_INITIALIZED
);
15679 unsigned int dbx_regnum
= dbx_reg_number (ENTRY_VALUE_EXP (rtl
));
15680 if (dbx_regnum
== IGNORED_DWARF_REGNUM
)
15682 op0
= one_reg_loc_descriptor (dbx_regnum
,
15683 VAR_INIT_STATUS_INITIALIZED
);
15686 else if (MEM_P (ENTRY_VALUE_EXP (rtl
))
15687 && REG_P (XEXP (ENTRY_VALUE_EXP (rtl
), 0)))
15689 op0
= mem_loc_descriptor (ENTRY_VALUE_EXP (rtl
), mode
,
15690 VOIDmode
, VAR_INIT_STATUS_INITIALIZED
);
15691 if (op0
&& op0
->dw_loc_opc
== DW_OP_fbreg
)
15695 gcc_unreachable ();
15698 mem_loc_result
= new_loc_descr (dwarf_OP (DW_OP_entry_value
), 0, 0);
15699 mem_loc_result
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
15700 mem_loc_result
->dw_loc_oprnd1
.v
.val_loc
= op0
;
15703 case DEBUG_PARAMETER_REF
:
15704 mem_loc_result
= parameter_ref_descriptor (rtl
);
15708 /* Extract the PLUS expression nested inside and fall into
15709 PLUS code below. */
15710 rtl
= XEXP (rtl
, 1);
15715 /* Turn these into a PLUS expression and fall into the PLUS code
15717 rtl
= gen_rtx_PLUS (mode
, XEXP (rtl
, 0),
15718 gen_int_mode (GET_CODE (rtl
) == PRE_INC
15719 ? GET_MODE_UNIT_SIZE (mem_mode
)
15720 : -GET_MODE_UNIT_SIZE (mem_mode
),
15727 if (is_based_loc (rtl
)
15728 && is_a
<scalar_int_mode
> (mode
, &int_mode
)
15729 && (GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
15730 || XEXP (rtl
, 0) == arg_pointer_rtx
15731 || XEXP (rtl
, 0) == frame_pointer_rtx
))
15732 mem_loc_result
= based_loc_descr (XEXP (rtl
, 0),
15733 INTVAL (XEXP (rtl
, 1)),
15734 VAR_INIT_STATUS_INITIALIZED
);
15737 mem_loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
15738 VAR_INIT_STATUS_INITIALIZED
);
15739 if (mem_loc_result
== 0)
15742 if (CONST_INT_P (XEXP (rtl
, 1))
15743 && (GET_MODE_SIZE (as_a
<scalar_int_mode
> (mode
))
15744 <= DWARF2_ADDR_SIZE
))
15745 loc_descr_plus_const (&mem_loc_result
, INTVAL (XEXP (rtl
, 1)));
15748 op1
= mem_loc_descriptor (XEXP (rtl
, 1), mode
, mem_mode
,
15749 VAR_INIT_STATUS_INITIALIZED
);
15752 add_loc_descr (&mem_loc_result
, op1
);
15753 add_loc_descr (&mem_loc_result
,
15754 new_loc_descr (DW_OP_plus
, 0, 0));
15759 /* If a pseudo-reg is optimized away, it is possible for it to
15760 be replaced with a MEM containing a multiply or shift. */
15770 if ((!dwarf_strict
|| dwarf_version
>= 5)
15771 && is_a
<scalar_int_mode
> (mode
, &int_mode
)
15772 && GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
)
15774 mem_loc_result
= typed_binop (DW_OP_div
, rtl
,
15775 base_type_for_mode (mode
, 0),
15776 int_mode
, mem_mode
);
15799 if (!is_a
<scalar_int_mode
> (mode
, &int_mode
))
15801 op0
= mem_loc_descriptor (XEXP (rtl
, 0), int_mode
, mem_mode
,
15802 VAR_INIT_STATUS_INITIALIZED
);
15804 rtx rtlop1
= XEXP (rtl
, 1);
15805 if (is_a
<scalar_int_mode
> (GET_MODE (rtlop1
), &op1_mode
)
15806 && GET_MODE_BITSIZE (op1_mode
) < GET_MODE_BITSIZE (int_mode
))
15807 rtlop1
= gen_rtx_ZERO_EXTEND (int_mode
, rtlop1
);
15808 op1
= mem_loc_descriptor (rtlop1
, int_mode
, mem_mode
,
15809 VAR_INIT_STATUS_INITIALIZED
);
15812 if (op0
== 0 || op1
== 0)
15815 mem_loc_result
= op0
;
15816 add_loc_descr (&mem_loc_result
, op1
);
15817 add_loc_descr (&mem_loc_result
, new_loc_descr (op
, 0, 0));
15833 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
15834 VAR_INIT_STATUS_INITIALIZED
);
15835 op1
= mem_loc_descriptor (XEXP (rtl
, 1), mode
, mem_mode
,
15836 VAR_INIT_STATUS_INITIALIZED
);
15838 if (op0
== 0 || op1
== 0)
15841 mem_loc_result
= op0
;
15842 add_loc_descr (&mem_loc_result
, op1
);
15843 add_loc_descr (&mem_loc_result
, new_loc_descr (op
, 0, 0));
15847 if ((!dwarf_strict
|| dwarf_version
>= 5)
15848 && is_a
<scalar_int_mode
> (mode
, &int_mode
)
15849 && GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
)
15851 mem_loc_result
= typed_binop (DW_OP_mod
, rtl
,
15852 base_type_for_mode (mode
, 0),
15853 int_mode
, mem_mode
);
15857 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
15858 VAR_INIT_STATUS_INITIALIZED
);
15859 op1
= mem_loc_descriptor (XEXP (rtl
, 1), mode
, mem_mode
,
15860 VAR_INIT_STATUS_INITIALIZED
);
15862 if (op0
== 0 || op1
== 0)
15865 mem_loc_result
= op0
;
15866 add_loc_descr (&mem_loc_result
, op1
);
15867 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_over
, 0, 0));
15868 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_over
, 0, 0));
15869 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_div
, 0, 0));
15870 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_mul
, 0, 0));
15871 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_minus
, 0, 0));
15875 if ((!dwarf_strict
|| dwarf_version
>= 5)
15876 && is_a
<scalar_int_mode
> (mode
, &int_mode
))
15878 if (GET_MODE_SIZE (int_mode
) > DWARF2_ADDR_SIZE
)
15883 mem_loc_result
= typed_binop (DW_OP_div
, rtl
,
15884 base_type_for_mode (int_mode
, 1),
15885 int_mode
, mem_mode
);
15902 op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
, mem_mode
,
15903 VAR_INIT_STATUS_INITIALIZED
);
15908 mem_loc_result
= op0
;
15909 add_loc_descr (&mem_loc_result
, new_loc_descr (op
, 0, 0));
15913 if (!is_a
<scalar_int_mode
> (mode
, &int_mode
)
15914 || GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
15915 #ifdef POINTERS_EXTEND_UNSIGNED
15916 || (int_mode
== Pmode
15917 && mem_mode
!= VOIDmode
15918 && trunc_int_for_mode (INTVAL (rtl
), ptr_mode
) == INTVAL (rtl
))
15922 mem_loc_result
= int_loc_descriptor (INTVAL (rtl
));
15925 if ((!dwarf_strict
|| dwarf_version
>= 5)
15926 && (GET_MODE_BITSIZE (int_mode
) == HOST_BITS_PER_WIDE_INT
15927 || GET_MODE_BITSIZE (int_mode
) == HOST_BITS_PER_DOUBLE_INT
))
15929 dw_die_ref type_die
= base_type_for_mode (int_mode
, 1);
15930 scalar_int_mode amode
;
15931 if (type_die
== NULL
)
15933 if (INTVAL (rtl
) >= 0
15934 && (int_mode_for_size (DWARF2_ADDR_SIZE
* BITS_PER_UNIT
, 0)
15936 && trunc_int_for_mode (INTVAL (rtl
), amode
) == INTVAL (rtl
)
15937 /* const DW_OP_convert <XXX> vs.
15938 DW_OP_const_type <XXX, 1, const>. */
15939 && size_of_int_loc_descriptor (INTVAL (rtl
)) + 1 + 1
15940 < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (int_mode
))
15942 mem_loc_result
= int_loc_descriptor (INTVAL (rtl
));
15943 op0
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
15944 op0
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
15945 op0
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
15946 op0
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
15947 add_loc_descr (&mem_loc_result
, op0
);
15948 return mem_loc_result
;
15950 mem_loc_result
= new_loc_descr (dwarf_OP (DW_OP_const_type
), 0,
15952 mem_loc_result
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
15953 mem_loc_result
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
15954 mem_loc_result
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
15955 if (GET_MODE_BITSIZE (int_mode
) == HOST_BITS_PER_WIDE_INT
)
15956 mem_loc_result
->dw_loc_oprnd2
.val_class
= dw_val_class_const
;
15959 mem_loc_result
->dw_loc_oprnd2
.val_class
15960 = dw_val_class_const_double
;
15961 mem_loc_result
->dw_loc_oprnd2
.v
.val_double
15962 = double_int::from_shwi (INTVAL (rtl
));
15968 if (!dwarf_strict
|| dwarf_version
>= 5)
15970 dw_die_ref type_die
;
15972 /* Note that if TARGET_SUPPORTS_WIDE_INT == 0, a
15973 CONST_DOUBLE rtx could represent either a large integer
15974 or a floating-point constant. If TARGET_SUPPORTS_WIDE_INT != 0,
15975 the value is always a floating point constant.
15977 When it is an integer, a CONST_DOUBLE is used whenever
15978 the constant requires 2 HWIs to be adequately represented.
15979 We output CONST_DOUBLEs as blocks. */
15980 if (mode
== VOIDmode
15981 || (GET_MODE (rtl
) == VOIDmode
15982 && maybe_ne (GET_MODE_BITSIZE (mode
),
15983 HOST_BITS_PER_DOUBLE_INT
)))
15985 type_die
= base_type_for_mode (mode
, SCALAR_INT_MODE_P (mode
));
15986 if (type_die
== NULL
)
15988 mem_loc_result
= new_loc_descr (dwarf_OP (DW_OP_const_type
), 0, 0);
15989 mem_loc_result
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
15990 mem_loc_result
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
15991 mem_loc_result
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
15992 #if TARGET_SUPPORTS_WIDE_INT == 0
15993 if (!SCALAR_FLOAT_MODE_P (mode
))
15995 mem_loc_result
->dw_loc_oprnd2
.val_class
15996 = dw_val_class_const_double
;
15997 mem_loc_result
->dw_loc_oprnd2
.v
.val_double
15998 = rtx_to_double_int (rtl
);
16003 scalar_float_mode float_mode
= as_a
<scalar_float_mode
> (mode
);
16004 unsigned int length
= GET_MODE_SIZE (float_mode
);
16005 unsigned char *array
= ggc_vec_alloc
<unsigned char> (length
);
16007 insert_float (rtl
, array
);
16008 mem_loc_result
->dw_loc_oprnd2
.val_class
= dw_val_class_vec
;
16009 mem_loc_result
->dw_loc_oprnd2
.v
.val_vec
.length
= length
/ 4;
16010 mem_loc_result
->dw_loc_oprnd2
.v
.val_vec
.elt_size
= 4;
16011 mem_loc_result
->dw_loc_oprnd2
.v
.val_vec
.array
= array
;
16016 case CONST_WIDE_INT
:
16017 if (!dwarf_strict
|| dwarf_version
>= 5)
16019 dw_die_ref type_die
;
16021 type_die
= base_type_for_mode (mode
, SCALAR_INT_MODE_P (mode
));
16022 if (type_die
== NULL
)
16024 mem_loc_result
= new_loc_descr (dwarf_OP (DW_OP_const_type
), 0, 0);
16025 mem_loc_result
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
16026 mem_loc_result
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
16027 mem_loc_result
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
16028 mem_loc_result
->dw_loc_oprnd2
.val_class
16029 = dw_val_class_wide_int
;
16030 mem_loc_result
->dw_loc_oprnd2
.v
.val_wide
= ggc_alloc
<wide_int
> ();
16031 *mem_loc_result
->dw_loc_oprnd2
.v
.val_wide
= rtx_mode_t (rtl
, mode
);
16035 case CONST_POLY_INT
:
16036 mem_loc_result
= int_loc_descriptor (rtx_to_poly_int64 (rtl
));
16040 mem_loc_result
= scompare_loc_descriptor (DW_OP_eq
, rtl
, mem_mode
);
16044 mem_loc_result
= scompare_loc_descriptor (DW_OP_ge
, rtl
, mem_mode
);
16048 mem_loc_result
= scompare_loc_descriptor (DW_OP_gt
, rtl
, mem_mode
);
16052 mem_loc_result
= scompare_loc_descriptor (DW_OP_le
, rtl
, mem_mode
);
16056 mem_loc_result
= scompare_loc_descriptor (DW_OP_lt
, rtl
, mem_mode
);
16060 mem_loc_result
= scompare_loc_descriptor (DW_OP_ne
, rtl
, mem_mode
);
16064 mem_loc_result
= ucompare_loc_descriptor (DW_OP_ge
, rtl
, mem_mode
);
16068 mem_loc_result
= ucompare_loc_descriptor (DW_OP_gt
, rtl
, mem_mode
);
16072 mem_loc_result
= ucompare_loc_descriptor (DW_OP_le
, rtl
, mem_mode
);
16076 mem_loc_result
= ucompare_loc_descriptor (DW_OP_lt
, rtl
, mem_mode
);
16081 if (!SCALAR_INT_MODE_P (mode
))
16086 mem_loc_result
= minmax_loc_descriptor (rtl
, mode
, mem_mode
);
16091 if (CONST_INT_P (XEXP (rtl
, 1))
16092 && CONST_INT_P (XEXP (rtl
, 2))
16093 && is_a
<scalar_int_mode
> (mode
, &int_mode
)
16094 && is_a
<scalar_int_mode
> (GET_MODE (XEXP (rtl
, 0)), &inner_mode
)
16095 && GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
16096 && GET_MODE_SIZE (inner_mode
) <= DWARF2_ADDR_SIZE
16097 && ((unsigned) INTVAL (XEXP (rtl
, 1))
16098 + (unsigned) INTVAL (XEXP (rtl
, 2))
16099 <= GET_MODE_BITSIZE (int_mode
)))
16102 op0
= mem_loc_descriptor (XEXP (rtl
, 0), inner_mode
,
16103 mem_mode
, VAR_INIT_STATUS_INITIALIZED
);
16106 if (GET_CODE (rtl
) == SIGN_EXTRACT
)
16110 mem_loc_result
= op0
;
16111 size
= INTVAL (XEXP (rtl
, 1));
16112 shift
= INTVAL (XEXP (rtl
, 2));
16113 if (BITS_BIG_ENDIAN
)
16114 shift
= GET_MODE_BITSIZE (inner_mode
) - shift
- size
;
16115 if (shift
+ size
!= (int) DWARF2_ADDR_SIZE
)
16117 add_loc_descr (&mem_loc_result
,
16118 int_loc_descriptor (DWARF2_ADDR_SIZE
16120 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_shl
, 0, 0));
16122 if (size
!= (int) DWARF2_ADDR_SIZE
)
16124 add_loc_descr (&mem_loc_result
,
16125 int_loc_descriptor (DWARF2_ADDR_SIZE
- size
));
16126 add_loc_descr (&mem_loc_result
, new_loc_descr (op
, 0, 0));
16133 dw_loc_descr_ref op2
, bra_node
, drop_node
;
16134 op0
= mem_loc_descriptor (XEXP (rtl
, 0),
16135 GET_MODE (XEXP (rtl
, 0)) == VOIDmode
16136 ? word_mode
: GET_MODE (XEXP (rtl
, 0)),
16137 mem_mode
, VAR_INIT_STATUS_INITIALIZED
);
16138 op1
= mem_loc_descriptor (XEXP (rtl
, 1), mode
, mem_mode
,
16139 VAR_INIT_STATUS_INITIALIZED
);
16140 op2
= mem_loc_descriptor (XEXP (rtl
, 2), mode
, mem_mode
,
16141 VAR_INIT_STATUS_INITIALIZED
);
16142 if (op0
== NULL
|| op1
== NULL
|| op2
== NULL
)
16145 mem_loc_result
= op1
;
16146 add_loc_descr (&mem_loc_result
, op2
);
16147 add_loc_descr (&mem_loc_result
, op0
);
16148 bra_node
= new_loc_descr (DW_OP_bra
, 0, 0);
16149 add_loc_descr (&mem_loc_result
, bra_node
);
16150 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_swap
, 0, 0));
16151 drop_node
= new_loc_descr (DW_OP_drop
, 0, 0);
16152 add_loc_descr (&mem_loc_result
, drop_node
);
16153 bra_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
16154 bra_node
->dw_loc_oprnd1
.v
.val_loc
= drop_node
;
16159 case FLOAT_TRUNCATE
:
16161 case UNSIGNED_FLOAT
:
16164 if (!dwarf_strict
|| dwarf_version
>= 5)
16166 dw_die_ref type_die
;
16167 dw_loc_descr_ref cvt
;
16169 op0
= mem_loc_descriptor (XEXP (rtl
, 0), GET_MODE (XEXP (rtl
, 0)),
16170 mem_mode
, VAR_INIT_STATUS_INITIALIZED
);
16173 if (is_a
<scalar_int_mode
> (GET_MODE (XEXP (rtl
, 0)), &int_mode
)
16174 && (GET_CODE (rtl
) == FLOAT
16175 || GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
))
16177 type_die
= base_type_for_mode (int_mode
,
16178 GET_CODE (rtl
) == UNSIGNED_FLOAT
);
16179 if (type_die
== NULL
)
16181 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
16182 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
16183 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
16184 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
16185 add_loc_descr (&op0
, cvt
);
16187 type_die
= base_type_for_mode (mode
, GET_CODE (rtl
) == UNSIGNED_FIX
);
16188 if (type_die
== NULL
)
16190 cvt
= new_loc_descr (dwarf_OP (DW_OP_convert
), 0, 0);
16191 cvt
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
16192 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.die
= type_die
;
16193 cvt
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
16194 add_loc_descr (&op0
, cvt
);
16195 if (is_a
<scalar_int_mode
> (mode
, &int_mode
)
16196 && (GET_CODE (rtl
) == FIX
16197 || GET_MODE_SIZE (int_mode
) < DWARF2_ADDR_SIZE
))
16199 op0
= convert_descriptor_to_mode (int_mode
, op0
);
16203 mem_loc_result
= op0
;
16210 if (is_a
<scalar_int_mode
> (mode
, &int_mode
))
16211 mem_loc_result
= clz_loc_descriptor (rtl
, int_mode
, mem_mode
);
16216 if (is_a
<scalar_int_mode
> (mode
, &int_mode
))
16217 mem_loc_result
= popcount_loc_descriptor (rtl
, int_mode
, mem_mode
);
16221 if (is_a
<scalar_int_mode
> (mode
, &int_mode
))
16222 mem_loc_result
= bswap_loc_descriptor (rtl
, int_mode
, mem_mode
);
16227 if (is_a
<scalar_int_mode
> (mode
, &int_mode
))
16228 mem_loc_result
= rotate_loc_descriptor (rtl
, int_mode
, mem_mode
);
16232 /* In theory, we could implement the above. */
16233 /* DWARF cannot represent the unsigned compare operations
16258 case FRACT_CONVERT
:
16259 case UNSIGNED_FRACT_CONVERT
:
16261 case UNSIGNED_SAT_FRACT
:
16267 case VEC_DUPLICATE
:
16272 case STRICT_LOW_PART
:
16278 /* If delegitimize_address couldn't do anything with the UNSPEC, we
16279 can't express it in the debug info. This can happen e.g. with some
16284 resolve_one_addr (&rtl
);
16287 /* RTL sequences inside PARALLEL record a series of DWARF operations for
16288 the expression. An UNSPEC rtx represents a raw DWARF operation,
16289 new_loc_descr is called for it to build the operation directly.
16290 Otherwise mem_loc_descriptor is called recursively. */
16294 dw_loc_descr_ref exp_result
= NULL
;
16296 for (; index
< XVECLEN (rtl
, 0); index
++)
16298 rtx elem
= XVECEXP (rtl
, 0, index
);
16299 if (GET_CODE (elem
) == UNSPEC
)
16301 /* Each DWARF operation UNSPEC contain two operands, if
16302 one operand is not used for the operation, const0_rtx is
16304 gcc_assert (XVECLEN (elem
, 0) == 2);
16306 HOST_WIDE_INT dw_op
= XINT (elem
, 1);
16307 HOST_WIDE_INT oprnd1
= INTVAL (XVECEXP (elem
, 0, 0));
16308 HOST_WIDE_INT oprnd2
= INTVAL (XVECEXP (elem
, 0, 1));
16310 = new_loc_descr ((enum dwarf_location_atom
) dw_op
, oprnd1
,
16315 = mem_loc_descriptor (elem
, mode
, mem_mode
,
16316 VAR_INIT_STATUS_INITIALIZED
);
16318 if (!mem_loc_result
)
16319 mem_loc_result
= exp_result
;
16321 add_loc_descr (&mem_loc_result
, exp_result
);
16330 print_rtl (stderr
, rtl
);
16331 gcc_unreachable ();
16336 if (mem_loc_result
&& initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
16337 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
16339 return mem_loc_result
;
16342 /* Return a descriptor that describes the concatenation of two locations.
16343 This is typically a complex variable. */
16345 static dw_loc_descr_ref
16346 concat_loc_descriptor (rtx x0
, rtx x1
, enum var_init_status initialized
)
16348 /* At present we only track constant-sized pieces. */
16349 unsigned int size0
, size1
;
16350 if (!GET_MODE_SIZE (GET_MODE (x0
)).is_constant (&size0
)
16351 || !GET_MODE_SIZE (GET_MODE (x1
)).is_constant (&size1
))
16354 dw_loc_descr_ref cc_loc_result
= NULL
;
16355 dw_loc_descr_ref x0_ref
16356 = loc_descriptor (x0
, VOIDmode
, VAR_INIT_STATUS_INITIALIZED
);
16357 dw_loc_descr_ref x1_ref
16358 = loc_descriptor (x1
, VOIDmode
, VAR_INIT_STATUS_INITIALIZED
);
16360 if (x0_ref
== 0 || x1_ref
== 0)
16363 cc_loc_result
= x0_ref
;
16364 add_loc_descr_op_piece (&cc_loc_result
, size0
);
16366 add_loc_descr (&cc_loc_result
, x1_ref
);
16367 add_loc_descr_op_piece (&cc_loc_result
, size1
);
16369 if (initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
16370 add_loc_descr (&cc_loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
16372 return cc_loc_result
;
16375 /* Return a descriptor that describes the concatenation of N
16378 static dw_loc_descr_ref
16379 concatn_loc_descriptor (rtx concatn
, enum var_init_status initialized
)
16382 dw_loc_descr_ref cc_loc_result
= NULL
;
16383 unsigned int n
= XVECLEN (concatn
, 0);
16386 for (i
= 0; i
< n
; ++i
)
16388 dw_loc_descr_ref ref
;
16389 rtx x
= XVECEXP (concatn
, 0, i
);
16391 /* At present we only track constant-sized pieces. */
16392 if (!GET_MODE_SIZE (GET_MODE (x
)).is_constant (&size
))
16395 ref
= loc_descriptor (x
, VOIDmode
, VAR_INIT_STATUS_INITIALIZED
);
16399 add_loc_descr (&cc_loc_result
, ref
);
16400 add_loc_descr_op_piece (&cc_loc_result
, size
);
16403 if (cc_loc_result
&& initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
16404 add_loc_descr (&cc_loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
16406 return cc_loc_result
;
16409 /* Helper function for loc_descriptor. Return DW_OP_implicit_pointer
16410 for DEBUG_IMPLICIT_PTR RTL. */
16412 static dw_loc_descr_ref
16413 implicit_ptr_descriptor (rtx rtl
, HOST_WIDE_INT offset
)
16415 dw_loc_descr_ref ret
;
16418 if (dwarf_strict
&& dwarf_version
< 5)
16420 gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl
)) == VAR_DECL
16421 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl
)) == PARM_DECL
16422 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl
)) == RESULT_DECL
);
16423 ref
= lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl
));
16424 ret
= new_loc_descr (dwarf_OP (DW_OP_implicit_pointer
), 0, offset
);
16425 ret
->dw_loc_oprnd2
.val_class
= dw_val_class_const
;
16428 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
16429 ret
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
16430 ret
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
16434 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_decl_ref
;
16435 ret
->dw_loc_oprnd1
.v
.val_decl_ref
= DEBUG_IMPLICIT_PTR_DECL (rtl
);
16440 /* Output a proper Dwarf location descriptor for a variable or parameter
16441 which is either allocated in a register or in a memory location. For a
16442 register, we just generate an OP_REG and the register number. For a
16443 memory location we provide a Dwarf postfix expression describing how to
16444 generate the (dynamic) address of the object onto the address stack.
16446 MODE is mode of the decl if this loc_descriptor is going to be used in
16447 .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
16448 allowed, VOIDmode otherwise.
16450 If we don't know how to describe it, return 0. */
16452 static dw_loc_descr_ref
16453 loc_descriptor (rtx rtl
, machine_mode mode
,
16454 enum var_init_status initialized
)
16456 dw_loc_descr_ref loc_result
= NULL
;
16457 scalar_int_mode int_mode
;
16459 switch (GET_CODE (rtl
))
16462 /* The case of a subreg may arise when we have a local (register)
16463 variable or a formal (register) parameter which doesn't quite fill
16464 up an entire register. For now, just assume that it is
16465 legitimate to make the Dwarf info refer to the whole register which
16466 contains the given subreg. */
16467 if (REG_P (SUBREG_REG (rtl
)) && subreg_lowpart_p (rtl
))
16468 loc_result
= loc_descriptor (SUBREG_REG (rtl
),
16469 GET_MODE (SUBREG_REG (rtl
)), initialized
);
16475 loc_result
= reg_loc_descriptor (rtl
, initialized
);
16479 loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), get_address_mode (rtl
),
16480 GET_MODE (rtl
), initialized
);
16481 if (loc_result
== NULL
)
16482 loc_result
= tls_mem_loc_descriptor (rtl
);
16483 if (loc_result
== NULL
)
16485 rtx new_rtl
= avoid_constant_pool_reference (rtl
);
16486 if (new_rtl
!= rtl
)
16487 loc_result
= loc_descriptor (new_rtl
, mode
, initialized
);
16492 loc_result
= concat_loc_descriptor (XEXP (rtl
, 0), XEXP (rtl
, 1),
16497 loc_result
= concatn_loc_descriptor (rtl
, initialized
);
16502 if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl
)) != PARALLEL
)
16504 rtx loc
= PAT_VAR_LOCATION_LOC (rtl
);
16505 if (GET_CODE (loc
) == EXPR_LIST
)
16506 loc
= XEXP (loc
, 0);
16507 loc_result
= loc_descriptor (loc
, mode
, initialized
);
16511 rtl
= XEXP (rtl
, 1);
16516 rtvec par_elems
= XVEC (rtl
, 0);
16517 int num_elem
= GET_NUM_ELEM (par_elems
);
16521 /* Create the first one, so we have something to add to. */
16522 loc_result
= loc_descriptor (XEXP (RTVEC_ELT (par_elems
, 0), 0),
16523 VOIDmode
, initialized
);
16524 if (loc_result
== NULL
)
16526 mode
= GET_MODE (XEXP (RTVEC_ELT (par_elems
, 0), 0));
16527 /* At present we only track constant-sized pieces. */
16528 if (!GET_MODE_SIZE (mode
).is_constant (&size
))
16530 add_loc_descr_op_piece (&loc_result
, size
);
16531 for (i
= 1; i
< num_elem
; i
++)
16533 dw_loc_descr_ref temp
;
16535 temp
= loc_descriptor (XEXP (RTVEC_ELT (par_elems
, i
), 0),
16536 VOIDmode
, initialized
);
16539 add_loc_descr (&loc_result
, temp
);
16540 mode
= GET_MODE (XEXP (RTVEC_ELT (par_elems
, i
), 0));
16541 /* At present we only track constant-sized pieces. */
16542 if (!GET_MODE_SIZE (mode
).is_constant (&size
))
16544 add_loc_descr_op_piece (&loc_result
, size
);
16550 if (mode
!= VOIDmode
&& mode
!= BLKmode
)
16552 int_mode
= as_a
<scalar_int_mode
> (mode
);
16553 loc_result
= address_of_int_loc_descriptor (GET_MODE_SIZE (int_mode
),
16559 if (mode
== VOIDmode
)
16560 mode
= GET_MODE (rtl
);
16562 if (mode
!= VOIDmode
&& (dwarf_version
>= 4 || !dwarf_strict
))
16564 gcc_assert (mode
== GET_MODE (rtl
) || VOIDmode
== GET_MODE (rtl
));
16566 /* Note that a CONST_DOUBLE rtx could represent either an integer
16567 or a floating-point constant. A CONST_DOUBLE is used whenever
16568 the constant requires more than one word in order to be
16569 adequately represented. We output CONST_DOUBLEs as blocks. */
16570 scalar_mode smode
= as_a
<scalar_mode
> (mode
);
16571 loc_result
= new_loc_descr (DW_OP_implicit_value
,
16572 GET_MODE_SIZE (smode
), 0);
16573 #if TARGET_SUPPORTS_WIDE_INT == 0
16574 if (!SCALAR_FLOAT_MODE_P (smode
))
16576 loc_result
->dw_loc_oprnd2
.val_class
= dw_val_class_const_double
;
16577 loc_result
->dw_loc_oprnd2
.v
.val_double
16578 = rtx_to_double_int (rtl
);
16583 unsigned int length
= GET_MODE_SIZE (smode
);
16584 unsigned char *array
= ggc_vec_alloc
<unsigned char> (length
);
16586 insert_float (rtl
, array
);
16587 loc_result
->dw_loc_oprnd2
.val_class
= dw_val_class_vec
;
16588 loc_result
->dw_loc_oprnd2
.v
.val_vec
.length
= length
/ 4;
16589 loc_result
->dw_loc_oprnd2
.v
.val_vec
.elt_size
= 4;
16590 loc_result
->dw_loc_oprnd2
.v
.val_vec
.array
= array
;
16595 case CONST_WIDE_INT
:
16596 if (mode
== VOIDmode
)
16597 mode
= GET_MODE (rtl
);
16599 if (mode
!= VOIDmode
&& (dwarf_version
>= 4 || !dwarf_strict
))
16601 int_mode
= as_a
<scalar_int_mode
> (mode
);
16602 loc_result
= new_loc_descr (DW_OP_implicit_value
,
16603 GET_MODE_SIZE (int_mode
), 0);
16604 loc_result
->dw_loc_oprnd2
.val_class
= dw_val_class_wide_int
;
16605 loc_result
->dw_loc_oprnd2
.v
.val_wide
= ggc_alloc
<wide_int
> ();
16606 *loc_result
->dw_loc_oprnd2
.v
.val_wide
= rtx_mode_t (rtl
, int_mode
);
16611 if (mode
== VOIDmode
)
16612 mode
= GET_MODE (rtl
);
16614 if (mode
!= VOIDmode
&& (dwarf_version
>= 4 || !dwarf_strict
))
16616 unsigned int length
;
16617 if (!CONST_VECTOR_NUNITS (rtl
).is_constant (&length
))
16620 unsigned int elt_size
= GET_MODE_UNIT_SIZE (GET_MODE (rtl
));
16621 unsigned char *array
16622 = ggc_vec_alloc
<unsigned char> (length
* elt_size
);
16625 machine_mode imode
= GET_MODE_INNER (mode
);
16627 gcc_assert (mode
== GET_MODE (rtl
) || VOIDmode
== GET_MODE (rtl
));
16628 switch (GET_MODE_CLASS (mode
))
16630 case MODE_VECTOR_INT
:
16631 for (i
= 0, p
= array
; i
< length
; i
++, p
+= elt_size
)
16633 rtx elt
= CONST_VECTOR_ELT (rtl
, i
);
16634 insert_wide_int (rtx_mode_t (elt
, imode
), p
, elt_size
);
16638 case MODE_VECTOR_FLOAT
:
16639 for (i
= 0, p
= array
; i
< length
; i
++, p
+= elt_size
)
16641 rtx elt
= CONST_VECTOR_ELT (rtl
, i
);
16642 insert_float (elt
, p
);
16647 gcc_unreachable ();
16650 loc_result
= new_loc_descr (DW_OP_implicit_value
,
16651 length
* elt_size
, 0);
16652 loc_result
->dw_loc_oprnd2
.val_class
= dw_val_class_vec
;
16653 loc_result
->dw_loc_oprnd2
.v
.val_vec
.length
= length
;
16654 loc_result
->dw_loc_oprnd2
.v
.val_vec
.elt_size
= elt_size
;
16655 loc_result
->dw_loc_oprnd2
.v
.val_vec
.array
= array
;
16660 if (mode
== VOIDmode
16661 || CONST_SCALAR_INT_P (XEXP (rtl
, 0))
16662 || CONST_DOUBLE_AS_FLOAT_P (XEXP (rtl
, 0))
16663 || GET_CODE (XEXP (rtl
, 0)) == CONST_VECTOR
)
16665 loc_result
= loc_descriptor (XEXP (rtl
, 0), mode
, initialized
);
16670 if (!const_ok_for_output (rtl
))
16674 if (is_a
<scalar_int_mode
> (mode
, &int_mode
)
16675 && GET_MODE_SIZE (int_mode
) == DWARF2_ADDR_SIZE
16676 && (dwarf_version
>= 4 || !dwarf_strict
))
16678 loc_result
= new_addr_loc_descr (rtl
, dtprel_false
);
16679 add_loc_descr (&loc_result
, new_loc_descr (DW_OP_stack_value
, 0, 0));
16680 vec_safe_push (used_rtx_array
, rtl
);
16684 case DEBUG_IMPLICIT_PTR
:
16685 loc_result
= implicit_ptr_descriptor (rtl
, 0);
16689 if (GET_CODE (XEXP (rtl
, 0)) == DEBUG_IMPLICIT_PTR
16690 && CONST_INT_P (XEXP (rtl
, 1)))
16693 = implicit_ptr_descriptor (XEXP (rtl
, 0), INTVAL (XEXP (rtl
, 1)));
16699 if ((is_a
<scalar_int_mode
> (mode
, &int_mode
)
16700 && GET_MODE (rtl
) == int_mode
16701 && GET_MODE_SIZE (int_mode
) <= DWARF2_ADDR_SIZE
16702 && dwarf_version
>= 4)
16703 || (!dwarf_strict
&& mode
!= VOIDmode
&& mode
!= BLKmode
))
16705 /* Value expression. */
16706 loc_result
= mem_loc_descriptor (rtl
, mode
, VOIDmode
, initialized
);
16708 add_loc_descr (&loc_result
,
16709 new_loc_descr (DW_OP_stack_value
, 0, 0));
16717 /* We need to figure out what section we should use as the base for the
16718 address ranges where a given location is valid.
16719 1. If this particular DECL has a section associated with it, use that.
16720 2. If this function has a section associated with it, use that.
16721 3. Otherwise, use the text section.
16722 XXX: If you split a variable across multiple sections, we won't notice. */
16724 static const char *
16725 secname_for_decl (const_tree decl
)
16727 const char *secname
;
16729 if (VAR_OR_FUNCTION_DECL_P (decl
)
16730 && (DECL_EXTERNAL (decl
) || TREE_PUBLIC (decl
) || TREE_STATIC (decl
))
16731 && DECL_SECTION_NAME (decl
))
16732 secname
= DECL_SECTION_NAME (decl
);
16733 else if (current_function_decl
&& DECL_SECTION_NAME (current_function_decl
))
16734 secname
= DECL_SECTION_NAME (current_function_decl
);
16735 else if (cfun
&& in_cold_section_p
)
16736 secname
= crtl
->subsections
.cold_section_label
;
16738 secname
= text_section_label
;
16743 /* Return true when DECL_BY_REFERENCE is defined and set for DECL. */
16746 decl_by_reference_p (tree decl
)
16748 return ((TREE_CODE (decl
) == PARM_DECL
|| TREE_CODE (decl
) == RESULT_DECL
16750 && DECL_BY_REFERENCE (decl
));
16753 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
16756 static dw_loc_descr_ref
16757 dw_loc_list_1 (tree loc
, rtx varloc
, int want_address
,
16758 enum var_init_status initialized
)
16760 int have_address
= 0;
16761 dw_loc_descr_ref descr
;
16764 if (want_address
!= 2)
16766 gcc_assert (GET_CODE (varloc
) == VAR_LOCATION
);
16768 if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc
)) != PARALLEL
)
16770 varloc
= PAT_VAR_LOCATION_LOC (varloc
);
16771 if (GET_CODE (varloc
) == EXPR_LIST
)
16772 varloc
= XEXP (varloc
, 0);
16773 mode
= GET_MODE (varloc
);
16774 if (MEM_P (varloc
))
16776 rtx addr
= XEXP (varloc
, 0);
16777 descr
= mem_loc_descriptor (addr
, get_address_mode (varloc
),
16778 mode
, initialized
);
16783 rtx x
= avoid_constant_pool_reference (varloc
);
16785 descr
= mem_loc_descriptor (x
, mode
, VOIDmode
,
16790 descr
= mem_loc_descriptor (varloc
, mode
, VOIDmode
, initialized
);
16797 if (GET_CODE (varloc
) == VAR_LOCATION
)
16798 mode
= DECL_MODE (PAT_VAR_LOCATION_DECL (varloc
));
16800 mode
= DECL_MODE (loc
);
16801 descr
= loc_descriptor (varloc
, mode
, initialized
);
16808 if (want_address
== 2 && !have_address
16809 && (dwarf_version
>= 4 || !dwarf_strict
))
16811 if (int_size_in_bytes (TREE_TYPE (loc
)) > DWARF2_ADDR_SIZE
)
16813 expansion_failed (loc
, NULL_RTX
,
16814 "DWARF address size mismatch");
16817 add_loc_descr (&descr
, new_loc_descr (DW_OP_stack_value
, 0, 0));
16820 /* Show if we can't fill the request for an address. */
16821 if (want_address
&& !have_address
)
16823 expansion_failed (loc
, NULL_RTX
,
16824 "Want address and only have value");
16828 /* If we've got an address and don't want one, dereference. */
16829 if (!want_address
&& have_address
)
16831 HOST_WIDE_INT size
= int_size_in_bytes (TREE_TYPE (loc
));
16832 enum dwarf_location_atom op
;
16834 if (size
> DWARF2_ADDR_SIZE
|| size
== -1)
16836 expansion_failed (loc
, NULL_RTX
,
16837 "DWARF address size mismatch");
16840 else if (size
== DWARF2_ADDR_SIZE
)
16843 op
= DW_OP_deref_size
;
16845 add_loc_descr (&descr
, new_loc_descr (op
, size
, 0));
16851 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
16852 if it is not possible. */
16854 static dw_loc_descr_ref
16855 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize
, HOST_WIDE_INT offset
)
16857 if ((bitsize
% BITS_PER_UNIT
) == 0 && offset
== 0)
16858 return new_loc_descr (DW_OP_piece
, bitsize
/ BITS_PER_UNIT
, 0);
16859 else if (dwarf_version
>= 3 || !dwarf_strict
)
16860 return new_loc_descr (DW_OP_bit_piece
, bitsize
, offset
);
16865 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
16866 for VAR_LOC_NOTE for variable DECL that has been optimized by SRA. */
16868 static dw_loc_descr_ref
16869 dw_sra_loc_expr (tree decl
, rtx loc
)
16872 unsigned HOST_WIDE_INT padsize
= 0;
16873 dw_loc_descr_ref descr
, *descr_tail
;
16874 unsigned HOST_WIDE_INT decl_size
;
16876 enum var_init_status initialized
;
16878 if (DECL_SIZE (decl
) == NULL
16879 || !tree_fits_uhwi_p (DECL_SIZE (decl
)))
16882 decl_size
= tree_to_uhwi (DECL_SIZE (decl
));
16884 descr_tail
= &descr
;
16886 for (p
= loc
; p
; p
= XEXP (p
, 1))
16888 unsigned HOST_WIDE_INT bitsize
= decl_piece_bitsize (p
);
16889 rtx loc_note
= *decl_piece_varloc_ptr (p
);
16890 dw_loc_descr_ref cur_descr
;
16891 dw_loc_descr_ref
*tail
, last
= NULL
;
16892 unsigned HOST_WIDE_INT opsize
= 0;
16894 if (loc_note
== NULL_RTX
16895 || NOTE_VAR_LOCATION_LOC (loc_note
) == NULL_RTX
)
16897 padsize
+= bitsize
;
16900 initialized
= NOTE_VAR_LOCATION_STATUS (loc_note
);
16901 varloc
= NOTE_VAR_LOCATION (loc_note
);
16902 cur_descr
= dw_loc_list_1 (decl
, varloc
, 2, initialized
);
16903 if (cur_descr
== NULL
)
16905 padsize
+= bitsize
;
16909 /* Check that cur_descr either doesn't use
16910 DW_OP_*piece operations, or their sum is equal
16911 to bitsize. Otherwise we can't embed it. */
16912 for (tail
= &cur_descr
; *tail
!= NULL
;
16913 tail
= &(*tail
)->dw_loc_next
)
16914 if ((*tail
)->dw_loc_opc
== DW_OP_piece
)
16916 opsize
+= (*tail
)->dw_loc_oprnd1
.v
.val_unsigned
16920 else if ((*tail
)->dw_loc_opc
== DW_OP_bit_piece
)
16922 opsize
+= (*tail
)->dw_loc_oprnd1
.v
.val_unsigned
;
16926 if (last
!= NULL
&& opsize
!= bitsize
)
16928 padsize
+= bitsize
;
16929 /* Discard the current piece of the descriptor and release any
16930 addr_table entries it uses. */
16931 remove_loc_list_addr_table_entries (cur_descr
);
16935 /* If there is a hole, add DW_OP_*piece after empty DWARF
16936 expression, which means that those bits are optimized out. */
16939 if (padsize
> decl_size
)
16941 remove_loc_list_addr_table_entries (cur_descr
);
16942 goto discard_descr
;
16944 decl_size
-= padsize
;
16945 *descr_tail
= new_loc_descr_op_bit_piece (padsize
, 0);
16946 if (*descr_tail
== NULL
)
16948 remove_loc_list_addr_table_entries (cur_descr
);
16949 goto discard_descr
;
16951 descr_tail
= &(*descr_tail
)->dw_loc_next
;
16954 *descr_tail
= cur_descr
;
16956 if (bitsize
> decl_size
)
16957 goto discard_descr
;
16958 decl_size
-= bitsize
;
16961 HOST_WIDE_INT offset
= 0;
16962 if (GET_CODE (varloc
) == VAR_LOCATION
16963 && GET_CODE (PAT_VAR_LOCATION_LOC (varloc
)) != PARALLEL
)
16965 varloc
= PAT_VAR_LOCATION_LOC (varloc
);
16966 if (GET_CODE (varloc
) == EXPR_LIST
)
16967 varloc
= XEXP (varloc
, 0);
16971 if (GET_CODE (varloc
) == CONST
16972 || GET_CODE (varloc
) == SIGN_EXTEND
16973 || GET_CODE (varloc
) == ZERO_EXTEND
)
16974 varloc
= XEXP (varloc
, 0);
16975 else if (GET_CODE (varloc
) == SUBREG
)
16976 varloc
= SUBREG_REG (varloc
);
16981 /* DW_OP_bit_size offset should be zero for register
16982 or implicit location descriptions and empty location
16983 descriptions, but for memory addresses needs big endian
16985 if (MEM_P (varloc
))
16987 unsigned HOST_WIDE_INT memsize
;
16988 if (!poly_uint64 (MEM_SIZE (varloc
)).is_constant (&memsize
))
16989 goto discard_descr
;
16990 memsize
*= BITS_PER_UNIT
;
16991 if (memsize
!= bitsize
)
16993 if (BYTES_BIG_ENDIAN
!= WORDS_BIG_ENDIAN
16994 && (memsize
> BITS_PER_WORD
|| bitsize
> BITS_PER_WORD
))
16995 goto discard_descr
;
16996 if (memsize
< bitsize
)
16997 goto discard_descr
;
16998 if (BITS_BIG_ENDIAN
)
16999 offset
= memsize
- bitsize
;
17003 *descr_tail
= new_loc_descr_op_bit_piece (bitsize
, offset
);
17004 if (*descr_tail
== NULL
)
17005 goto discard_descr
;
17006 descr_tail
= &(*descr_tail
)->dw_loc_next
;
17010 /* If there were any non-empty expressions, add padding till the end of
17012 if (descr
!= NULL
&& decl_size
!= 0)
17014 *descr_tail
= new_loc_descr_op_bit_piece (decl_size
, 0);
17015 if (*descr_tail
== NULL
)
17016 goto discard_descr
;
17021 /* Discard the descriptor and release any addr_table entries it uses. */
17022 remove_loc_list_addr_table_entries (descr
);
17026 /* Return the dwarf representation of the location list LOC_LIST of
17027 DECL. WANT_ADDRESS has the same meaning as in loc_list_from_tree
17030 static dw_loc_list_ref
17031 dw_loc_list (var_loc_list
*loc_list
, tree decl
, int want_address
)
17033 const char *endname
, *secname
;
17034 var_loc_view endview
;
17036 enum var_init_status initialized
;
17037 struct var_loc_node
*node
;
17038 dw_loc_descr_ref descr
;
17039 char label_id
[MAX_ARTIFICIAL_LABEL_BYTES
];
17040 dw_loc_list_ref list
= NULL
;
17041 dw_loc_list_ref
*listp
= &list
;
17043 /* Now that we know what section we are using for a base,
17044 actually construct the list of locations.
17045 The first location information is what is passed to the
17046 function that creates the location list, and the remaining
17047 locations just get added on to that list.
17048 Note that we only know the start address for a location
17049 (IE location changes), so to build the range, we use
17050 the range [current location start, next location start].
17051 This means we have to special case the last node, and generate
17052 a range of [last location start, end of function label]. */
17054 if (cfun
&& crtl
->has_bb_partition
)
17056 bool save_in_cold_section_p
= in_cold_section_p
;
17057 in_cold_section_p
= first_function_block_is_cold
;
17058 if (loc_list
->last_before_switch
== NULL
)
17059 in_cold_section_p
= !in_cold_section_p
;
17060 secname
= secname_for_decl (decl
);
17061 in_cold_section_p
= save_in_cold_section_p
;
17064 secname
= secname_for_decl (decl
);
17066 for (node
= loc_list
->first
; node
; node
= node
->next
)
17068 bool range_across_switch
= false;
17069 if (GET_CODE (node
->loc
) == EXPR_LIST
17070 || NOTE_VAR_LOCATION_LOC (node
->loc
) != NULL_RTX
)
17072 if (GET_CODE (node
->loc
) == EXPR_LIST
)
17075 /* This requires DW_OP_{,bit_}piece, which is not usable
17076 inside DWARF expressions. */
17077 if (want_address
== 2)
17078 descr
= dw_sra_loc_expr (decl
, node
->loc
);
17082 initialized
= NOTE_VAR_LOCATION_STATUS (node
->loc
);
17083 varloc
= NOTE_VAR_LOCATION (node
->loc
);
17084 descr
= dw_loc_list_1 (decl
, varloc
, want_address
, initialized
);
17088 /* If section switch happens in between node->label
17089 and node->next->label (or end of function) and
17090 we can't emit it as a single entry list,
17091 emit two ranges, first one ending at the end
17092 of first partition and second one starting at the
17093 beginning of second partition. */
17094 if (node
== loc_list
->last_before_switch
17095 && (node
!= loc_list
->first
|| loc_list
->first
->next
17096 /* If we are to emit a view number, we will emit
17097 a loclist rather than a single location
17098 expression for the entire function (see
17099 loc_list_has_views), so we have to split the
17100 range that straddles across partitions. */
17101 || !ZERO_VIEW_P (node
->view
))
17102 && current_function_decl
)
17104 endname
= cfun
->fde
->dw_fde_end
;
17106 range_across_switch
= true;
17108 /* The variable has a location between NODE->LABEL and
17109 NODE->NEXT->LABEL. */
17110 else if (node
->next
)
17111 endname
= node
->next
->label
, endview
= node
->next
->view
;
17112 /* If the variable has a location at the last label
17113 it keeps its location until the end of function. */
17114 else if (!current_function_decl
)
17115 endname
= text_end_label
, endview
= 0;
17118 ASM_GENERATE_INTERNAL_LABEL (label_id
, FUNC_END_LABEL
,
17119 current_function_funcdef_no
);
17120 endname
= ggc_strdup (label_id
);
17124 *listp
= new_loc_list (descr
, node
->label
, node
->view
,
17125 endname
, endview
, secname
);
17126 if (TREE_CODE (decl
) == PARM_DECL
17127 && node
== loc_list
->first
17128 && NOTE_P (node
->loc
)
17129 && strcmp (node
->label
, endname
) == 0)
17130 (*listp
)->force
= true;
17131 listp
= &(*listp
)->dw_loc_next
;
17136 && crtl
->has_bb_partition
17137 && node
== loc_list
->last_before_switch
)
17139 bool save_in_cold_section_p
= in_cold_section_p
;
17140 in_cold_section_p
= !first_function_block_is_cold
;
17141 secname
= secname_for_decl (decl
);
17142 in_cold_section_p
= save_in_cold_section_p
;
17145 if (range_across_switch
)
17147 if (GET_CODE (node
->loc
) == EXPR_LIST
)
17148 descr
= dw_sra_loc_expr (decl
, node
->loc
);
17151 initialized
= NOTE_VAR_LOCATION_STATUS (node
->loc
);
17152 varloc
= NOTE_VAR_LOCATION (node
->loc
);
17153 descr
= dw_loc_list_1 (decl
, varloc
, want_address
,
17156 gcc_assert (descr
);
17157 /* The variable has a location between NODE->LABEL and
17158 NODE->NEXT->LABEL. */
17160 endname
= node
->next
->label
, endview
= node
->next
->view
;
17162 endname
= cfun
->fde
->dw_fde_second_end
, endview
= 0;
17163 *listp
= new_loc_list (descr
, cfun
->fde
->dw_fde_second_begin
, 0,
17164 endname
, endview
, secname
);
17165 listp
= &(*listp
)->dw_loc_next
;
17169 /* Try to avoid the overhead of a location list emitting a location
17170 expression instead, but only if we didn't have more than one
17171 location entry in the first place. If some entries were not
17172 representable, we don't want to pretend a single entry that was
17173 applies to the entire scope in which the variable is
17175 if (list
&& loc_list
->first
->next
)
17178 maybe_gen_llsym (list
);
17183 /* Return if the loc_list has only single element and thus can be represented
17184 as location description. */
17187 single_element_loc_list_p (dw_loc_list_ref list
)
17189 gcc_assert (!list
->dw_loc_next
|| list
->ll_symbol
);
17190 return !list
->ll_symbol
;
17193 /* Duplicate a single element of location list. */
17195 static inline dw_loc_descr_ref
17196 copy_loc_descr (dw_loc_descr_ref ref
)
17198 dw_loc_descr_ref copy
= ggc_alloc
<dw_loc_descr_node
> ();
17199 memcpy (copy
, ref
, sizeof (dw_loc_descr_node
));
17203 /* To each location in list LIST append loc descr REF. */
17206 add_loc_descr_to_each (dw_loc_list_ref list
, dw_loc_descr_ref ref
)
17208 dw_loc_descr_ref copy
;
17209 add_loc_descr (&list
->expr
, ref
);
17210 list
= list
->dw_loc_next
;
17213 copy
= copy_loc_descr (ref
);
17214 add_loc_descr (&list
->expr
, copy
);
17215 while (copy
->dw_loc_next
)
17216 copy
= copy
->dw_loc_next
= copy_loc_descr (copy
->dw_loc_next
);
17217 list
= list
->dw_loc_next
;
17221 /* To each location in list LIST prepend loc descr REF. */
17224 prepend_loc_descr_to_each (dw_loc_list_ref list
, dw_loc_descr_ref ref
)
17226 dw_loc_descr_ref copy
;
17227 dw_loc_descr_ref ref_end
= list
->expr
;
17228 add_loc_descr (&ref
, list
->expr
);
17230 list
= list
->dw_loc_next
;
17233 dw_loc_descr_ref end
= list
->expr
;
17234 list
->expr
= copy
= copy_loc_descr (ref
);
17235 while (copy
->dw_loc_next
!= ref_end
)
17236 copy
= copy
->dw_loc_next
= copy_loc_descr (copy
->dw_loc_next
);
17237 copy
->dw_loc_next
= end
;
17238 list
= list
->dw_loc_next
;
17242 /* Given two lists RET and LIST
17243 produce location list that is result of adding expression in LIST
17244 to expression in RET on each position in program.
17245 Might be destructive on both RET and LIST.
17247 TODO: We handle only simple cases of RET or LIST having at most one
17248 element. General case would involve sorting the lists in program order
17249 and merging them that will need some additional work.
17250 Adding that will improve quality of debug info especially for SRA-ed
17254 add_loc_list (dw_loc_list_ref
*ret
, dw_loc_list_ref list
)
17263 if (!list
->dw_loc_next
)
17265 add_loc_descr_to_each (*ret
, list
->expr
);
17268 if (!(*ret
)->dw_loc_next
)
17270 prepend_loc_descr_to_each (list
, (*ret
)->expr
);
17274 expansion_failed (NULL_TREE
, NULL_RTX
,
17275 "Don't know how to merge two non-trivial"
17276 " location lists.\n");
17281 /* LOC is constant expression. Try a luck, look it up in constant
17282 pool and return its loc_descr of its address. */
17284 static dw_loc_descr_ref
17285 cst_pool_loc_descr (tree loc
)
17287 /* Get an RTL for this, if something has been emitted. */
17288 rtx rtl
= lookup_constant_def (loc
);
17290 if (!rtl
|| !MEM_P (rtl
))
17295 gcc_assert (GET_CODE (XEXP (rtl
, 0)) == SYMBOL_REF
);
17297 /* TODO: We might get more coverage if we was actually delaying expansion
17298 of all expressions till end of compilation when constant pools are fully
17300 if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl
, 0))))
17302 expansion_failed (loc
, NULL_RTX
,
17303 "CST value in contant pool but not marked.");
17306 return mem_loc_descriptor (XEXP (rtl
, 0), get_address_mode (rtl
),
17307 GET_MODE (rtl
), VAR_INIT_STATUS_INITIALIZED
);
17310 /* Return dw_loc_list representing address of addr_expr LOC
17311 by looking for inner INDIRECT_REF expression and turning
17312 it into simple arithmetics.
17314 See loc_list_from_tree for the meaning of CONTEXT. */
17316 static dw_loc_list_ref
17317 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc
, bool toplev
,
17318 loc_descr_context
*context
)
17321 poly_int64 bitsize
, bitpos
, bytepos
;
17323 int unsignedp
, reversep
, volatilep
= 0;
17324 dw_loc_list_ref list_ret
= NULL
, list_ret1
= NULL
;
17326 obj
= get_inner_reference (TREE_OPERAND (loc
, 0),
17327 &bitsize
, &bitpos
, &offset
, &mode
,
17328 &unsignedp
, &reversep
, &volatilep
);
17330 if (!multiple_p (bitpos
, BITS_PER_UNIT
, &bytepos
))
17332 expansion_failed (loc
, NULL_RTX
, "bitfield access");
17335 if (!INDIRECT_REF_P (obj
))
17337 expansion_failed (obj
,
17338 NULL_RTX
, "no indirect ref in inner refrence");
17341 if (!offset
&& known_eq (bitpos
, 0))
17342 list_ret
= loc_list_from_tree (TREE_OPERAND (obj
, 0), toplev
? 2 : 1,
17345 && int_size_in_bytes (TREE_TYPE (loc
)) <= DWARF2_ADDR_SIZE
17346 && (dwarf_version
>= 4 || !dwarf_strict
))
17348 list_ret
= loc_list_from_tree (TREE_OPERAND (obj
, 0), 0, context
);
17353 /* Variable offset. */
17354 list_ret1
= loc_list_from_tree (offset
, 0, context
);
17355 if (list_ret1
== 0)
17357 add_loc_list (&list_ret
, list_ret1
);
17360 add_loc_descr_to_each (list_ret
,
17361 new_loc_descr (DW_OP_plus
, 0, 0));
17363 HOST_WIDE_INT value
;
17364 if (bytepos
.is_constant (&value
) && value
> 0)
17365 add_loc_descr_to_each (list_ret
,
17366 new_loc_descr (DW_OP_plus_uconst
, value
, 0));
17367 else if (maybe_ne (bytepos
, 0))
17368 loc_list_plus_const (list_ret
, bytepos
);
17369 add_loc_descr_to_each (list_ret
,
17370 new_loc_descr (DW_OP_stack_value
, 0, 0));
17375 /* Set LOC to the next operation that is not a DW_OP_nop operation. In the case
17376 all operations from LOC are nops, move to the last one. Insert in NOPS all
17377 operations that are skipped. */
17380 loc_descr_to_next_no_nop (dw_loc_descr_ref
&loc
,
17381 hash_set
<dw_loc_descr_ref
> &nops
)
17383 while (loc
->dw_loc_next
!= NULL
&& loc
->dw_loc_opc
== DW_OP_nop
)
17386 loc
= loc
->dw_loc_next
;
17390 /* Helper for loc_descr_without_nops: free the location description operation
17394 free_loc_descr (const dw_loc_descr_ref
&loc
, void *data ATTRIBUTE_UNUSED
)
17400 /* Remove all DW_OP_nop operations from LOC except, if it exists, the one that
17404 loc_descr_without_nops (dw_loc_descr_ref
&loc
)
17406 if (loc
->dw_loc_opc
== DW_OP_nop
&& loc
->dw_loc_next
== NULL
)
17409 /* Set of all DW_OP_nop operations we remove. */
17410 hash_set
<dw_loc_descr_ref
> nops
;
17412 /* First, strip all prefix NOP operations in order to keep the head of the
17413 operations list. */
17414 loc_descr_to_next_no_nop (loc
, nops
);
17416 for (dw_loc_descr_ref cur
= loc
; cur
!= NULL
;)
17418 /* For control flow operations: strip "prefix" nops in destination
17420 if (cur
->dw_loc_oprnd1
.val_class
== dw_val_class_loc
)
17421 loc_descr_to_next_no_nop (cur
->dw_loc_oprnd1
.v
.val_loc
, nops
);
17422 if (cur
->dw_loc_oprnd2
.val_class
== dw_val_class_loc
)
17423 loc_descr_to_next_no_nop (cur
->dw_loc_oprnd2
.v
.val_loc
, nops
);
17425 /* Do the same for the operations that follow, then move to the next
17427 if (cur
->dw_loc_next
!= NULL
)
17428 loc_descr_to_next_no_nop (cur
->dw_loc_next
, nops
);
17429 cur
= cur
->dw_loc_next
;
17432 nops
.traverse
<void *, free_loc_descr
> (NULL
);
17436 struct dwarf_procedure_info
;
17438 /* Helper structure for location descriptions generation. */
17439 struct loc_descr_context
17441 /* The type that is implicitly referenced by DW_OP_push_object_address, or
17442 NULL_TREE if DW_OP_push_object_address in invalid for this location
17443 description. This is used when processing PLACEHOLDER_EXPR nodes. */
17445 /* The ..._DECL node that should be translated as a
17446 DW_OP_push_object_address operation. */
17448 /* Information about the DWARF procedure we are currently generating. NULL if
17449 we are not generating a DWARF procedure. */
17450 struct dwarf_procedure_info
*dpi
;
17451 /* True if integral PLACEHOLDER_EXPR stands for the first argument passed
17452 by consumer. Used for DW_TAG_generic_subrange attributes. */
17453 bool placeholder_arg
;
17454 /* True if PLACEHOLDER_EXPR has been seen. */
17455 bool placeholder_seen
;
17458 /* DWARF procedures generation
17460 DWARF expressions (aka. location descriptions) are used to encode variable
17461 things such as sizes or offsets. Such computations can have redundant parts
17462 that can be factorized in order to reduce the size of the output debug
17463 information. This is the whole point of DWARF procedures.
17465 Thanks to stor-layout.c, size and offset expressions in GENERIC trees are
17466 already factorized into functions ("size functions") in order to handle very
17467 big and complex types. Such functions are quite simple: they have integral
17468 arguments, they return an integral result and their body contains only a
17469 return statement with arithmetic expressions. This is the only kind of
17470 function we are interested in translating into DWARF procedures, here.
17472 DWARF expressions and DWARF procedure are executed using a stack, so we have
17473 to define some calling convention for them to interact. Let's say that:
17475 - Before calling a DWARF procedure, DWARF expressions must push on the stack
17476 all arguments in reverse order (right-to-left) so that when the DWARF
17477 procedure execution starts, the first argument is the top of the stack.
17479 - Then, when returning, the DWARF procedure must have consumed all arguments
17480 on the stack, must have pushed the result and touched nothing else.
17482 - Each integral argument and the result are integral types can be hold in a
17485 - We call "frame offset" the number of stack slots that are "under DWARF
17486 procedure control": it includes the arguments slots, the temporaries and
17487 the result slot. Thus, it is equal to the number of arguments when the
17488 procedure execution starts and must be equal to one (the result) when it
17491 /* Helper structure used when generating operations for a DWARF procedure. */
17492 struct dwarf_procedure_info
17494 /* The FUNCTION_DECL node corresponding to the DWARF procedure that is
17495 currently translated. */
17497 /* The number of arguments FNDECL takes. */
17498 unsigned args_count
;
17501 /* Return a pointer to a newly created DIE node for a DWARF procedure. Add
17502 LOCATION as its DW_AT_location attribute. If FNDECL is not NULL_TREE,
17503 equate it to this DIE. */
17506 new_dwarf_proc_die (dw_loc_descr_ref location
, tree fndecl
,
17507 dw_die_ref parent_die
)
17509 dw_die_ref dwarf_proc_die
;
17511 if ((dwarf_version
< 3 && dwarf_strict
)
17512 || location
== NULL
)
17515 dwarf_proc_die
= new_die (DW_TAG_dwarf_procedure
, parent_die
, fndecl
);
17517 equate_decl_number_to_die (fndecl
, dwarf_proc_die
);
17518 add_AT_loc (dwarf_proc_die
, DW_AT_location
, location
);
17519 return dwarf_proc_die
;
17522 /* Return whether TYPE is a supported type as a DWARF procedure argument
17523 type or return type (we handle only scalar types and pointer types that
17524 aren't wider than the DWARF expression evaluation stack. */
17527 is_handled_procedure_type (tree type
)
17529 return ((INTEGRAL_TYPE_P (type
)
17530 || TREE_CODE (type
) == OFFSET_TYPE
17531 || TREE_CODE (type
) == POINTER_TYPE
)
17532 && int_size_in_bytes (type
) <= DWARF2_ADDR_SIZE
);
17535 /* Helper for resolve_args_picking: do the same but stop when coming across
17536 visited nodes. For each node we visit, register in FRAME_OFFSETS the frame
17537 offset *before* evaluating the corresponding operation. */
17540 resolve_args_picking_1 (dw_loc_descr_ref loc
, unsigned initial_frame_offset
,
17541 struct dwarf_procedure_info
*dpi
,
17542 hash_map
<dw_loc_descr_ref
, unsigned> &frame_offsets
)
17544 /* The "frame_offset" identifier is already used to name a macro... */
17545 unsigned frame_offset_
= initial_frame_offset
;
17546 dw_loc_descr_ref l
;
17548 for (l
= loc
; l
!= NULL
;)
17551 unsigned &l_frame_offset
= frame_offsets
.get_or_insert (l
, &existed
);
17553 /* If we already met this node, there is nothing to compute anymore. */
17556 /* Make sure that the stack size is consistent wherever the execution
17557 flow comes from. */
17558 gcc_assert ((unsigned) l_frame_offset
== frame_offset_
);
17561 l_frame_offset
= frame_offset_
;
17563 /* If needed, relocate the picking offset with respect to the frame
17565 if (l
->frame_offset_rel
)
17567 unsigned HOST_WIDE_INT off
;
17568 switch (l
->dw_loc_opc
)
17571 off
= l
->dw_loc_oprnd1
.v
.val_unsigned
;
17580 gcc_unreachable ();
17582 /* frame_offset_ is the size of the current stack frame, including
17583 incoming arguments. Besides, the arguments are pushed
17584 right-to-left. Thus, in order to access the Nth argument from
17585 this operation node, the picking has to skip temporaries *plus*
17586 one stack slot per argument (0 for the first one, 1 for the second
17589 The targetted argument number (N) is already set as the operand,
17590 and the number of temporaries can be computed with:
17591 frame_offsets_ - dpi->args_count */
17592 off
+= frame_offset_
- dpi
->args_count
;
17594 /* DW_OP_pick handles only offsets from 0 to 255 (inclusive)... */
17600 l
->dw_loc_opc
= DW_OP_dup
;
17601 l
->dw_loc_oprnd1
.v
.val_unsigned
= 0;
17605 l
->dw_loc_opc
= DW_OP_over
;
17606 l
->dw_loc_oprnd1
.v
.val_unsigned
= 0;
17610 l
->dw_loc_opc
= DW_OP_pick
;
17611 l
->dw_loc_oprnd1
.v
.val_unsigned
= off
;
17615 /* Update frame_offset according to the effect the current operation has
17617 switch (l
->dw_loc_opc
)
17625 case DW_OP_plus_uconst
:
17661 case DW_OP_deref_size
:
17663 case DW_OP_bit_piece
:
17664 case DW_OP_implicit_value
:
17665 case DW_OP_stack_value
:
17669 case DW_OP_const1u
:
17670 case DW_OP_const1s
:
17671 case DW_OP_const2u
:
17672 case DW_OP_const2s
:
17673 case DW_OP_const4u
:
17674 case DW_OP_const4s
:
17675 case DW_OP_const8u
:
17676 case DW_OP_const8s
:
17747 case DW_OP_push_object_address
:
17748 case DW_OP_call_frame_cfa
:
17749 case DW_OP_GNU_variable_value
:
17774 case DW_OP_xderef_size
:
17780 case DW_OP_call_ref
:
17782 dw_die_ref dwarf_proc
= l
->dw_loc_oprnd1
.v
.val_die_ref
.die
;
17783 int *stack_usage
= dwarf_proc_stack_usage_map
->get (dwarf_proc
);
17785 if (stack_usage
== NULL
)
17787 frame_offset_
+= *stack_usage
;
17791 case DW_OP_implicit_pointer
:
17792 case DW_OP_entry_value
:
17793 case DW_OP_const_type
:
17794 case DW_OP_regval_type
:
17795 case DW_OP_deref_type
:
17796 case DW_OP_convert
:
17797 case DW_OP_reinterpret
:
17798 case DW_OP_form_tls_address
:
17799 case DW_OP_GNU_push_tls_address
:
17800 case DW_OP_GNU_uninit
:
17801 case DW_OP_GNU_encoded_addr
:
17802 case DW_OP_GNU_implicit_pointer
:
17803 case DW_OP_GNU_entry_value
:
17804 case DW_OP_GNU_const_type
:
17805 case DW_OP_GNU_regval_type
:
17806 case DW_OP_GNU_deref_type
:
17807 case DW_OP_GNU_convert
:
17808 case DW_OP_GNU_reinterpret
:
17809 case DW_OP_GNU_parameter_ref
:
17810 /* loc_list_from_tree will probably not output these operations for
17811 size functions, so assume they will not appear here. */
17812 /* Fall through... */
17815 gcc_unreachable ();
17818 /* Now, follow the control flow (except subroutine calls). */
17819 switch (l
->dw_loc_opc
)
17822 if (!resolve_args_picking_1 (l
->dw_loc_next
, frame_offset_
, dpi
,
17825 /* Fall through. */
17828 l
= l
->dw_loc_oprnd1
.v
.val_loc
;
17831 case DW_OP_stack_value
:
17835 l
= l
->dw_loc_next
;
17843 /* Make a DFS over operations reachable through LOC (i.e. follow branch
17844 operations) in order to resolve the operand of DW_OP_pick operations that
17845 target DWARF procedure arguments (DPI). INITIAL_FRAME_OFFSET is the frame
17846 offset *before* LOC is executed. Return if all relocations were
17850 resolve_args_picking (dw_loc_descr_ref loc
, unsigned initial_frame_offset
,
17851 struct dwarf_procedure_info
*dpi
)
17853 /* Associate to all visited operations the frame offset *before* evaluating
17855 hash_map
<dw_loc_descr_ref
, unsigned> frame_offsets
;
17857 return resolve_args_picking_1 (loc
, initial_frame_offset
, dpi
,
17861 /* Try to generate a DWARF procedure that computes the same result as FNDECL.
17862 Return NULL if it is not possible. */
17865 function_to_dwarf_procedure (tree fndecl
)
17867 struct loc_descr_context ctx
;
17868 struct dwarf_procedure_info dpi
;
17869 dw_die_ref dwarf_proc_die
;
17870 tree tree_body
= DECL_SAVED_TREE (fndecl
);
17871 dw_loc_descr_ref loc_body
, epilogue
;
17876 /* Do not generate multiple DWARF procedures for the same function
17878 dwarf_proc_die
= lookup_decl_die (fndecl
);
17879 if (dwarf_proc_die
!= NULL
)
17880 return dwarf_proc_die
;
17882 /* DWARF procedures are available starting with the DWARFv3 standard. */
17883 if (dwarf_version
< 3 && dwarf_strict
)
17886 /* We handle only functions for which we still have a body, that return a
17887 supported type and that takes arguments with supported types. Note that
17888 there is no point translating functions that return nothing. */
17889 if (tree_body
== NULL_TREE
17890 || DECL_RESULT (fndecl
) == NULL_TREE
17891 || !is_handled_procedure_type (TREE_TYPE (DECL_RESULT (fndecl
))))
17894 for (cursor
= DECL_ARGUMENTS (fndecl
);
17895 cursor
!= NULL_TREE
;
17896 cursor
= TREE_CHAIN (cursor
))
17897 if (!is_handled_procedure_type (TREE_TYPE (cursor
)))
17900 /* Match only "expr" in: RETURN_EXPR (MODIFY_EXPR (RESULT_DECL, expr)). */
17901 if (TREE_CODE (tree_body
) != RETURN_EXPR
)
17903 tree_body
= TREE_OPERAND (tree_body
, 0);
17904 if (TREE_CODE (tree_body
) != MODIFY_EXPR
17905 || TREE_OPERAND (tree_body
, 0) != DECL_RESULT (fndecl
))
17907 tree_body
= TREE_OPERAND (tree_body
, 1);
17909 /* Try to translate the body expression itself. Note that this will probably
17910 cause an infinite recursion if its call graph has a cycle. This is very
17911 unlikely for size functions, however, so don't bother with such things at
17913 ctx
.context_type
= NULL_TREE
;
17914 ctx
.base_decl
= NULL_TREE
;
17916 ctx
.placeholder_arg
= false;
17917 ctx
.placeholder_seen
= false;
17918 dpi
.fndecl
= fndecl
;
17919 dpi
.args_count
= list_length (DECL_ARGUMENTS (fndecl
));
17920 loc_body
= loc_descriptor_from_tree (tree_body
, 0, &ctx
);
17924 /* After evaluating all operands in "loc_body", we should still have on the
17925 stack all arguments plus the desired function result (top of the stack).
17926 Generate code in order to keep only the result in our stack frame. */
17928 for (i
= 0; i
< dpi
.args_count
; ++i
)
17930 dw_loc_descr_ref op_couple
= new_loc_descr (DW_OP_swap
, 0, 0);
17931 op_couple
->dw_loc_next
= new_loc_descr (DW_OP_drop
, 0, 0);
17932 op_couple
->dw_loc_next
->dw_loc_next
= epilogue
;
17933 epilogue
= op_couple
;
17935 add_loc_descr (&loc_body
, epilogue
);
17936 if (!resolve_args_picking (loc_body
, dpi
.args_count
, &dpi
))
17939 /* Trailing nops from loc_descriptor_from_tree (if any) cannot be removed
17940 because they are considered useful. Now there is an epilogue, they are
17941 not anymore, so give it another try. */
17942 loc_descr_without_nops (loc_body
);
17944 /* fndecl may be used both as a regular DW_TAG_subprogram DIE and as
17945 a DW_TAG_dwarf_procedure, so we may have a conflict, here. It's unlikely,
17946 though, given that size functions do not come from source, so they should
17947 not have a dedicated DW_TAG_subprogram DIE. */
17949 = new_dwarf_proc_die (loc_body
, fndecl
,
17950 get_context_die (DECL_CONTEXT (fndecl
)));
17952 /* The called DWARF procedure consumes one stack slot per argument and
17953 returns one stack slot. */
17954 dwarf_proc_stack_usage_map
->put (dwarf_proc_die
, 1 - dpi
.args_count
);
17956 return dwarf_proc_die
;
17960 /* Generate Dwarf location list representing LOC.
17961 If WANT_ADDRESS is false, expression computing LOC will be computed
17962 If WANT_ADDRESS is 1, expression computing address of LOC will be returned
17963 if WANT_ADDRESS is 2, expression computing address useable in location
17964 will be returned (i.e. DW_OP_reg can be used
17965 to refer to register values).
17967 CONTEXT provides information to customize the location descriptions
17968 generation. Its context_type field specifies what type is implicitly
17969 referenced by DW_OP_push_object_address. If it is NULL_TREE, this operation
17970 will not be generated.
17972 Its DPI field determines whether we are generating a DWARF expression for a
17973 DWARF procedure, so PARM_DECL references are processed specifically.
17975 If CONTEXT is NULL, the behavior is the same as if context_type, base_decl
17976 and dpi fields were null. */
17978 static dw_loc_list_ref
17979 loc_list_from_tree_1 (tree loc
, int want_address
,
17980 struct loc_descr_context
*context
)
17982 dw_loc_descr_ref ret
= NULL
, ret1
= NULL
;
17983 dw_loc_list_ref list_ret
= NULL
, list_ret1
= NULL
;
17984 int have_address
= 0;
17985 enum dwarf_location_atom op
;
17987 /* ??? Most of the time we do not take proper care for sign/zero
17988 extending the values properly. Hopefully this won't be a real
17991 if (context
!= NULL
17992 && context
->base_decl
== loc
17993 && want_address
== 0)
17995 if (dwarf_version
>= 3 || !dwarf_strict
)
17996 return new_loc_list (new_loc_descr (DW_OP_push_object_address
, 0, 0),
17997 NULL
, 0, NULL
, 0, NULL
);
18002 switch (TREE_CODE (loc
))
18005 expansion_failed (loc
, NULL_RTX
, "ERROR_MARK");
18008 case PLACEHOLDER_EXPR
:
18009 /* This case involves extracting fields from an object to determine the
18010 position of other fields. It is supposed to appear only as the first
18011 operand of COMPONENT_REF nodes and to reference precisely the type
18012 that the context allows. */
18013 if (context
!= NULL
18014 && TREE_TYPE (loc
) == context
->context_type
18015 && want_address
>= 1)
18017 if (dwarf_version
>= 3 || !dwarf_strict
)
18019 ret
= new_loc_descr (DW_OP_push_object_address
, 0, 0);
18026 /* For DW_TAG_generic_subrange attributes, PLACEHOLDER_EXPR stands for
18027 the single argument passed by consumer. */
18028 else if (context
!= NULL
18029 && context
->placeholder_arg
18030 && INTEGRAL_TYPE_P (TREE_TYPE (loc
))
18031 && want_address
== 0)
18033 ret
= new_loc_descr (DW_OP_pick
, 0, 0);
18034 ret
->frame_offset_rel
= 1;
18035 context
->placeholder_seen
= true;
18039 expansion_failed (loc
, NULL_RTX
,
18040 "PLACEHOLDER_EXPR for an unexpected type");
18045 const int nargs
= call_expr_nargs (loc
);
18046 tree callee
= get_callee_fndecl (loc
);
18048 dw_die_ref dwarf_proc
;
18050 if (callee
== NULL_TREE
)
18051 goto call_expansion_failed
;
18053 /* We handle only functions that return an integer. */
18054 if (!is_handled_procedure_type (TREE_TYPE (TREE_TYPE (callee
))))
18055 goto call_expansion_failed
;
18057 dwarf_proc
= function_to_dwarf_procedure (callee
);
18058 if (dwarf_proc
== NULL
)
18059 goto call_expansion_failed
;
18061 /* Evaluate arguments right-to-left so that the first argument will
18062 be the top-most one on the stack. */
18063 for (i
= nargs
- 1; i
>= 0; --i
)
18065 dw_loc_descr_ref loc_descr
18066 = loc_descriptor_from_tree (CALL_EXPR_ARG (loc
, i
), 0,
18069 if (loc_descr
== NULL
)
18070 goto call_expansion_failed
;
18072 add_loc_descr (&ret
, loc_descr
);
18075 ret1
= new_loc_descr (DW_OP_call4
, 0, 0);
18076 ret1
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
18077 ret1
->dw_loc_oprnd1
.v
.val_die_ref
.die
= dwarf_proc
;
18078 ret1
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
18079 add_loc_descr (&ret
, ret1
);
18082 call_expansion_failed
:
18083 expansion_failed (loc
, NULL_RTX
, "CALL_EXPR");
18084 /* There are no opcodes for these operations. */
18088 case PREINCREMENT_EXPR
:
18089 case PREDECREMENT_EXPR
:
18090 case POSTINCREMENT_EXPR
:
18091 case POSTDECREMENT_EXPR
:
18092 expansion_failed (loc
, NULL_RTX
, "PRE/POST INDCREMENT/DECREMENT");
18093 /* There are no opcodes for these operations. */
18097 /* If we already want an address, see if there is INDIRECT_REF inside
18098 e.g. for &this->field. */
18101 list_ret
= loc_list_for_address_of_addr_expr_of_indirect_ref
18102 (loc
, want_address
== 2, context
);
18105 else if (decl_address_ip_invariant_p (TREE_OPERAND (loc
, 0))
18106 && (ret
= cst_pool_loc_descr (loc
)))
18109 /* Otherwise, process the argument and look for the address. */
18110 if (!list_ret
&& !ret
)
18111 list_ret
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 0), 1, context
);
18115 expansion_failed (loc
, NULL_RTX
, "need address of ADDR_EXPR");
18121 if (DECL_THREAD_LOCAL_P (loc
))
18124 enum dwarf_location_atom tls_op
;
18125 enum dtprel_bool dtprel
= dtprel_false
;
18127 if (targetm
.have_tls
)
18129 /* If this is not defined, we have no way to emit the
18131 if (!targetm
.asm_out
.output_dwarf_dtprel
)
18134 /* The way DW_OP_GNU_push_tls_address is specified, we
18135 can only look up addresses of objects in the current
18136 module. We used DW_OP_addr as first op, but that's
18137 wrong, because DW_OP_addr is relocated by the debug
18138 info consumer, while DW_OP_GNU_push_tls_address
18139 operand shouldn't be. */
18140 if (DECL_EXTERNAL (loc
) && !targetm
.binds_local_p (loc
))
18142 dtprel
= dtprel_true
;
18143 /* We check for DWARF 5 here because gdb did not implement
18144 DW_OP_form_tls_address until after 7.12. */
18145 tls_op
= (dwarf_version
>= 5 ? DW_OP_form_tls_address
18146 : DW_OP_GNU_push_tls_address
);
18150 if (!targetm
.emutls
.debug_form_tls_address
18151 || !(dwarf_version
>= 3 || !dwarf_strict
))
18153 /* We stuffed the control variable into the DECL_VALUE_EXPR
18154 to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
18155 no longer appear in gimple code. We used the control
18156 variable in specific so that we could pick it up here. */
18157 loc
= DECL_VALUE_EXPR (loc
);
18158 tls_op
= DW_OP_form_tls_address
;
18161 rtl
= rtl_for_decl_location (loc
);
18162 if (rtl
== NULL_RTX
)
18167 rtl
= XEXP (rtl
, 0);
18168 if (! CONSTANT_P (rtl
))
18171 ret
= new_addr_loc_descr (rtl
, dtprel
);
18172 ret1
= new_loc_descr (tls_op
, 0, 0);
18173 add_loc_descr (&ret
, ret1
);
18181 if (context
!= NULL
&& context
->dpi
!= NULL
18182 && DECL_CONTEXT (loc
) == context
->dpi
->fndecl
)
18184 /* We are generating code for a DWARF procedure and we want to access
18185 one of its arguments: find the appropriate argument offset and let
18186 the resolve_args_picking pass compute the offset that complies
18187 with the stack frame size. */
18191 for (cursor
= DECL_ARGUMENTS (context
->dpi
->fndecl
);
18192 cursor
!= NULL_TREE
&& cursor
!= loc
;
18193 cursor
= TREE_CHAIN (cursor
), ++i
)
18195 /* If we are translating a DWARF procedure, all referenced parameters
18196 must belong to the current function. */
18197 gcc_assert (cursor
!= NULL_TREE
);
18199 ret
= new_loc_descr (DW_OP_pick
, i
, 0);
18200 ret
->frame_offset_rel
= 1;
18206 if (DECL_HAS_VALUE_EXPR_P (loc
))
18207 return loc_list_from_tree_1 (DECL_VALUE_EXPR (loc
),
18208 want_address
, context
);
18211 case FUNCTION_DECL
:
18214 var_loc_list
*loc_list
= lookup_decl_loc (loc
);
18216 if (loc_list
&& loc_list
->first
)
18218 list_ret
= dw_loc_list (loc_list
, loc
, want_address
);
18219 have_address
= want_address
!= 0;
18222 rtl
= rtl_for_decl_location (loc
);
18223 if (rtl
== NULL_RTX
)
18225 if (TREE_CODE (loc
) != FUNCTION_DECL
18227 && current_function_decl
18228 && want_address
!= 1
18229 && ! DECL_IGNORED_P (loc
)
18230 && (INTEGRAL_TYPE_P (TREE_TYPE (loc
))
18231 || POINTER_TYPE_P (TREE_TYPE (loc
)))
18232 && DECL_CONTEXT (loc
) == current_function_decl
18233 && (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (loc
)))
18234 <= DWARF2_ADDR_SIZE
))
18236 dw_die_ref ref
= lookup_decl_die (loc
);
18237 ret
= new_loc_descr (DW_OP_GNU_variable_value
, 0, 0);
18240 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
18241 ret
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
18242 ret
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
18246 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_decl_ref
;
18247 ret
->dw_loc_oprnd1
.v
.val_decl_ref
= loc
;
18251 expansion_failed (loc
, NULL_RTX
, "DECL has no RTL");
18254 else if (CONST_INT_P (rtl
))
18256 HOST_WIDE_INT val
= INTVAL (rtl
);
18257 if (TYPE_UNSIGNED (TREE_TYPE (loc
)))
18258 val
&= GET_MODE_MASK (DECL_MODE (loc
));
18259 ret
= int_loc_descriptor (val
);
18261 else if (GET_CODE (rtl
) == CONST_STRING
)
18263 expansion_failed (loc
, NULL_RTX
, "CONST_STRING");
18266 else if (CONSTANT_P (rtl
) && const_ok_for_output (rtl
))
18267 ret
= new_addr_loc_descr (rtl
, dtprel_false
);
18270 machine_mode mode
, mem_mode
;
18272 /* Certain constructs can only be represented at top-level. */
18273 if (want_address
== 2)
18275 ret
= loc_descriptor (rtl
, VOIDmode
,
18276 VAR_INIT_STATUS_INITIALIZED
);
18281 mode
= GET_MODE (rtl
);
18282 mem_mode
= VOIDmode
;
18286 mode
= get_address_mode (rtl
);
18287 rtl
= XEXP (rtl
, 0);
18290 ret
= mem_loc_descriptor (rtl
, mode
, mem_mode
,
18291 VAR_INIT_STATUS_INITIALIZED
);
18294 expansion_failed (loc
, rtl
,
18295 "failed to produce loc descriptor for rtl");
18301 if (!integer_zerop (TREE_OPERAND (loc
, 1)))
18308 list_ret
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 0), 0, context
);
18312 case TARGET_MEM_REF
:
18314 case DEBUG_EXPR_DECL
:
18317 case COMPOUND_EXPR
:
18318 return loc_list_from_tree_1 (TREE_OPERAND (loc
, 1), want_address
,
18322 case VIEW_CONVERT_EXPR
:
18325 case NON_LVALUE_EXPR
:
18326 return loc_list_from_tree_1 (TREE_OPERAND (loc
, 0), want_address
,
18329 case COMPONENT_REF
:
18330 case BIT_FIELD_REF
:
18332 case ARRAY_RANGE_REF
:
18333 case REALPART_EXPR
:
18334 case IMAGPART_EXPR
:
18337 poly_int64 bitsize
, bitpos
, bytepos
;
18339 int unsignedp
, reversep
, volatilep
= 0;
18341 obj
= get_inner_reference (loc
, &bitsize
, &bitpos
, &offset
, &mode
,
18342 &unsignedp
, &reversep
, &volatilep
);
18344 gcc_assert (obj
!= loc
);
18346 list_ret
= loc_list_from_tree_1 (obj
,
18348 && known_eq (bitpos
, 0)
18349 && !offset
? 2 : 1,
18351 /* TODO: We can extract value of the small expression via shifting even
18352 for nonzero bitpos. */
18355 if (!multiple_p (bitpos
, BITS_PER_UNIT
, &bytepos
)
18356 || !multiple_p (bitsize
, BITS_PER_UNIT
))
18358 expansion_failed (loc
, NULL_RTX
,
18359 "bitfield access");
18363 if (offset
!= NULL_TREE
)
18365 /* Variable offset. */
18366 list_ret1
= loc_list_from_tree_1 (offset
, 0, context
);
18367 if (list_ret1
== 0)
18369 add_loc_list (&list_ret
, list_ret1
);
18372 add_loc_descr_to_each (list_ret
, new_loc_descr (DW_OP_plus
, 0, 0));
18375 HOST_WIDE_INT value
;
18376 if (bytepos
.is_constant (&value
) && value
> 0)
18377 add_loc_descr_to_each (list_ret
, new_loc_descr (DW_OP_plus_uconst
,
18379 else if (maybe_ne (bytepos
, 0))
18380 loc_list_plus_const (list_ret
, bytepos
);
18387 if ((want_address
|| !tree_fits_shwi_p (loc
))
18388 && (ret
= cst_pool_loc_descr (loc
)))
18390 else if (want_address
== 2
18391 && tree_fits_shwi_p (loc
)
18392 && (ret
= address_of_int_loc_descriptor
18393 (int_size_in_bytes (TREE_TYPE (loc
)),
18394 tree_to_shwi (loc
))))
18396 else if (tree_fits_shwi_p (loc
))
18397 ret
= int_loc_descriptor (tree_to_shwi (loc
));
18398 else if (tree_fits_uhwi_p (loc
))
18399 ret
= uint_loc_descriptor (tree_to_uhwi (loc
));
18402 expansion_failed (loc
, NULL_RTX
,
18403 "Integer operand is not host integer");
18412 if ((ret
= cst_pool_loc_descr (loc
)))
18414 else if (TREE_CODE (loc
) == CONSTRUCTOR
)
18416 tree type
= TREE_TYPE (loc
);
18417 unsigned HOST_WIDE_INT size
= int_size_in_bytes (type
);
18418 unsigned HOST_WIDE_INT offset
= 0;
18419 unsigned HOST_WIDE_INT cnt
;
18420 constructor_elt
*ce
;
18422 if (TREE_CODE (type
) == RECORD_TYPE
)
18424 /* This is very limited, but it's enough to output
18425 pointers to member functions, as long as the
18426 referenced function is defined in the current
18427 translation unit. */
18428 FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (loc
), cnt
, ce
)
18430 tree val
= ce
->value
;
18432 tree field
= ce
->index
;
18437 if (!field
|| DECL_BIT_FIELD (field
))
18439 expansion_failed (loc
, NULL_RTX
,
18440 "bitfield in record type constructor");
18441 size
= offset
= (unsigned HOST_WIDE_INT
)-1;
18446 HOST_WIDE_INT fieldsize
= tree_to_shwi (DECL_SIZE_UNIT (field
));
18447 unsigned HOST_WIDE_INT pos
= int_byte_position (field
);
18448 gcc_assert (pos
+ fieldsize
<= size
);
18451 expansion_failed (loc
, NULL_RTX
,
18452 "out-of-order fields in record constructor");
18453 size
= offset
= (unsigned HOST_WIDE_INT
)-1;
18459 ret1
= new_loc_descr (DW_OP_piece
, pos
- offset
, 0);
18460 add_loc_descr (&ret
, ret1
);
18463 if (val
&& fieldsize
!= 0)
18465 ret1
= loc_descriptor_from_tree (val
, want_address
, context
);
18468 expansion_failed (loc
, NULL_RTX
,
18469 "unsupported expression in field");
18470 size
= offset
= (unsigned HOST_WIDE_INT
)-1;
18474 add_loc_descr (&ret
, ret1
);
18478 ret1
= new_loc_descr (DW_OP_piece
, fieldsize
, 0);
18479 add_loc_descr (&ret
, ret1
);
18480 offset
= pos
+ fieldsize
;
18484 if (offset
!= size
)
18486 ret1
= new_loc_descr (DW_OP_piece
, size
- offset
, 0);
18487 add_loc_descr (&ret
, ret1
);
18491 have_address
= !!want_address
;
18494 expansion_failed (loc
, NULL_RTX
,
18495 "constructor of non-record type");
18498 /* We can construct small constants here using int_loc_descriptor. */
18499 expansion_failed (loc
, NULL_RTX
,
18500 "constructor or constant not in constant pool");
18503 case TRUTH_AND_EXPR
:
18504 case TRUTH_ANDIF_EXPR
:
18509 case TRUTH_XOR_EXPR
:
18514 case TRUTH_OR_EXPR
:
18515 case TRUTH_ORIF_EXPR
:
18520 case FLOOR_DIV_EXPR
:
18521 case CEIL_DIV_EXPR
:
18522 case ROUND_DIV_EXPR
:
18523 case TRUNC_DIV_EXPR
:
18524 case EXACT_DIV_EXPR
:
18525 if (TYPE_UNSIGNED (TREE_TYPE (loc
)))
18534 case FLOOR_MOD_EXPR
:
18535 case CEIL_MOD_EXPR
:
18536 case ROUND_MOD_EXPR
:
18537 case TRUNC_MOD_EXPR
:
18538 if (TYPE_UNSIGNED (TREE_TYPE (loc
)))
18543 list_ret
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 0), 0, context
);
18544 list_ret1
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 1), 0, context
);
18545 if (list_ret
== 0 || list_ret1
== 0)
18548 add_loc_list (&list_ret
, list_ret1
);
18551 add_loc_descr_to_each (list_ret
, new_loc_descr (DW_OP_over
, 0, 0));
18552 add_loc_descr_to_each (list_ret
, new_loc_descr (DW_OP_over
, 0, 0));
18553 add_loc_descr_to_each (list_ret
, new_loc_descr (DW_OP_div
, 0, 0));
18554 add_loc_descr_to_each (list_ret
, new_loc_descr (DW_OP_mul
, 0, 0));
18555 add_loc_descr_to_each (list_ret
, new_loc_descr (DW_OP_minus
, 0, 0));
18567 op
= (TYPE_UNSIGNED (TREE_TYPE (loc
)) ? DW_OP_shr
: DW_OP_shra
);
18570 case POINTER_PLUS_EXPR
:
18573 if (tree_fits_shwi_p (TREE_OPERAND (loc
, 1)))
18575 /* Big unsigned numbers can fit in HOST_WIDE_INT but it may be
18576 smarter to encode their opposite. The DW_OP_plus_uconst operation
18577 takes 1 + X bytes, X being the size of the ULEB128 addend. On the
18578 other hand, a "<push literal>; DW_OP_minus" pattern takes 1 + Y
18579 bytes, Y being the size of the operation that pushes the opposite
18580 of the addend. So let's choose the smallest representation. */
18581 const tree tree_addend
= TREE_OPERAND (loc
, 1);
18582 offset_int wi_addend
;
18583 HOST_WIDE_INT shwi_addend
;
18584 dw_loc_descr_ref loc_naddend
;
18586 list_ret
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 0), 0, context
);
18590 /* Try to get the literal to push. It is the opposite of the addend,
18591 so as we rely on wrapping during DWARF evaluation, first decode
18592 the literal as a "DWARF-sized" signed number. */
18593 wi_addend
= wi::to_offset (tree_addend
);
18594 wi_addend
= wi::sext (wi_addend
, DWARF2_ADDR_SIZE
* 8);
18595 shwi_addend
= wi_addend
.to_shwi ();
18596 loc_naddend
= (shwi_addend
!= INTTYPE_MINIMUM (HOST_WIDE_INT
))
18597 ? int_loc_descriptor (-shwi_addend
)
18600 if (loc_naddend
!= NULL
18601 && ((unsigned) size_of_uleb128 (shwi_addend
)
18602 > size_of_loc_descr (loc_naddend
)))
18604 add_loc_descr_to_each (list_ret
, loc_naddend
);
18605 add_loc_descr_to_each (list_ret
,
18606 new_loc_descr (DW_OP_minus
, 0, 0));
18610 for (dw_loc_descr_ref loc_cur
= loc_naddend
; loc_cur
!= NULL
; )
18612 loc_naddend
= loc_cur
;
18613 loc_cur
= loc_cur
->dw_loc_next
;
18614 ggc_free (loc_naddend
);
18616 loc_list_plus_const (list_ret
, wi_addend
.to_shwi ());
18626 goto do_comp_binop
;
18630 goto do_comp_binop
;
18634 goto do_comp_binop
;
18638 goto do_comp_binop
;
18641 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
18643 list_ret
= loc_list_from_tree (TREE_OPERAND (loc
, 0), 0, context
);
18644 list_ret1
= loc_list_from_tree (TREE_OPERAND (loc
, 1), 0, context
);
18645 list_ret
= loc_list_from_uint_comparison (list_ret
, list_ret1
,
18661 list_ret
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 0), 0, context
);
18662 list_ret1
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 1), 0, context
);
18663 if (list_ret
== 0 || list_ret1
== 0)
18666 add_loc_list (&list_ret
, list_ret1
);
18669 add_loc_descr_to_each (list_ret
, new_loc_descr (op
, 0, 0));
18672 case TRUTH_NOT_EXPR
:
18686 list_ret
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 0), 0, context
);
18690 add_loc_descr_to_each (list_ret
, new_loc_descr (op
, 0, 0));
18696 const enum tree_code code
=
18697 TREE_CODE (loc
) == MIN_EXPR
? GT_EXPR
: LT_EXPR
;
18699 loc
= build3 (COND_EXPR
, TREE_TYPE (loc
),
18700 build2 (code
, integer_type_node
,
18701 TREE_OPERAND (loc
, 0), TREE_OPERAND (loc
, 1)),
18702 TREE_OPERAND (loc
, 1), TREE_OPERAND (loc
, 0));
18709 dw_loc_descr_ref lhs
18710 = loc_descriptor_from_tree (TREE_OPERAND (loc
, 1), 0, context
);
18711 dw_loc_list_ref rhs
18712 = loc_list_from_tree_1 (TREE_OPERAND (loc
, 2), 0, context
);
18713 dw_loc_descr_ref bra_node
, jump_node
, tmp
;
18715 list_ret
= loc_list_from_tree_1 (TREE_OPERAND (loc
, 0), 0, context
);
18716 if (list_ret
== 0 || lhs
== 0 || rhs
== 0)
18719 bra_node
= new_loc_descr (DW_OP_bra
, 0, 0);
18720 add_loc_descr_to_each (list_ret
, bra_node
);
18722 add_loc_list (&list_ret
, rhs
);
18723 jump_node
= new_loc_descr (DW_OP_skip
, 0, 0);
18724 add_loc_descr_to_each (list_ret
, jump_node
);
18726 add_loc_descr_to_each (list_ret
, lhs
);
18727 bra_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
18728 bra_node
->dw_loc_oprnd1
.v
.val_loc
= lhs
;
18730 /* ??? Need a node to point the skip at. Use a nop. */
18731 tmp
= new_loc_descr (DW_OP_nop
, 0, 0);
18732 add_loc_descr_to_each (list_ret
, tmp
);
18733 jump_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
18734 jump_node
->dw_loc_oprnd1
.v
.val_loc
= tmp
;
18738 case FIX_TRUNC_EXPR
:
18742 /* Leave front-end specific codes as simply unknown. This comes
18743 up, for instance, with the C STMT_EXPR. */
18744 if ((unsigned int) TREE_CODE (loc
)
18745 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE
)
18747 expansion_failed (loc
, NULL_RTX
,
18748 "language specific tree node");
18752 /* Otherwise this is a generic code; we should just lists all of
18753 these explicitly. We forgot one. */
18755 gcc_unreachable ();
18757 /* In a release build, we want to degrade gracefully: better to
18758 generate incomplete debugging information than to crash. */
18762 if (!ret
&& !list_ret
)
18765 if (want_address
== 2 && !have_address
18766 && (dwarf_version
>= 4 || !dwarf_strict
))
18768 if (int_size_in_bytes (TREE_TYPE (loc
)) > DWARF2_ADDR_SIZE
)
18770 expansion_failed (loc
, NULL_RTX
,
18771 "DWARF address size mismatch");
18775 add_loc_descr (&ret
, new_loc_descr (DW_OP_stack_value
, 0, 0));
18777 add_loc_descr_to_each (list_ret
,
18778 new_loc_descr (DW_OP_stack_value
, 0, 0));
18781 /* Show if we can't fill the request for an address. */
18782 if (want_address
&& !have_address
)
18784 expansion_failed (loc
, NULL_RTX
,
18785 "Want address and only have value");
18789 gcc_assert (!ret
|| !list_ret
);
18791 /* If we've got an address and don't want one, dereference. */
18792 if (!want_address
&& have_address
)
18794 HOST_WIDE_INT size
= int_size_in_bytes (TREE_TYPE (loc
));
18796 if (size
> DWARF2_ADDR_SIZE
|| size
== -1)
18798 expansion_failed (loc
, NULL_RTX
,
18799 "DWARF address size mismatch");
18802 else if (size
== DWARF2_ADDR_SIZE
)
18805 op
= DW_OP_deref_size
;
18808 add_loc_descr (&ret
, new_loc_descr (op
, size
, 0));
18810 add_loc_descr_to_each (list_ret
, new_loc_descr (op
, size
, 0));
18813 list_ret
= new_loc_list (ret
, NULL
, 0, NULL
, 0, NULL
);
18818 /* Likewise, but strip useless DW_OP_nop operations in the resulting
18821 static dw_loc_list_ref
18822 loc_list_from_tree (tree loc
, int want_address
,
18823 struct loc_descr_context
*context
)
18825 dw_loc_list_ref result
= loc_list_from_tree_1 (loc
, want_address
, context
);
18827 for (dw_loc_list_ref loc_cur
= result
;
18828 loc_cur
!= NULL
; loc_cur
= loc_cur
->dw_loc_next
)
18829 loc_descr_without_nops (loc_cur
->expr
);
18833 /* Same as above but return only single location expression. */
18834 static dw_loc_descr_ref
18835 loc_descriptor_from_tree (tree loc
, int want_address
,
18836 struct loc_descr_context
*context
)
18838 dw_loc_list_ref ret
= loc_list_from_tree (loc
, want_address
, context
);
18841 if (ret
->dw_loc_next
)
18843 expansion_failed (loc
, NULL_RTX
,
18844 "Location list where only loc descriptor needed");
18850 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
18851 pointer to the declared type for the relevant field variable, or return
18852 `integer_type_node' if the given node turns out to be an
18853 ERROR_MARK node. */
18856 field_type (const_tree decl
)
18860 if (TREE_CODE (decl
) == ERROR_MARK
)
18861 return integer_type_node
;
18863 type
= DECL_BIT_FIELD_TYPE (decl
);
18864 if (type
== NULL_TREE
)
18865 type
= TREE_TYPE (decl
);
18870 /* Given a pointer to a tree node, return the alignment in bits for
18871 it, or else return BITS_PER_WORD if the node actually turns out to
18872 be an ERROR_MARK node. */
18874 static inline unsigned
18875 simple_type_align_in_bits (const_tree type
)
18877 return (TREE_CODE (type
) != ERROR_MARK
) ? TYPE_ALIGN (type
) : BITS_PER_WORD
;
18880 static inline unsigned
18881 simple_decl_align_in_bits (const_tree decl
)
18883 return (TREE_CODE (decl
) != ERROR_MARK
) ? DECL_ALIGN (decl
) : BITS_PER_WORD
;
18886 /* Return the result of rounding T up to ALIGN. */
18888 static inline offset_int
18889 round_up_to_align (const offset_int
&t
, unsigned int align
)
18891 return wi::udiv_trunc (t
+ align
- 1, align
) * align
;
18894 /* Compute the size of TYPE in bytes. If possible, return NULL and store the
18895 size as an integer constant in CST_SIZE. Otherwise, if possible, return a
18896 DWARF expression that computes the size. Return NULL and set CST_SIZE to -1
18897 if we fail to return the size in one of these two forms. */
18899 static dw_loc_descr_ref
18900 type_byte_size (const_tree type
, HOST_WIDE_INT
*cst_size
)
18903 struct loc_descr_context ctx
;
18905 /* Return a constant integer in priority, if possible. */
18906 *cst_size
= int_size_in_bytes (type
);
18907 if (*cst_size
!= -1)
18910 ctx
.context_type
= const_cast<tree
> (type
);
18911 ctx
.base_decl
= NULL_TREE
;
18913 ctx
.placeholder_arg
= false;
18914 ctx
.placeholder_seen
= false;
18916 type
= TYPE_MAIN_VARIANT (type
);
18917 tree_size
= TYPE_SIZE_UNIT (type
);
18918 return ((tree_size
!= NULL_TREE
)
18919 ? loc_descriptor_from_tree (tree_size
, 0, &ctx
)
18923 /* Helper structure for RECORD_TYPE processing. */
18926 /* Root RECORD_TYPE. It is needed to generate data member location
18927 descriptions in variable-length records (VLR), but also to cope with
18928 variants, which are composed of nested structures multiplexed with
18929 QUAL_UNION_TYPE nodes. Each time such a structure is passed to a
18930 function processing a FIELD_DECL, it is required to be non null. */
18932 /* When generating a variant part in a RECORD_TYPE (i.e. a nested
18933 QUAL_UNION_TYPE), this holds an expression that computes the offset for
18934 this variant part as part of the root record (in storage units). For
18935 regular records, it must be NULL_TREE. */
18936 tree variant_part_offset
;
18939 /* Given a pointer to a FIELD_DECL, compute the byte offset of the lowest
18940 addressed byte of the "containing object" for the given FIELD_DECL. If
18941 possible, return a native constant through CST_OFFSET (in which case NULL is
18942 returned); otherwise return a DWARF expression that computes the offset.
18944 Set *CST_OFFSET to 0 and return NULL if we are unable to determine what
18945 that offset is, either because the argument turns out to be a pointer to an
18946 ERROR_MARK node, or because the offset expression is too complex for us.
18948 CTX is required: see the comment for VLR_CONTEXT. */
18950 static dw_loc_descr_ref
18951 field_byte_offset (const_tree decl
, struct vlr_context
*ctx
,
18952 HOST_WIDE_INT
*cst_offset
)
18955 dw_loc_list_ref loc_result
;
18959 if (TREE_CODE (decl
) == ERROR_MARK
)
18962 gcc_assert (TREE_CODE (decl
) == FIELD_DECL
);
18964 /* We cannot handle variable bit offsets at the moment, so abort if it's the
18966 if (TREE_CODE (DECL_FIELD_BIT_OFFSET (decl
)) != INTEGER_CST
)
18969 #ifdef PCC_BITFIELD_TYPE_MATTERS
18970 /* We used to handle only constant offsets in all cases. Now, we handle
18971 properly dynamic byte offsets only when PCC bitfield type doesn't
18973 if (PCC_BITFIELD_TYPE_MATTERS
18974 && TREE_CODE (DECL_FIELD_OFFSET (decl
)) == INTEGER_CST
)
18976 offset_int object_offset_in_bits
;
18977 offset_int object_offset_in_bytes
;
18978 offset_int bitpos_int
;
18980 tree field_size_tree
;
18981 offset_int deepest_bitpos
;
18982 offset_int field_size_in_bits
;
18983 unsigned int type_align_in_bits
;
18984 unsigned int decl_align_in_bits
;
18985 offset_int type_size_in_bits
;
18987 bitpos_int
= wi::to_offset (bit_position (decl
));
18988 type
= field_type (decl
);
18989 type_size_in_bits
= offset_int_type_size_in_bits (type
);
18990 type_align_in_bits
= simple_type_align_in_bits (type
);
18992 field_size_tree
= DECL_SIZE (decl
);
18994 /* The size could be unspecified if there was an error, or for
18995 a flexible array member. */
18996 if (!field_size_tree
)
18997 field_size_tree
= bitsize_zero_node
;
18999 /* If the size of the field is not constant, use the type size. */
19000 if (TREE_CODE (field_size_tree
) == INTEGER_CST
)
19001 field_size_in_bits
= wi::to_offset (field_size_tree
);
19003 field_size_in_bits
= type_size_in_bits
;
19005 decl_align_in_bits
= simple_decl_align_in_bits (decl
);
19007 /* The GCC front-end doesn't make any attempt to keep track of the
19008 starting bit offset (relative to the start of the containing
19009 structure type) of the hypothetical "containing object" for a
19010 bit-field. Thus, when computing the byte offset value for the
19011 start of the "containing object" of a bit-field, we must deduce
19012 this information on our own. This can be rather tricky to do in
19013 some cases. For example, handling the following structure type
19014 definition when compiling for an i386/i486 target (which only
19015 aligns long long's to 32-bit boundaries) can be very tricky:
19017 struct S { int field1; long long field2:31; };
19019 Fortunately, there is a simple rule-of-thumb which can be used
19020 in such cases. When compiling for an i386/i486, GCC will
19021 allocate 8 bytes for the structure shown above. It decides to
19022 do this based upon one simple rule for bit-field allocation.
19023 GCC allocates each "containing object" for each bit-field at
19024 the first (i.e. lowest addressed) legitimate alignment boundary
19025 (based upon the required minimum alignment for the declared
19026 type of the field) which it can possibly use, subject to the
19027 condition that there is still enough available space remaining
19028 in the containing object (when allocated at the selected point)
19029 to fully accommodate all of the bits of the bit-field itself.
19031 This simple rule makes it obvious why GCC allocates 8 bytes for
19032 each object of the structure type shown above. When looking
19033 for a place to allocate the "containing object" for `field2',
19034 the compiler simply tries to allocate a 64-bit "containing
19035 object" at each successive 32-bit boundary (starting at zero)
19036 until it finds a place to allocate that 64- bit field such that
19037 at least 31 contiguous (and previously unallocated) bits remain
19038 within that selected 64 bit field. (As it turns out, for the
19039 example above, the compiler finds it is OK to allocate the
19040 "containing object" 64-bit field at bit-offset zero within the
19043 Here we attempt to work backwards from the limited set of facts
19044 we're given, and we try to deduce from those facts, where GCC
19045 must have believed that the containing object started (within
19046 the structure type). The value we deduce is then used (by the
19047 callers of this routine) to generate DW_AT_location and
19048 DW_AT_bit_offset attributes for fields (both bit-fields and, in
19049 the case of DW_AT_location, regular fields as well). */
19051 /* Figure out the bit-distance from the start of the structure to
19052 the "deepest" bit of the bit-field. */
19053 deepest_bitpos
= bitpos_int
+ field_size_in_bits
;
19055 /* This is the tricky part. Use some fancy footwork to deduce
19056 where the lowest addressed bit of the containing object must
19058 object_offset_in_bits
= deepest_bitpos
- type_size_in_bits
;
19060 /* Round up to type_align by default. This works best for
19062 object_offset_in_bits
19063 = round_up_to_align (object_offset_in_bits
, type_align_in_bits
);
19065 if (wi::gtu_p (object_offset_in_bits
, bitpos_int
))
19067 object_offset_in_bits
= deepest_bitpos
- type_size_in_bits
;
19069 /* Round up to decl_align instead. */
19070 object_offset_in_bits
19071 = round_up_to_align (object_offset_in_bits
, decl_align_in_bits
);
19074 object_offset_in_bytes
19075 = wi::lrshift (object_offset_in_bits
, LOG2_BITS_PER_UNIT
);
19076 if (ctx
->variant_part_offset
== NULL_TREE
)
19078 *cst_offset
= object_offset_in_bytes
.to_shwi ();
19081 tree_result
= wide_int_to_tree (sizetype
, object_offset_in_bytes
);
19084 #endif /* PCC_BITFIELD_TYPE_MATTERS */
19085 tree_result
= byte_position (decl
);
19087 if (ctx
->variant_part_offset
!= NULL_TREE
)
19088 tree_result
= fold_build2 (PLUS_EXPR
, TREE_TYPE (tree_result
),
19089 ctx
->variant_part_offset
, tree_result
);
19091 /* If the byte offset is a constant, it's simplier to handle a native
19092 constant rather than a DWARF expression. */
19093 if (TREE_CODE (tree_result
) == INTEGER_CST
)
19095 *cst_offset
= wi::to_offset (tree_result
).to_shwi ();
19098 struct loc_descr_context loc_ctx
= {
19099 ctx
->struct_type
, /* context_type */
19100 NULL_TREE
, /* base_decl */
19102 false, /* placeholder_arg */
19103 false /* placeholder_seen */
19105 loc_result
= loc_list_from_tree (tree_result
, 0, &loc_ctx
);
19107 /* We want a DWARF expression: abort if we only have a location list with
19108 multiple elements. */
19109 if (!loc_result
|| !single_element_loc_list_p (loc_result
))
19112 return loc_result
->expr
;
19115 /* The following routines define various Dwarf attributes and any data
19116 associated with them. */
19118 /* Add a location description attribute value to a DIE.
19120 This emits location attributes suitable for whole variables and
19121 whole parameters. Note that the location attributes for struct fields are
19122 generated by the routine `data_member_location_attribute' below. */
19125 add_AT_location_description (dw_die_ref die
, enum dwarf_attribute attr_kind
,
19126 dw_loc_list_ref descr
)
19128 bool check_no_locviews
= true;
19131 if (single_element_loc_list_p (descr
))
19132 add_AT_loc (die
, attr_kind
, descr
->expr
);
19135 add_AT_loc_list (die
, attr_kind
, descr
);
19136 gcc_assert (descr
->ll_symbol
);
19137 if (attr_kind
== DW_AT_location
&& descr
->vl_symbol
19138 && dwarf2out_locviews_in_attribute ())
19140 add_AT_view_list (die
, DW_AT_GNU_locviews
);
19141 check_no_locviews
= false;
19145 if (check_no_locviews
)
19146 gcc_assert (!get_AT (die
, DW_AT_GNU_locviews
));
19149 /* Add DW_AT_accessibility attribute to DIE if needed. */
19152 add_accessibility_attribute (dw_die_ref die
, tree decl
)
19154 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
19155 children, otherwise the default is DW_ACCESS_public. In DWARF2
19156 the default has always been DW_ACCESS_public. */
19157 if (TREE_PROTECTED (decl
))
19158 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_protected
);
19159 else if (TREE_PRIVATE (decl
))
19161 if (dwarf_version
== 2
19162 || die
->die_parent
== NULL
19163 || die
->die_parent
->die_tag
!= DW_TAG_class_type
)
19164 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_private
);
19166 else if (dwarf_version
> 2
19168 && die
->die_parent
->die_tag
== DW_TAG_class_type
)
19169 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_public
);
19172 /* Attach the specialized form of location attribute used for data members of
19173 struct and union types. In the special case of a FIELD_DECL node which
19174 represents a bit-field, the "offset" part of this special location
19175 descriptor must indicate the distance in bytes from the lowest-addressed
19176 byte of the containing struct or union type to the lowest-addressed byte of
19177 the "containing object" for the bit-field. (See the `field_byte_offset'
19180 For any given bit-field, the "containing object" is a hypothetical object
19181 (of some integral or enum type) within which the given bit-field lives. The
19182 type of this hypothetical "containing object" is always the same as the
19183 declared type of the individual bit-field itself (for GCC anyway... the
19184 DWARF spec doesn't actually mandate this). Note that it is the size (in
19185 bytes) of the hypothetical "containing object" which will be given in the
19186 DW_AT_byte_size attribute for this bit-field. (See the
19187 `byte_size_attribute' function below.) It is also used when calculating the
19188 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
19191 CTX is required: see the comment for VLR_CONTEXT. */
19194 add_data_member_location_attribute (dw_die_ref die
,
19196 struct vlr_context
*ctx
)
19198 HOST_WIDE_INT offset
;
19199 dw_loc_descr_ref loc_descr
= 0;
19201 if (TREE_CODE (decl
) == TREE_BINFO
)
19203 /* We're working on the TAG_inheritance for a base class. */
19204 if (BINFO_VIRTUAL_P (decl
) && is_cxx ())
19206 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
19207 aren't at a fixed offset from all (sub)objects of the same
19208 type. We need to extract the appropriate offset from our
19209 vtable. The following dwarf expression means
19211 BaseAddr = ObAddr + *((*ObAddr) - Offset)
19213 This is specific to the V3 ABI, of course. */
19215 dw_loc_descr_ref tmp
;
19217 /* Make a copy of the object address. */
19218 tmp
= new_loc_descr (DW_OP_dup
, 0, 0);
19219 add_loc_descr (&loc_descr
, tmp
);
19221 /* Extract the vtable address. */
19222 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
19223 add_loc_descr (&loc_descr
, tmp
);
19225 /* Calculate the address of the offset. */
19226 offset
= tree_to_shwi (BINFO_VPTR_FIELD (decl
));
19227 gcc_assert (offset
< 0);
19229 tmp
= int_loc_descriptor (-offset
);
19230 add_loc_descr (&loc_descr
, tmp
);
19231 tmp
= new_loc_descr (DW_OP_minus
, 0, 0);
19232 add_loc_descr (&loc_descr
, tmp
);
19234 /* Extract the offset. */
19235 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
19236 add_loc_descr (&loc_descr
, tmp
);
19238 /* Add it to the object address. */
19239 tmp
= new_loc_descr (DW_OP_plus
, 0, 0);
19240 add_loc_descr (&loc_descr
, tmp
);
19243 offset
= tree_to_shwi (BINFO_OFFSET (decl
));
19247 loc_descr
= field_byte_offset (decl
, ctx
, &offset
);
19249 /* If loc_descr is available then we know the field offset is dynamic.
19250 However, GDB does not handle dynamic field offsets very well at the
19252 if (loc_descr
!= NULL
&& gnat_encodings
!= DWARF_GNAT_ENCODINGS_MINIMAL
)
19258 /* Data member location evalutation starts with the base address on the
19259 stack. Compute the field offset and add it to this base address. */
19260 else if (loc_descr
!= NULL
)
19261 add_loc_descr (&loc_descr
, new_loc_descr (DW_OP_plus
, 0, 0));
19266 /* While DW_AT_data_bit_offset has been added already in DWARF4,
19267 e.g. GDB only added support to it in November 2016. For DWARF5
19268 we need newer debug info consumers anyway. We might change this
19269 to dwarf_version >= 4 once most consumers catched up. */
19270 if (dwarf_version
>= 5
19271 && TREE_CODE (decl
) == FIELD_DECL
19272 && DECL_BIT_FIELD_TYPE (decl
))
19274 tree off
= bit_position (decl
);
19275 if (tree_fits_uhwi_p (off
) && get_AT (die
, DW_AT_bit_size
))
19277 remove_AT (die
, DW_AT_byte_size
);
19278 remove_AT (die
, DW_AT_bit_offset
);
19279 add_AT_unsigned (die
, DW_AT_data_bit_offset
, tree_to_uhwi (off
));
19283 if (dwarf_version
> 2)
19285 /* Don't need to output a location expression, just the constant. */
19287 add_AT_int (die
, DW_AT_data_member_location
, offset
);
19289 add_AT_unsigned (die
, DW_AT_data_member_location
, offset
);
19294 enum dwarf_location_atom op
;
19296 /* The DWARF2 standard says that we should assume that the structure
19297 address is already on the stack, so we can specify a structure
19298 field address by using DW_OP_plus_uconst. */
19299 op
= DW_OP_plus_uconst
;
19300 loc_descr
= new_loc_descr (op
, offset
, 0);
19304 add_AT_loc (die
, DW_AT_data_member_location
, loc_descr
);
19307 /* Writes integer values to dw_vec_const array. */
19310 insert_int (HOST_WIDE_INT val
, unsigned int size
, unsigned char *dest
)
19314 *dest
++ = val
& 0xff;
19320 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
19322 static HOST_WIDE_INT
19323 extract_int (const unsigned char *src
, unsigned int size
)
19325 HOST_WIDE_INT val
= 0;
19331 val
|= *--src
& 0xff;
19337 /* Writes wide_int values to dw_vec_const array. */
19340 insert_wide_int (const wide_int
&val
, unsigned char *dest
, int elt_size
)
19344 if (elt_size
<= HOST_BITS_PER_WIDE_INT
/BITS_PER_UNIT
)
19346 insert_int ((HOST_WIDE_INT
) val
.elt (0), elt_size
, dest
);
19350 /* We'd have to extend this code to support odd sizes. */
19351 gcc_assert (elt_size
% (HOST_BITS_PER_WIDE_INT
/ BITS_PER_UNIT
) == 0);
19353 int n
= elt_size
/ (HOST_BITS_PER_WIDE_INT
/ BITS_PER_UNIT
);
19355 if (WORDS_BIG_ENDIAN
)
19356 for (i
= n
- 1; i
>= 0; i
--)
19358 insert_int ((HOST_WIDE_INT
) val
.elt (i
), sizeof (HOST_WIDE_INT
), dest
);
19359 dest
+= sizeof (HOST_WIDE_INT
);
19362 for (i
= 0; i
< n
; i
++)
19364 insert_int ((HOST_WIDE_INT
) val
.elt (i
), sizeof (HOST_WIDE_INT
), dest
);
19365 dest
+= sizeof (HOST_WIDE_INT
);
19369 /* Writes floating point values to dw_vec_const array. */
19372 insert_float (const_rtx rtl
, unsigned char *array
)
19376 scalar_float_mode mode
= as_a
<scalar_float_mode
> (GET_MODE (rtl
));
19378 real_to_target (val
, CONST_DOUBLE_REAL_VALUE (rtl
), mode
);
19380 /* real_to_target puts 32-bit pieces in each long. Pack them. */
19381 for (i
= 0; i
< GET_MODE_SIZE (mode
) / 4; i
++)
19383 insert_int (val
[i
], 4, array
);
19388 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
19389 does not have a "location" either in memory or in a register. These
19390 things can arise in GNU C when a constant is passed as an actual parameter
19391 to an inlined function. They can also arise in C++ where declared
19392 constants do not necessarily get memory "homes". */
19395 add_const_value_attribute (dw_die_ref die
, rtx rtl
)
19397 switch (GET_CODE (rtl
))
19401 HOST_WIDE_INT val
= INTVAL (rtl
);
19404 add_AT_int (die
, DW_AT_const_value
, val
);
19406 add_AT_unsigned (die
, DW_AT_const_value
, (unsigned HOST_WIDE_INT
) val
);
19410 case CONST_WIDE_INT
:
19412 wide_int w1
= rtx_mode_t (rtl
, MAX_MODE_INT
);
19413 unsigned int prec
= MIN (wi::min_precision (w1
, UNSIGNED
),
19414 (unsigned int)CONST_WIDE_INT_NUNITS (rtl
) * HOST_BITS_PER_WIDE_INT
);
19415 wide_int w
= wi::zext (w1
, prec
);
19416 add_AT_wide (die
, DW_AT_const_value
, w
);
19421 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
19422 floating-point constant. A CONST_DOUBLE is used whenever the
19423 constant requires more than one word in order to be adequately
19425 if (TARGET_SUPPORTS_WIDE_INT
== 0
19426 && !SCALAR_FLOAT_MODE_P (GET_MODE (rtl
)))
19427 add_AT_double (die
, DW_AT_const_value
,
19428 CONST_DOUBLE_HIGH (rtl
), CONST_DOUBLE_LOW (rtl
));
19431 scalar_float_mode mode
= as_a
<scalar_float_mode
> (GET_MODE (rtl
));
19432 unsigned int length
= GET_MODE_SIZE (mode
);
19433 unsigned char *array
= ggc_vec_alloc
<unsigned char> (length
);
19435 insert_float (rtl
, array
);
19436 add_AT_vec (die
, DW_AT_const_value
, length
/ 4, 4, array
);
19442 unsigned int length
;
19443 if (!CONST_VECTOR_NUNITS (rtl
).is_constant (&length
))
19446 machine_mode mode
= GET_MODE (rtl
);
19447 unsigned int elt_size
= GET_MODE_UNIT_SIZE (mode
);
19448 unsigned char *array
19449 = ggc_vec_alloc
<unsigned char> (length
* elt_size
);
19452 machine_mode imode
= GET_MODE_INNER (mode
);
19454 switch (GET_MODE_CLASS (mode
))
19456 case MODE_VECTOR_INT
:
19457 for (i
= 0, p
= array
; i
< length
; i
++, p
+= elt_size
)
19459 rtx elt
= CONST_VECTOR_ELT (rtl
, i
);
19460 insert_wide_int (rtx_mode_t (elt
, imode
), p
, elt_size
);
19464 case MODE_VECTOR_FLOAT
:
19465 for (i
= 0, p
= array
; i
< length
; i
++, p
+= elt_size
)
19467 rtx elt
= CONST_VECTOR_ELT (rtl
, i
);
19468 insert_float (elt
, p
);
19473 gcc_unreachable ();
19476 add_AT_vec (die
, DW_AT_const_value
, length
, elt_size
, array
);
19481 if (dwarf_version
>= 4 || !dwarf_strict
)
19483 dw_loc_descr_ref loc_result
;
19484 resolve_one_addr (&rtl
);
19486 loc_result
= new_addr_loc_descr (rtl
, dtprel_false
);
19487 add_loc_descr (&loc_result
, new_loc_descr (DW_OP_stack_value
, 0, 0));
19488 add_AT_loc (die
, DW_AT_location
, loc_result
);
19489 vec_safe_push (used_rtx_array
, rtl
);
19495 if (CONSTANT_P (XEXP (rtl
, 0)))
19496 return add_const_value_attribute (die
, XEXP (rtl
, 0));
19499 if (!const_ok_for_output (rtl
))
19503 if (dwarf_version
>= 4 || !dwarf_strict
)
19508 /* In cases where an inlined instance of an inline function is passed
19509 the address of an `auto' variable (which is local to the caller) we
19510 can get a situation where the DECL_RTL of the artificial local
19511 variable (for the inlining) which acts as a stand-in for the
19512 corresponding formal parameter (of the inline function) will look
19513 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
19514 exactly a compile-time constant expression, but it isn't the address
19515 of the (artificial) local variable either. Rather, it represents the
19516 *value* which the artificial local variable always has during its
19517 lifetime. We currently have no way to represent such quasi-constant
19518 values in Dwarf, so for now we just punt and generate nothing. */
19526 if (GET_CODE (XEXP (rtl
, 0)) == CONST_STRING
19527 && MEM_READONLY_P (rtl
)
19528 && GET_MODE (rtl
) == BLKmode
)
19530 add_AT_string (die
, DW_AT_const_value
, XSTR (XEXP (rtl
, 0), 0));
19536 /* No other kinds of rtx should be possible here. */
19537 gcc_unreachable ();
19542 /* Determine whether the evaluation of EXPR references any variables
19543 or functions which aren't otherwise used (and therefore may not be
19546 reference_to_unused (tree
* tp
, int * walk_subtrees
,
19547 void * data ATTRIBUTE_UNUSED
)
19549 if (! EXPR_P (*tp
) && ! CONSTANT_CLASS_P (*tp
))
19550 *walk_subtrees
= 0;
19552 if (DECL_P (*tp
) && ! TREE_PUBLIC (*tp
) && ! TREE_USED (*tp
)
19553 && ! TREE_ASM_WRITTEN (*tp
))
19555 /* ??? The C++ FE emits debug information for using decls, so
19556 putting gcc_unreachable here falls over. See PR31899. For now
19557 be conservative. */
19558 else if (!symtab
->global_info_ready
&& VAR_OR_FUNCTION_DECL_P (*tp
))
19560 else if (VAR_P (*tp
))
19562 varpool_node
*node
= varpool_node::get (*tp
);
19563 if (!node
|| !node
->definition
)
19566 else if (TREE_CODE (*tp
) == FUNCTION_DECL
19567 && (!DECL_EXTERNAL (*tp
) || DECL_DECLARED_INLINE_P (*tp
)))
19569 /* The call graph machinery must have finished analyzing,
19570 optimizing and gimplifying the CU by now.
19571 So if *TP has no call graph node associated
19572 to it, it means *TP will not be emitted. */
19573 if (!cgraph_node::get (*tp
))
19576 else if (TREE_CODE (*tp
) == STRING_CST
&& !TREE_ASM_WRITTEN (*tp
))
19582 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
19583 for use in a later add_const_value_attribute call. */
19586 rtl_for_decl_init (tree init
, tree type
)
19588 rtx rtl
= NULL_RTX
;
19592 /* If a variable is initialized with a string constant without embedded
19593 zeros, build CONST_STRING. */
19594 if (TREE_CODE (init
) == STRING_CST
&& TREE_CODE (type
) == ARRAY_TYPE
)
19596 tree enttype
= TREE_TYPE (type
);
19597 tree domain
= TYPE_DOMAIN (type
);
19598 scalar_int_mode mode
;
19600 if (is_int_mode (TYPE_MODE (enttype
), &mode
)
19601 && GET_MODE_SIZE (mode
) == 1
19603 && TYPE_MAX_VALUE (domain
)
19604 && TREE_CODE (TYPE_MAX_VALUE (domain
)) == INTEGER_CST
19605 && integer_zerop (TYPE_MIN_VALUE (domain
))
19606 && compare_tree_int (TYPE_MAX_VALUE (domain
),
19607 TREE_STRING_LENGTH (init
) - 1) == 0
19608 && ((size_t) TREE_STRING_LENGTH (init
)
19609 == strlen (TREE_STRING_POINTER (init
)) + 1))
19611 rtl
= gen_rtx_CONST_STRING (VOIDmode
,
19612 ggc_strdup (TREE_STRING_POINTER (init
)));
19613 rtl
= gen_rtx_MEM (BLKmode
, rtl
);
19614 MEM_READONLY_P (rtl
) = 1;
19617 /* Other aggregates, and complex values, could be represented using
19619 else if (AGGREGATE_TYPE_P (type
)
19620 || (TREE_CODE (init
) == VIEW_CONVERT_EXPR
19621 && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init
, 0))))
19622 || TREE_CODE (type
) == COMPLEX_TYPE
)
19624 /* Vectors only work if their mode is supported by the target.
19625 FIXME: generic vectors ought to work too. */
19626 else if (TREE_CODE (type
) == VECTOR_TYPE
19627 && !VECTOR_MODE_P (TYPE_MODE (type
)))
19629 /* If the initializer is something that we know will expand into an
19630 immediate RTL constant, expand it now. We must be careful not to
19631 reference variables which won't be output. */
19632 else if (initializer_constant_valid_p (init
, type
)
19633 && ! walk_tree (&init
, reference_to_unused
, NULL
, NULL
))
19635 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
19637 if (TREE_CODE (type
) == VECTOR_TYPE
)
19638 switch (TREE_CODE (init
))
19643 if (TREE_CONSTANT (init
))
19645 vec
<constructor_elt
, va_gc
> *elts
= CONSTRUCTOR_ELTS (init
);
19646 bool constant_p
= true;
19648 unsigned HOST_WIDE_INT ix
;
19650 /* Even when ctor is constant, it might contain non-*_CST
19651 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
19652 belong into VECTOR_CST nodes. */
19653 FOR_EACH_CONSTRUCTOR_VALUE (elts
, ix
, value
)
19654 if (!CONSTANT_CLASS_P (value
))
19656 constant_p
= false;
19662 init
= build_vector_from_ctor (type
, elts
);
19672 rtl
= expand_expr (init
, NULL_RTX
, VOIDmode
, EXPAND_INITIALIZER
);
19674 /* If expand_expr returns a MEM, it wasn't immediate. */
19675 gcc_assert (!rtl
|| !MEM_P (rtl
));
19681 /* Generate RTL for the variable DECL to represent its location. */
19684 rtl_for_decl_location (tree decl
)
19688 /* Here we have to decide where we are going to say the parameter "lives"
19689 (as far as the debugger is concerned). We only have a couple of
19690 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
19692 DECL_RTL normally indicates where the parameter lives during most of the
19693 activation of the function. If optimization is enabled however, this
19694 could be either NULL or else a pseudo-reg. Both of those cases indicate
19695 that the parameter doesn't really live anywhere (as far as the code
19696 generation parts of GCC are concerned) during most of the function's
19697 activation. That will happen (for example) if the parameter is never
19698 referenced within the function.
19700 We could just generate a location descriptor here for all non-NULL
19701 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
19702 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
19703 where DECL_RTL is NULL or is a pseudo-reg.
19705 Note however that we can only get away with using DECL_INCOMING_RTL as
19706 a backup substitute for DECL_RTL in certain limited cases. In cases
19707 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
19708 we can be sure that the parameter was passed using the same type as it is
19709 declared to have within the function, and that its DECL_INCOMING_RTL
19710 points us to a place where a value of that type is passed.
19712 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
19713 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
19714 because in these cases DECL_INCOMING_RTL points us to a value of some
19715 type which is *different* from the type of the parameter itself. Thus,
19716 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
19717 such cases, the debugger would end up (for example) trying to fetch a
19718 `float' from a place which actually contains the first part of a
19719 `double'. That would lead to really incorrect and confusing
19720 output at debug-time.
19722 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
19723 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
19724 are a couple of exceptions however. On little-endian machines we can
19725 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
19726 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
19727 an integral type that is smaller than TREE_TYPE (decl). These cases arise
19728 when (on a little-endian machine) a non-prototyped function has a
19729 parameter declared to be of type `short' or `char'. In such cases,
19730 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
19731 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
19732 passed `int' value. If the debugger then uses that address to fetch
19733 a `short' or a `char' (on a little-endian machine) the result will be
19734 the correct data, so we allow for such exceptional cases below.
19736 Note that our goal here is to describe the place where the given formal
19737 parameter lives during most of the function's activation (i.e. between the
19738 end of the prologue and the start of the epilogue). We'll do that as best
19739 as we can. Note however that if the given formal parameter is modified
19740 sometime during the execution of the function, then a stack backtrace (at
19741 debug-time) will show the function as having been called with the *new*
19742 value rather than the value which was originally passed in. This happens
19743 rarely enough that it is not a major problem, but it *is* a problem, and
19744 I'd like to fix it.
19746 A future version of dwarf2out.c may generate two additional attributes for
19747 any given DW_TAG_formal_parameter DIE which will describe the "passed
19748 type" and the "passed location" for the given formal parameter in addition
19749 to the attributes we now generate to indicate the "declared type" and the
19750 "active location" for each parameter. This additional set of attributes
19751 could be used by debuggers for stack backtraces. Separately, note that
19752 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
19753 This happens (for example) for inlined-instances of inline function formal
19754 parameters which are never referenced. This really shouldn't be
19755 happening. All PARM_DECL nodes should get valid non-NULL
19756 DECL_INCOMING_RTL values. FIXME. */
19758 /* Use DECL_RTL as the "location" unless we find something better. */
19759 rtl
= DECL_RTL_IF_SET (decl
);
19761 /* When generating abstract instances, ignore everything except
19762 constants, symbols living in memory, and symbols living in
19763 fixed registers. */
19764 if (! reload_completed
)
19767 && (CONSTANT_P (rtl
)
19769 && CONSTANT_P (XEXP (rtl
, 0)))
19772 && TREE_STATIC (decl
))))
19774 rtl
= targetm
.delegitimize_address (rtl
);
19779 else if (TREE_CODE (decl
) == PARM_DECL
)
19781 if (rtl
== NULL_RTX
19782 || is_pseudo_reg (rtl
)
19784 && is_pseudo_reg (XEXP (rtl
, 0))
19785 && DECL_INCOMING_RTL (decl
)
19786 && MEM_P (DECL_INCOMING_RTL (decl
))
19787 && GET_MODE (rtl
) == GET_MODE (DECL_INCOMING_RTL (decl
))))
19789 tree declared_type
= TREE_TYPE (decl
);
19790 tree passed_type
= DECL_ARG_TYPE (decl
);
19791 machine_mode dmode
= TYPE_MODE (declared_type
);
19792 machine_mode pmode
= TYPE_MODE (passed_type
);
19794 /* This decl represents a formal parameter which was optimized out.
19795 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
19796 all cases where (rtl == NULL_RTX) just below. */
19797 if (dmode
== pmode
)
19798 rtl
= DECL_INCOMING_RTL (decl
);
19799 else if ((rtl
== NULL_RTX
|| is_pseudo_reg (rtl
))
19800 && SCALAR_INT_MODE_P (dmode
)
19801 && known_le (GET_MODE_SIZE (dmode
), GET_MODE_SIZE (pmode
))
19802 && DECL_INCOMING_RTL (decl
))
19804 rtx inc
= DECL_INCOMING_RTL (decl
);
19807 else if (MEM_P (inc
))
19809 if (BYTES_BIG_ENDIAN
)
19810 rtl
= adjust_address_nv (inc
, dmode
,
19811 GET_MODE_SIZE (pmode
)
19812 - GET_MODE_SIZE (dmode
));
19819 /* If the parm was passed in registers, but lives on the stack, then
19820 make a big endian correction if the mode of the type of the
19821 parameter is not the same as the mode of the rtl. */
19822 /* ??? This is the same series of checks that are made in dbxout.c before
19823 we reach the big endian correction code there. It isn't clear if all
19824 of these checks are necessary here, but keeping them all is the safe
19826 else if (MEM_P (rtl
)
19827 && XEXP (rtl
, 0) != const0_rtx
19828 && ! CONSTANT_P (XEXP (rtl
, 0))
19829 /* Not passed in memory. */
19830 && !MEM_P (DECL_INCOMING_RTL (decl
))
19831 /* Not passed by invisible reference. */
19832 && (!REG_P (XEXP (rtl
, 0))
19833 || REGNO (XEXP (rtl
, 0)) == HARD_FRAME_POINTER_REGNUM
19834 || REGNO (XEXP (rtl
, 0)) == STACK_POINTER_REGNUM
19835 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
19836 || REGNO (XEXP (rtl
, 0)) == ARG_POINTER_REGNUM
19839 /* Big endian correction check. */
19840 && BYTES_BIG_ENDIAN
19841 && TYPE_MODE (TREE_TYPE (decl
)) != GET_MODE (rtl
)
19842 && known_lt (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl
))),
19845 machine_mode addr_mode
= get_address_mode (rtl
);
19846 poly_int64 offset
= (UNITS_PER_WORD
19847 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl
))));
19849 rtl
= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl
)),
19850 plus_constant (addr_mode
, XEXP (rtl
, 0), offset
));
19853 else if (VAR_P (decl
)
19856 && GET_MODE (rtl
) != TYPE_MODE (TREE_TYPE (decl
)))
19858 machine_mode addr_mode
= get_address_mode (rtl
);
19859 poly_int64 offset
= byte_lowpart_offset (TYPE_MODE (TREE_TYPE (decl
)),
19862 /* If a variable is declared "register" yet is smaller than
19863 a register, then if we store the variable to memory, it
19864 looks like we're storing a register-sized value, when in
19865 fact we are not. We need to adjust the offset of the
19866 storage location to reflect the actual value's bytes,
19867 else gdb will not be able to display it. */
19868 if (maybe_ne (offset
, 0))
19869 rtl
= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl
)),
19870 plus_constant (addr_mode
, XEXP (rtl
, 0), offset
));
19873 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
19874 and will have been substituted directly into all expressions that use it.
19875 C does not have such a concept, but C++ and other languages do. */
19876 if (!rtl
&& VAR_P (decl
) && DECL_INITIAL (decl
))
19877 rtl
= rtl_for_decl_init (DECL_INITIAL (decl
), TREE_TYPE (decl
));
19880 rtl
= targetm
.delegitimize_address (rtl
);
19882 /* If we don't look past the constant pool, we risk emitting a
19883 reference to a constant pool entry that isn't referenced from
19884 code, and thus is not emitted. */
19886 rtl
= avoid_constant_pool_reference (rtl
);
19888 /* Try harder to get a rtl. If this symbol ends up not being emitted
19889 in the current CU, resolve_addr will remove the expression referencing
19891 if (rtl
== NULL_RTX
19892 && !(early_dwarf
&& (flag_generate_lto
|| flag_generate_offload
))
19894 && !DECL_EXTERNAL (decl
)
19895 && TREE_STATIC (decl
)
19896 && DECL_NAME (decl
)
19897 && !DECL_HARD_REGISTER (decl
)
19898 && DECL_MODE (decl
) != VOIDmode
)
19900 rtl
= make_decl_rtl_for_debug (decl
);
19902 || GET_CODE (XEXP (rtl
, 0)) != SYMBOL_REF
19903 || SYMBOL_REF_DECL (XEXP (rtl
, 0)) != decl
)
19910 /* Check whether decl is a Fortran COMMON symbol. If not, NULL_TREE is
19911 returned. If so, the decl for the COMMON block is returned, and the
19912 value is the offset into the common block for the symbol. */
19915 fortran_common (tree decl
, HOST_WIDE_INT
*value
)
19917 tree val_expr
, cvar
;
19919 poly_int64 bitsize
, bitpos
;
19921 HOST_WIDE_INT cbitpos
;
19922 int unsignedp
, reversep
, volatilep
= 0;
19924 /* If the decl isn't a VAR_DECL, or if it isn't static, or if
19925 it does not have a value (the offset into the common area), or if it
19926 is thread local (as opposed to global) then it isn't common, and shouldn't
19927 be handled as such. */
19929 || !TREE_STATIC (decl
)
19930 || !DECL_HAS_VALUE_EXPR_P (decl
)
19934 val_expr
= DECL_VALUE_EXPR (decl
);
19935 if (TREE_CODE (val_expr
) != COMPONENT_REF
)
19938 cvar
= get_inner_reference (val_expr
, &bitsize
, &bitpos
, &offset
, &mode
,
19939 &unsignedp
, &reversep
, &volatilep
);
19941 if (cvar
== NULL_TREE
19943 || DECL_ARTIFICIAL (cvar
)
19944 || !TREE_PUBLIC (cvar
)
19945 /* We don't expect to have to cope with variable offsets,
19946 since at present all static data must have a constant size. */
19947 || !bitpos
.is_constant (&cbitpos
))
19951 if (offset
!= NULL
)
19953 if (!tree_fits_shwi_p (offset
))
19955 *value
= tree_to_shwi (offset
);
19958 *value
+= cbitpos
/ BITS_PER_UNIT
;
19963 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
19964 data attribute for a variable or a parameter. We generate the
19965 DW_AT_const_value attribute only in those cases where the given variable
19966 or parameter does not have a true "location" either in memory or in a
19967 register. This can happen (for example) when a constant is passed as an
19968 actual argument in a call to an inline function. (It's possible that
19969 these things can crop up in other ways also.) Note that one type of
19970 constant value which can be passed into an inlined function is a constant
19971 pointer. This can happen for example if an actual argument in an inlined
19972 function call evaluates to a compile-time constant address.
19974 CACHE_P is true if it is worth caching the location list for DECL,
19975 so that future calls can reuse it rather than regenerate it from scratch.
19976 This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
19977 since we will need to refer to them each time the function is inlined. */
19980 add_location_or_const_value_attribute (dw_die_ref die
, tree decl
, bool cache_p
)
19983 dw_loc_list_ref list
;
19984 var_loc_list
*loc_list
;
19985 cached_dw_loc_list
*cache
;
19990 if (TREE_CODE (decl
) == ERROR_MARK
)
19993 if (get_AT (die
, DW_AT_location
)
19994 || get_AT (die
, DW_AT_const_value
))
19997 gcc_assert (VAR_P (decl
) || TREE_CODE (decl
) == PARM_DECL
19998 || TREE_CODE (decl
) == RESULT_DECL
);
20000 /* Try to get some constant RTL for this decl, and use that as the value of
20003 rtl
= rtl_for_decl_location (decl
);
20004 if (rtl
&& (CONSTANT_P (rtl
) || GET_CODE (rtl
) == CONST_STRING
)
20005 && add_const_value_attribute (die
, rtl
))
20008 /* See if we have single element location list that is equivalent to
20009 a constant value. That way we are better to use add_const_value_attribute
20010 rather than expanding constant value equivalent. */
20011 loc_list
= lookup_decl_loc (decl
);
20014 && loc_list
->first
->next
== NULL
20015 && NOTE_P (loc_list
->first
->loc
)
20016 && NOTE_VAR_LOCATION (loc_list
->first
->loc
)
20017 && NOTE_VAR_LOCATION_LOC (loc_list
->first
->loc
))
20019 struct var_loc_node
*node
;
20021 node
= loc_list
->first
;
20022 rtl
= NOTE_VAR_LOCATION_LOC (node
->loc
);
20023 if (GET_CODE (rtl
) == EXPR_LIST
)
20024 rtl
= XEXP (rtl
, 0);
20025 if ((CONSTANT_P (rtl
) || GET_CODE (rtl
) == CONST_STRING
)
20026 && add_const_value_attribute (die
, rtl
))
20029 /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
20030 list several times. See if we've already cached the contents. */
20032 if (loc_list
== NULL
|| cached_dw_loc_list_table
== NULL
)
20036 cache
= cached_dw_loc_list_table
->find_with_hash (decl
, DECL_UID (decl
));
20038 list
= cache
->loc_list
;
20042 list
= loc_list_from_tree (decl
, decl_by_reference_p (decl
) ? 0 : 2,
20044 /* It is usually worth caching this result if the decl is from
20045 BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */
20046 if (cache_p
&& list
&& list
->dw_loc_next
)
20048 cached_dw_loc_list
**slot
20049 = cached_dw_loc_list_table
->find_slot_with_hash (decl
,
20052 cache
= ggc_cleared_alloc
<cached_dw_loc_list
> ();
20053 cache
->decl_id
= DECL_UID (decl
);
20054 cache
->loc_list
= list
;
20060 add_AT_location_description (die
, DW_AT_location
, list
);
20063 /* None of that worked, so it must not really have a location;
20064 try adding a constant value attribute from the DECL_INITIAL. */
20065 return tree_add_const_value_attribute_for_decl (die
, decl
);
20068 /* Helper function for tree_add_const_value_attribute. Natively encode
20069 initializer INIT into an array. Return true if successful. */
20072 native_encode_initializer (tree init
, unsigned char *array
, int size
)
20076 if (init
== NULL_TREE
)
20080 switch (TREE_CODE (init
))
20083 type
= TREE_TYPE (init
);
20084 if (TREE_CODE (type
) == ARRAY_TYPE
)
20086 tree enttype
= TREE_TYPE (type
);
20087 scalar_int_mode mode
;
20089 if (!is_int_mode (TYPE_MODE (enttype
), &mode
)
20090 || GET_MODE_SIZE (mode
) != 1)
20092 if (int_size_in_bytes (type
) != size
)
20094 if (size
> TREE_STRING_LENGTH (init
))
20096 memcpy (array
, TREE_STRING_POINTER (init
),
20097 TREE_STRING_LENGTH (init
));
20098 memset (array
+ TREE_STRING_LENGTH (init
),
20099 '\0', size
- TREE_STRING_LENGTH (init
));
20102 memcpy (array
, TREE_STRING_POINTER (init
), size
);
20107 type
= TREE_TYPE (init
);
20108 if (int_size_in_bytes (type
) != size
)
20110 if (TREE_CODE (type
) == ARRAY_TYPE
)
20112 HOST_WIDE_INT min_index
;
20113 unsigned HOST_WIDE_INT cnt
;
20114 int curpos
= 0, fieldsize
;
20115 constructor_elt
*ce
;
20117 if (TYPE_DOMAIN (type
) == NULL_TREE
20118 || !tree_fits_shwi_p (TYPE_MIN_VALUE (TYPE_DOMAIN (type
))))
20121 fieldsize
= int_size_in_bytes (TREE_TYPE (type
));
20122 if (fieldsize
<= 0)
20125 min_index
= tree_to_shwi (TYPE_MIN_VALUE (TYPE_DOMAIN (type
)));
20126 memset (array
, '\0', size
);
20127 FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init
), cnt
, ce
)
20129 tree val
= ce
->value
;
20130 tree index
= ce
->index
;
20132 if (index
&& TREE_CODE (index
) == RANGE_EXPR
)
20133 pos
= (tree_to_shwi (TREE_OPERAND (index
, 0)) - min_index
)
20136 pos
= (tree_to_shwi (index
) - min_index
) * fieldsize
;
20141 if (!native_encode_initializer (val
, array
+ pos
, fieldsize
))
20144 curpos
= pos
+ fieldsize
;
20145 if (index
&& TREE_CODE (index
) == RANGE_EXPR
)
20147 int count
= tree_to_shwi (TREE_OPERAND (index
, 1))
20148 - tree_to_shwi (TREE_OPERAND (index
, 0));
20149 while (count
-- > 0)
20152 memcpy (array
+ curpos
, array
+ pos
, fieldsize
);
20153 curpos
+= fieldsize
;
20156 gcc_assert (curpos
<= size
);
20160 else if (TREE_CODE (type
) == RECORD_TYPE
20161 || TREE_CODE (type
) == UNION_TYPE
)
20163 tree field
= NULL_TREE
;
20164 unsigned HOST_WIDE_INT cnt
;
20165 constructor_elt
*ce
;
20167 if (int_size_in_bytes (type
) != size
)
20170 if (TREE_CODE (type
) == RECORD_TYPE
)
20171 field
= TYPE_FIELDS (type
);
20173 FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init
), cnt
, ce
)
20175 tree val
= ce
->value
;
20176 int pos
, fieldsize
;
20178 if (ce
->index
!= 0)
20184 if (field
== NULL_TREE
|| DECL_BIT_FIELD (field
))
20187 if (TREE_CODE (TREE_TYPE (field
)) == ARRAY_TYPE
20188 && TYPE_DOMAIN (TREE_TYPE (field
))
20189 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field
))))
20191 else if (DECL_SIZE_UNIT (field
) == NULL_TREE
20192 || !tree_fits_shwi_p (DECL_SIZE_UNIT (field
)))
20194 fieldsize
= tree_to_shwi (DECL_SIZE_UNIT (field
));
20195 pos
= int_byte_position (field
);
20196 gcc_assert (pos
+ fieldsize
<= size
);
20197 if (val
&& fieldsize
!= 0
20198 && !native_encode_initializer (val
, array
+ pos
, fieldsize
))
20204 case VIEW_CONVERT_EXPR
:
20205 case NON_LVALUE_EXPR
:
20206 return native_encode_initializer (TREE_OPERAND (init
, 0), array
, size
);
20208 return native_encode_expr (init
, array
, size
) == size
;
20212 /* Attach a DW_AT_const_value attribute to DIE. The value of the
20213 attribute is the const value T. */
20216 tree_add_const_value_attribute (dw_die_ref die
, tree t
)
20219 tree type
= TREE_TYPE (t
);
20222 if (!t
|| !TREE_TYPE (t
) || TREE_TYPE (t
) == error_mark_node
)
20226 gcc_assert (!DECL_P (init
));
20228 if (TREE_CODE (init
) == INTEGER_CST
)
20230 if (tree_fits_uhwi_p (init
))
20232 add_AT_unsigned (die
, DW_AT_const_value
, tree_to_uhwi (init
));
20235 if (tree_fits_shwi_p (init
))
20237 add_AT_int (die
, DW_AT_const_value
, tree_to_shwi (init
));
20243 rtl
= rtl_for_decl_init (init
, type
);
20245 return add_const_value_attribute (die
, rtl
);
20247 /* If the host and target are sane, try harder. */
20248 if (CHAR_BIT
== 8 && BITS_PER_UNIT
== 8
20249 && initializer_constant_valid_p (init
, type
))
20251 HOST_WIDE_INT size
= int_size_in_bytes (TREE_TYPE (init
));
20252 if (size
> 0 && (int) size
== size
)
20254 unsigned char *array
= ggc_cleared_vec_alloc
<unsigned char> (size
);
20256 if (native_encode_initializer (init
, array
, size
))
20258 add_AT_vec (die
, DW_AT_const_value
, size
, 1, array
);
20267 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
20268 attribute is the const value of T, where T is an integral constant
20269 variable with static storage duration
20270 (so it can't be a PARM_DECL or a RESULT_DECL). */
20273 tree_add_const_value_attribute_for_decl (dw_die_ref var_die
, tree decl
)
20277 || (!VAR_P (decl
) && TREE_CODE (decl
) != CONST_DECL
)
20278 || (VAR_P (decl
) && !TREE_STATIC (decl
)))
20281 if (TREE_READONLY (decl
)
20282 && ! TREE_THIS_VOLATILE (decl
)
20283 && DECL_INITIAL (decl
))
20288 /* Don't add DW_AT_const_value if abstract origin already has one. */
20289 if (get_AT (var_die
, DW_AT_const_value
))
20292 return tree_add_const_value_attribute (var_die
, DECL_INITIAL (decl
));
20295 /* Convert the CFI instructions for the current function into a
20296 location list. This is used for DW_AT_frame_base when we targeting
20297 a dwarf2 consumer that does not support the dwarf3
20298 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA
20301 static dw_loc_list_ref
20302 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset
)
20306 dw_loc_list_ref list
, *list_tail
;
20308 dw_cfa_location last_cfa
, next_cfa
;
20309 const char *start_label
, *last_label
, *section
;
20310 dw_cfa_location remember
;
20313 gcc_assert (fde
!= NULL
);
20315 section
= secname_for_decl (current_function_decl
);
20319 memset (&next_cfa
, 0, sizeof (next_cfa
));
20320 next_cfa
.reg
= INVALID_REGNUM
;
20321 remember
= next_cfa
;
20323 start_label
= fde
->dw_fde_begin
;
20325 /* ??? Bald assumption that the CIE opcode list does not contain
20326 advance opcodes. */
20327 FOR_EACH_VEC_ELT (*cie_cfi_vec
, ix
, cfi
)
20328 lookup_cfa_1 (cfi
, &next_cfa
, &remember
);
20330 last_cfa
= next_cfa
;
20331 last_label
= start_label
;
20333 if (fde
->dw_fde_second_begin
&& fde
->dw_fde_switch_cfi_index
== 0)
20335 /* If the first partition contained no CFI adjustments, the
20336 CIE opcodes apply to the whole first partition. */
20337 *list_tail
= new_loc_list (build_cfa_loc (&last_cfa
, offset
),
20338 fde
->dw_fde_begin
, 0, fde
->dw_fde_end
, 0, section
);
20339 list_tail
=&(*list_tail
)->dw_loc_next
;
20340 start_label
= last_label
= fde
->dw_fde_second_begin
;
20343 FOR_EACH_VEC_SAFE_ELT (fde
->dw_fde_cfi
, ix
, cfi
)
20345 switch (cfi
->dw_cfi_opc
)
20347 case DW_CFA_set_loc
:
20348 case DW_CFA_advance_loc1
:
20349 case DW_CFA_advance_loc2
:
20350 case DW_CFA_advance_loc4
:
20351 if (!cfa_equal_p (&last_cfa
, &next_cfa
))
20353 *list_tail
= new_loc_list (build_cfa_loc (&last_cfa
, offset
),
20354 start_label
, 0, last_label
, 0, section
);
20356 list_tail
= &(*list_tail
)->dw_loc_next
;
20357 last_cfa
= next_cfa
;
20358 start_label
= last_label
;
20360 last_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
20363 case DW_CFA_advance_loc
:
20364 /* The encoding is complex enough that we should never emit this. */
20365 gcc_unreachable ();
20368 lookup_cfa_1 (cfi
, &next_cfa
, &remember
);
20371 if (ix
+ 1 == fde
->dw_fde_switch_cfi_index
)
20373 if (!cfa_equal_p (&last_cfa
, &next_cfa
))
20375 *list_tail
= new_loc_list (build_cfa_loc (&last_cfa
, offset
),
20376 start_label
, 0, last_label
, 0, section
);
20378 list_tail
= &(*list_tail
)->dw_loc_next
;
20379 last_cfa
= next_cfa
;
20380 start_label
= last_label
;
20382 *list_tail
= new_loc_list (build_cfa_loc (&last_cfa
, offset
),
20383 start_label
, 0, fde
->dw_fde_end
, 0, section
);
20384 list_tail
= &(*list_tail
)->dw_loc_next
;
20385 start_label
= last_label
= fde
->dw_fde_second_begin
;
20389 if (!cfa_equal_p (&last_cfa
, &next_cfa
))
20391 *list_tail
= new_loc_list (build_cfa_loc (&last_cfa
, offset
),
20392 start_label
, 0, last_label
, 0, section
);
20393 list_tail
= &(*list_tail
)->dw_loc_next
;
20394 start_label
= last_label
;
20397 *list_tail
= new_loc_list (build_cfa_loc (&next_cfa
, offset
),
20399 fde
->dw_fde_second_begin
20400 ? fde
->dw_fde_second_end
: fde
->dw_fde_end
, 0,
20403 maybe_gen_llsym (list
);
20408 /* Compute a displacement from the "steady-state frame pointer" to the
20409 frame base (often the same as the CFA), and store it in
20410 frame_pointer_fb_offset. OFFSET is added to the displacement
20411 before the latter is negated. */
20414 compute_frame_pointer_to_fb_displacement (poly_int64 offset
)
20418 #ifdef FRAME_POINTER_CFA_OFFSET
20419 reg
= frame_pointer_rtx
;
20420 offset
+= FRAME_POINTER_CFA_OFFSET (current_function_decl
);
20422 reg
= arg_pointer_rtx
;
20423 offset
+= ARG_POINTER_CFA_OFFSET (current_function_decl
);
20426 elim
= (ira_use_lra_p
20427 ? lra_eliminate_regs (reg
, VOIDmode
, NULL_RTX
)
20428 : eliminate_regs (reg
, VOIDmode
, NULL_RTX
));
20429 elim
= strip_offset_and_add (elim
, &offset
);
20431 frame_pointer_fb_offset
= -offset
;
20433 /* ??? AVR doesn't set up valid eliminations when there is no stack frame
20434 in which to eliminate. This is because it's stack pointer isn't
20435 directly accessible as a register within the ISA. To work around
20436 this, assume that while we cannot provide a proper value for
20437 frame_pointer_fb_offset, we won't need one either. We can use
20438 hard frame pointer in debug info even if frame pointer isn't used
20439 since hard frame pointer in debug info is encoded with DW_OP_fbreg
20440 which uses the DW_AT_frame_base attribute, not hard frame pointer
20442 frame_pointer_fb_offset_valid
20443 = (elim
== hard_frame_pointer_rtx
|| elim
== stack_pointer_rtx
);
20446 /* Generate a DW_AT_name attribute given some string value to be included as
20447 the value of the attribute. */
20450 add_name_attribute (dw_die_ref die
, const char *name_string
)
20452 if (name_string
!= NULL
&& *name_string
!= 0)
20454 if (demangle_name_func
)
20455 name_string
= (*demangle_name_func
) (name_string
);
20457 add_AT_string (die
, DW_AT_name
, name_string
);
20461 /* Generate a DW_AT_description attribute given some string value to be included
20462 as the value of the attribute. */
20465 add_desc_attribute (dw_die_ref die
, const char *name_string
)
20467 if (!flag_describe_dies
|| (dwarf_version
< 3 && dwarf_strict
))
20470 if (name_string
== NULL
|| *name_string
== 0)
20473 if (demangle_name_func
)
20474 name_string
= (*demangle_name_func
) (name_string
);
20476 add_AT_string (die
, DW_AT_description
, name_string
);
20479 /* Generate a DW_AT_description attribute given some decl to be included
20480 as the value of the attribute. */
20483 add_desc_attribute (dw_die_ref die
, tree decl
)
20487 if (!flag_describe_dies
|| (dwarf_version
< 3 && dwarf_strict
))
20490 if (decl
== NULL_TREE
|| !DECL_P (decl
))
20492 decl_name
= DECL_NAME (decl
);
20494 if (decl_name
!= NULL
&& IDENTIFIER_POINTER (decl_name
) != NULL
)
20496 const char *name
= dwarf2_name (decl
, 0);
20497 add_desc_attribute (die
, name
? name
: IDENTIFIER_POINTER (decl_name
));
20501 char *desc
= print_generic_expr_to_str (decl
);
20502 add_desc_attribute (die
, desc
);
20507 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
20508 DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
20509 of TYPE accordingly.
20511 ??? This is a temporary measure until after we're able to generate
20512 regular DWARF for the complex Ada type system. */
20515 add_gnat_descriptive_type_attribute (dw_die_ref die
, tree type
,
20516 dw_die_ref context_die
)
20519 dw_die_ref dtype_die
;
20521 if (!lang_hooks
.types
.descriptive_type
)
20524 dtype
= lang_hooks
.types
.descriptive_type (type
);
20528 dtype_die
= lookup_type_die (dtype
);
20531 gen_type_die (dtype
, context_die
);
20532 dtype_die
= lookup_type_die (dtype
);
20533 gcc_assert (dtype_die
);
20536 add_AT_die_ref (die
, DW_AT_GNAT_descriptive_type
, dtype_die
);
20539 /* Retrieve the comp_dir string suitable for use with DW_AT_comp_dir. */
20541 static const char *
20542 comp_dir_string (void)
20546 static const char *cached_wd
= NULL
;
20548 if (cached_wd
!= NULL
)
20551 wd
= get_src_pwd ();
20555 if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
)
20559 wdlen
= strlen (wd
);
20560 wd1
= ggc_vec_alloc
<char> (wdlen
+ 2);
20562 wd1
[wdlen
] = DIR_SEPARATOR
;
20563 wd1
[wdlen
+ 1] = 0;
20567 cached_wd
= remap_debug_filename (wd
);
20571 /* Generate a DW_AT_comp_dir attribute for DIE. */
20574 add_comp_dir_attribute (dw_die_ref die
)
20576 const char * wd
= comp_dir_string ();
20578 add_AT_string (die
, DW_AT_comp_dir
, wd
);
20581 /* Given a tree node VALUE describing a scalar attribute ATTR (i.e. a bound, a
20582 pointer computation, ...), output a representation for that bound according
20583 to the accepted FORMS (see enum dw_scalar_form) and add it to DIE. See
20584 loc_list_from_tree for the meaning of CONTEXT. */
20587 add_scalar_info (dw_die_ref die
, enum dwarf_attribute attr
, tree value
,
20588 int forms
, struct loc_descr_context
*context
)
20590 dw_die_ref context_die
, decl_die
= NULL
;
20591 dw_loc_list_ref list
;
20592 bool strip_conversions
= true;
20593 bool placeholder_seen
= false;
20595 while (strip_conversions
)
20596 switch (TREE_CODE (value
))
20603 case VIEW_CONVERT_EXPR
:
20604 value
= TREE_OPERAND (value
, 0);
20608 strip_conversions
= false;
20612 /* If possible and permitted, output the attribute as a constant. */
20613 if ((forms
& dw_scalar_form_constant
) != 0
20614 && TREE_CODE (value
) == INTEGER_CST
)
20616 unsigned int prec
= simple_type_size_in_bits (TREE_TYPE (value
));
20618 /* If HOST_WIDE_INT is big enough then represent the bound as
20619 a constant value. We need to choose a form based on
20620 whether the type is signed or unsigned. We cannot just
20621 call add_AT_unsigned if the value itself is positive
20622 (add_AT_unsigned might add the unsigned value encoded as
20623 DW_FORM_data[1248]). Some DWARF consumers will lookup the
20624 bounds type and then sign extend any unsigned values found
20625 for signed types. This is needed only for
20626 DW_AT_{lower,upper}_bound, since for most other attributes,
20627 consumers will treat DW_FORM_data[1248] as unsigned values,
20628 regardless of the underlying type. */
20629 if (prec
<= HOST_BITS_PER_WIDE_INT
20630 || tree_fits_uhwi_p (value
))
20632 if (TYPE_UNSIGNED (TREE_TYPE (value
)))
20633 add_AT_unsigned (die
, attr
, TREE_INT_CST_LOW (value
));
20635 add_AT_int (die
, attr
, TREE_INT_CST_LOW (value
));
20638 /* Otherwise represent the bound as an unsigned value with
20639 the precision of its type. The precision and signedness
20640 of the type will be necessary to re-interpret it
20642 add_AT_wide (die
, attr
, wi::to_wide (value
));
20646 /* Otherwise, if it's possible and permitted too, output a reference to
20648 if ((forms
& dw_scalar_form_reference
) != 0)
20650 tree decl
= NULL_TREE
;
20652 /* Some type attributes reference an outer type. For instance, the upper
20653 bound of an array may reference an embedding record (this happens in
20655 if (TREE_CODE (value
) == COMPONENT_REF
20656 && TREE_CODE (TREE_OPERAND (value
, 0)) == PLACEHOLDER_EXPR
20657 && TREE_CODE (TREE_OPERAND (value
, 1)) == FIELD_DECL
)
20658 decl
= TREE_OPERAND (value
, 1);
20660 else if (VAR_P (value
)
20661 || TREE_CODE (value
) == PARM_DECL
20662 || TREE_CODE (value
) == RESULT_DECL
)
20665 if (decl
!= NULL_TREE
)
20667 decl_die
= lookup_decl_die (decl
);
20669 /* ??? Can this happen, or should the variable have been bound
20670 first? Probably it can, since I imagine that we try to create
20671 the types of parameters in the order in which they exist in
20672 the list, and won't have created a forward reference to a
20673 later parameter. */
20674 if (decl_die
!= NULL
)
20676 if (get_AT (decl_die
, DW_AT_location
)
20677 || get_AT (decl_die
, DW_AT_const_value
))
20679 add_AT_die_ref (die
, attr
, decl_die
);
20686 /* Last chance: try to create a stack operation procedure to evaluate the
20687 value. Do nothing if even that is not possible or permitted. */
20688 if ((forms
& dw_scalar_form_exprloc
) == 0)
20691 list
= loc_list_from_tree (value
, 2, context
);
20692 if (context
&& context
->placeholder_arg
)
20694 placeholder_seen
= context
->placeholder_seen
;
20695 context
->placeholder_seen
= false;
20697 if (list
== NULL
|| single_element_loc_list_p (list
))
20699 /* If this attribute is not a reference nor constant, it is
20700 a DWARF expression rather than location description. For that
20701 loc_list_from_tree (value, 0, &context) is needed. */
20702 dw_loc_list_ref list2
= loc_list_from_tree (value
, 0, context
);
20703 if (list2
&& single_element_loc_list_p (list2
))
20705 if (placeholder_seen
)
20707 struct dwarf_procedure_info dpi
;
20708 dpi
.fndecl
= NULL_TREE
;
20709 dpi
.args_count
= 1;
20710 if (!resolve_args_picking (list2
->expr
, 1, &dpi
))
20713 add_AT_loc (die
, attr
, list2
->expr
);
20718 /* If that failed to give a single element location list, fall back to
20719 outputting this as a reference... still if permitted. */
20721 || (forms
& dw_scalar_form_reference
) == 0
20722 || placeholder_seen
)
20727 if (current_function_decl
== 0)
20728 context_die
= comp_unit_die ();
20730 context_die
= lookup_decl_die (current_function_decl
);
20732 decl_die
= new_die (DW_TAG_variable
, context_die
, value
);
20733 add_AT_flag (decl_die
, DW_AT_artificial
, 1);
20734 add_type_attribute (decl_die
, TREE_TYPE (value
), TYPE_QUAL_CONST
, false,
20738 add_AT_location_description (decl_die
, DW_AT_location
, list
);
20739 add_AT_die_ref (die
, attr
, decl_die
);
20742 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
20746 lower_bound_default (void)
20748 switch (get_AT_unsigned (comp_unit_die (), DW_AT_language
))
20754 case DW_LANG_C_plus_plus
:
20755 case DW_LANG_C_plus_plus_11
:
20756 case DW_LANG_C_plus_plus_14
:
20758 case DW_LANG_ObjC_plus_plus
:
20760 case DW_LANG_Fortran77
:
20761 case DW_LANG_Fortran90
:
20762 case DW_LANG_Fortran95
:
20763 case DW_LANG_Fortran03
:
20764 case DW_LANG_Fortran08
:
20768 case DW_LANG_Python
:
20769 return dwarf_version
>= 4 ? 0 : -1;
20770 case DW_LANG_Ada95
:
20771 case DW_LANG_Ada83
:
20772 case DW_LANG_Cobol74
:
20773 case DW_LANG_Cobol85
:
20774 case DW_LANG_Modula2
:
20776 return dwarf_version
>= 4 ? 1 : -1;
20782 /* Given a tree node describing an array bound (either lower or upper) output
20783 a representation for that bound. */
20786 add_bound_info (dw_die_ref subrange_die
, enum dwarf_attribute bound_attr
,
20787 tree bound
, struct loc_descr_context
*context
)
20792 switch (TREE_CODE (bound
))
20794 /* Strip all conversions. */
20796 case VIEW_CONVERT_EXPR
:
20797 bound
= TREE_OPERAND (bound
, 0);
20800 /* All fixed-bounds are represented by INTEGER_CST nodes. Lower bounds
20801 are even omitted when they are the default. */
20803 /* If the value for this bound is the default one, we can even omit the
20805 if (bound_attr
== DW_AT_lower_bound
20806 && tree_fits_shwi_p (bound
)
20807 && (dflt
= lower_bound_default ()) != -1
20808 && tree_to_shwi (bound
) == dflt
)
20814 /* Because of the complex interaction there can be with other GNAT
20815 encodings, GDB isn't ready yet to handle proper DWARF description
20816 for self-referencial subrange bounds: let GNAT encodings do the
20817 magic in such a case. */
20819 && gnat_encodings
!= DWARF_GNAT_ENCODINGS_MINIMAL
20820 && contains_placeholder_p (bound
))
20823 add_scalar_info (subrange_die
, bound_attr
, bound
,
20824 dw_scalar_form_constant
20825 | dw_scalar_form_exprloc
20826 | dw_scalar_form_reference
,
20832 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
20833 possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
20834 Note that the block of subscript information for an array type also
20835 includes information about the element type of the given array type.
20837 This function reuses previously set type and bound information if
20841 add_subscript_info (dw_die_ref type_die
, tree type
, bool collapse_p
)
20843 unsigned dimension_number
;
20845 dw_die_ref child
= type_die
->die_child
;
20847 for (dimension_number
= 0;
20848 TREE_CODE (type
) == ARRAY_TYPE
&& (dimension_number
== 0 || collapse_p
);
20849 type
= TREE_TYPE (type
), dimension_number
++)
20851 tree domain
= TYPE_DOMAIN (type
);
20853 if (TYPE_STRING_FLAG (type
) && is_fortran () && dimension_number
> 0)
20856 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
20857 and (in GNU C only) variable bounds. Handle all three forms
20860 /* Find and reuse a previously generated DW_TAG_subrange_type if
20863 For multi-dimensional arrays, as we iterate through the
20864 various dimensions in the enclosing for loop above, we also
20865 iterate through the DIE children and pick at each
20866 DW_TAG_subrange_type previously generated (if available).
20867 Each child DW_TAG_subrange_type DIE describes the range of
20868 the current dimension. At this point we should have as many
20869 DW_TAG_subrange_type's as we have dimensions in the
20871 dw_die_ref subrange_die
= NULL
;
20875 child
= child
->die_sib
;
20876 if (child
->die_tag
== DW_TAG_subrange_type
)
20877 subrange_die
= child
;
20878 if (child
== type_die
->die_child
)
20880 /* If we wrapped around, stop looking next time. */
20884 if (child
->die_tag
== DW_TAG_subrange_type
)
20888 subrange_die
= new_die (DW_TAG_subrange_type
, type_die
, NULL
);
20892 /* We have an array type with specified bounds. */
20893 lower
= TYPE_MIN_VALUE (domain
);
20894 upper
= TYPE_MAX_VALUE (domain
);
20896 /* Define the index type. */
20897 if (TREE_TYPE (domain
)
20898 && !get_AT (subrange_die
, DW_AT_type
))
20900 /* ??? This is probably an Ada unnamed subrange type. Ignore the
20901 TREE_TYPE field. We can't emit debug info for this
20902 because it is an unnamed integral type. */
20903 if (TREE_CODE (domain
) == INTEGER_TYPE
20904 && TYPE_NAME (domain
) == NULL_TREE
20905 && TREE_CODE (TREE_TYPE (domain
)) == INTEGER_TYPE
20906 && TYPE_NAME (TREE_TYPE (domain
)) == NULL_TREE
)
20909 add_type_attribute (subrange_die
, TREE_TYPE (domain
),
20910 TYPE_UNQUALIFIED
, false, type_die
);
20913 /* ??? If upper is NULL, the array has unspecified length,
20914 but it does have a lower bound. This happens with Fortran
20916 Since the debugger is definitely going to need to know N
20917 to produce useful results, go ahead and output the lower
20918 bound solo, and hope the debugger can cope. */
20920 if (!get_AT (subrange_die
, DW_AT_lower_bound
))
20921 add_bound_info (subrange_die
, DW_AT_lower_bound
, lower
, NULL
);
20922 if (!get_AT (subrange_die
, DW_AT_upper_bound
)
20923 && !get_AT (subrange_die
, DW_AT_count
))
20926 add_bound_info (subrange_die
, DW_AT_upper_bound
, upper
, NULL
);
20927 else if ((is_c () || is_cxx ()) && COMPLETE_TYPE_P (type
))
20928 /* Zero-length array. */
20929 add_bound_info (subrange_die
, DW_AT_count
,
20930 build_int_cst (TREE_TYPE (lower
), 0), NULL
);
20934 /* Otherwise we have an array type with an unspecified length. The
20935 DWARF-2 spec does not say how to handle this; let's just leave out the
20940 /* Add a DW_AT_byte_size attribute to DIE with TREE_NODE's size. */
20943 add_byte_size_attribute (dw_die_ref die
, tree tree_node
)
20945 dw_die_ref decl_die
;
20946 HOST_WIDE_INT size
;
20947 dw_loc_descr_ref size_expr
= NULL
;
20949 switch (TREE_CODE (tree_node
))
20954 case ENUMERAL_TYPE
:
20957 case QUAL_UNION_TYPE
:
20958 if (TREE_CODE (TYPE_SIZE_UNIT (tree_node
)) == VAR_DECL
20959 && (decl_die
= lookup_decl_die (TYPE_SIZE_UNIT (tree_node
))))
20961 add_AT_die_ref (die
, DW_AT_byte_size
, decl_die
);
20964 size_expr
= type_byte_size (tree_node
, &size
);
20967 /* For a data member of a struct or union, the DW_AT_byte_size is
20968 generally given as the number of bytes normally allocated for an
20969 object of the *declared* type of the member itself. This is true
20970 even for bit-fields. */
20971 size
= int_size_in_bytes (field_type (tree_node
));
20974 gcc_unreachable ();
20977 /* Support for dynamically-sized objects was introduced by DWARFv3.
20978 At the moment, GDB does not handle variable byte sizes very well,
20980 if ((dwarf_version
>= 3 || !dwarf_strict
)
20981 && gnat_encodings
== DWARF_GNAT_ENCODINGS_MINIMAL
20982 && size_expr
!= NULL
)
20983 add_AT_loc (die
, DW_AT_byte_size
, size_expr
);
20985 /* Note that `size' might be -1 when we get to this point. If it is, that
20986 indicates that the byte size of the entity in question is variable and
20987 that we could not generate a DWARF expression that computes it. */
20989 add_AT_unsigned (die
, DW_AT_byte_size
, size
);
20992 /* Add a DW_AT_alignment attribute to DIE with TREE_NODE's non-default
20996 add_alignment_attribute (dw_die_ref die
, tree tree_node
)
20998 if (dwarf_version
< 5 && dwarf_strict
)
21003 if (DECL_P (tree_node
))
21005 if (!DECL_USER_ALIGN (tree_node
))
21008 align
= DECL_ALIGN_UNIT (tree_node
);
21010 else if (TYPE_P (tree_node
))
21012 if (!TYPE_USER_ALIGN (tree_node
))
21015 align
= TYPE_ALIGN_UNIT (tree_node
);
21018 gcc_unreachable ();
21020 add_AT_unsigned (die
, DW_AT_alignment
, align
);
21023 /* For a FIELD_DECL node which represents a bit-field, output an attribute
21024 which specifies the distance in bits from the highest order bit of the
21025 "containing object" for the bit-field to the highest order bit of the
21028 For any given bit-field, the "containing object" is a hypothetical object
21029 (of some integral or enum type) within which the given bit-field lives. The
21030 type of this hypothetical "containing object" is always the same as the
21031 declared type of the individual bit-field itself. The determination of the
21032 exact location of the "containing object" for a bit-field is rather
21033 complicated. It's handled by the `field_byte_offset' function (above).
21035 CTX is required: see the comment for VLR_CONTEXT.
21037 Note that it is the size (in bytes) of the hypothetical "containing object"
21038 which will be given in the DW_AT_byte_size attribute for this bit-field.
21039 (See `byte_size_attribute' above). */
21042 add_bit_offset_attribute (dw_die_ref die
, tree decl
, struct vlr_context
*ctx
)
21044 HOST_WIDE_INT object_offset_in_bytes
;
21045 tree original_type
= DECL_BIT_FIELD_TYPE (decl
);
21046 HOST_WIDE_INT bitpos_int
;
21047 HOST_WIDE_INT highest_order_object_bit_offset
;
21048 HOST_WIDE_INT highest_order_field_bit_offset
;
21049 HOST_WIDE_INT bit_offset
;
21051 field_byte_offset (decl
, ctx
, &object_offset_in_bytes
);
21053 /* Must be a field and a bit field. */
21054 gcc_assert (original_type
&& TREE_CODE (decl
) == FIELD_DECL
);
21056 /* We can't yet handle bit-fields whose offsets are variable, so if we
21057 encounter such things, just return without generating any attribute
21058 whatsoever. Likewise for variable or too large size. */
21059 if (! tree_fits_shwi_p (bit_position (decl
))
21060 || ! tree_fits_uhwi_p (DECL_SIZE (decl
)))
21063 bitpos_int
= int_bit_position (decl
);
21065 /* Note that the bit offset is always the distance (in bits) from the
21066 highest-order bit of the "containing object" to the highest-order bit of
21067 the bit-field itself. Since the "high-order end" of any object or field
21068 is different on big-endian and little-endian machines, the computation
21069 below must take account of these differences. */
21070 highest_order_object_bit_offset
= object_offset_in_bytes
* BITS_PER_UNIT
;
21071 highest_order_field_bit_offset
= bitpos_int
;
21073 if (! BYTES_BIG_ENDIAN
)
21075 highest_order_field_bit_offset
+= tree_to_shwi (DECL_SIZE (decl
));
21076 highest_order_object_bit_offset
+=
21077 simple_type_size_in_bits (original_type
);
21081 = (! BYTES_BIG_ENDIAN
21082 ? highest_order_object_bit_offset
- highest_order_field_bit_offset
21083 : highest_order_field_bit_offset
- highest_order_object_bit_offset
);
21085 if (bit_offset
< 0)
21086 add_AT_int (die
, DW_AT_bit_offset
, bit_offset
);
21088 add_AT_unsigned (die
, DW_AT_bit_offset
, (unsigned HOST_WIDE_INT
) bit_offset
);
21091 /* For a FIELD_DECL node which represents a bit field, output an attribute
21092 which specifies the length in bits of the given field. */
21095 add_bit_size_attribute (dw_die_ref die
, tree decl
)
21097 /* Must be a field and a bit field. */
21098 gcc_assert (TREE_CODE (decl
) == FIELD_DECL
21099 && DECL_BIT_FIELD_TYPE (decl
));
21101 if (tree_fits_uhwi_p (DECL_SIZE (decl
)))
21102 add_AT_unsigned (die
, DW_AT_bit_size
, tree_to_uhwi (DECL_SIZE (decl
)));
21105 /* If the compiled language is ANSI C, then add a 'prototyped'
21106 attribute, if arg types are given for the parameters of a function. */
21109 add_prototyped_attribute (dw_die_ref die
, tree func_type
)
21111 switch (get_AT_unsigned (comp_unit_die (), DW_AT_language
))
21118 if (prototype_p (func_type
))
21119 add_AT_flag (die
, DW_AT_prototyped
, 1);
21126 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
21127 by looking in the type declaration, the object declaration equate table or
21128 the block mapping. */
21131 add_abstract_origin_attribute (dw_die_ref die
, tree origin
)
21133 dw_die_ref origin_die
= NULL
;
21135 /* For late LTO debug output we want to refer directly to the abstract
21136 DIE in the early debug rather to the possibly existing concrete
21137 instance and avoid creating that just for this purpose. */
21138 sym_off_pair
*desc
;
21140 && external_die_map
21141 && (desc
= external_die_map
->get (origin
)))
21143 add_AT_external_die_ref (die
, DW_AT_abstract_origin
,
21144 desc
->sym
, desc
->off
);
21148 if (DECL_P (origin
))
21149 origin_die
= lookup_decl_die (origin
);
21150 else if (TYPE_P (origin
))
21151 origin_die
= lookup_type_die (origin
);
21152 else if (TREE_CODE (origin
) == BLOCK
)
21153 origin_die
= lookup_block_die (origin
);
21155 /* XXX: Functions that are never lowered don't always have correct block
21156 trees (in the case of java, they simply have no block tree, in some other
21157 languages). For these functions, there is nothing we can really do to
21158 output correct debug info for inlined functions in all cases. Rather
21159 than die, we'll just produce deficient debug info now, in that we will
21160 have variables without a proper abstract origin. In the future, when all
21161 functions are lowered, we should re-add a gcc_assert (origin_die)
21165 add_AT_die_ref (die
, DW_AT_abstract_origin
, origin_die
);
21168 /* We do not currently support the pure_virtual attribute. */
21171 add_pure_or_virtual_attribute (dw_die_ref die
, tree func_decl
)
21173 if (DECL_VINDEX (func_decl
))
21175 add_AT_unsigned (die
, DW_AT_virtuality
, DW_VIRTUALITY_virtual
);
21177 if (tree_fits_shwi_p (DECL_VINDEX (func_decl
)))
21178 add_AT_loc (die
, DW_AT_vtable_elem_location
,
21179 new_loc_descr (DW_OP_constu
,
21180 tree_to_shwi (DECL_VINDEX (func_decl
)),
21183 /* GNU extension: Record what type this method came from originally. */
21184 if (debug_info_level
> DINFO_LEVEL_TERSE
21185 && DECL_CONTEXT (func_decl
))
21186 add_AT_die_ref (die
, DW_AT_containing_type
,
21187 lookup_type_die (DECL_CONTEXT (func_decl
)));
21191 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
21192 given decl. This used to be a vendor extension until after DWARF 4
21193 standardized it. */
21196 add_linkage_attr (dw_die_ref die
, tree decl
)
21198 const char *name
= IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl
));
21200 /* Mimic what assemble_name_raw does with a leading '*'. */
21201 if (name
[0] == '*')
21204 if (dwarf_version
>= 4)
21205 add_AT_string (die
, DW_AT_linkage_name
, name
);
21207 add_AT_string (die
, DW_AT_MIPS_linkage_name
, name
);
21210 /* Add source coordinate attributes for the given decl. */
21213 add_src_coords_attributes (dw_die_ref die
, tree decl
)
21215 expanded_location s
;
21217 if (LOCATION_LOCUS (DECL_SOURCE_LOCATION (decl
)) == UNKNOWN_LOCATION
)
21219 s
= expand_location (DECL_SOURCE_LOCATION (decl
));
21220 add_AT_file (die
, DW_AT_decl_file
, lookup_filename (s
.file
));
21221 add_AT_unsigned (die
, DW_AT_decl_line
, s
.line
);
21222 if (debug_column_info
&& s
.column
)
21223 add_AT_unsigned (die
, DW_AT_decl_column
, s
.column
);
21226 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl. */
21229 add_linkage_name_raw (dw_die_ref die
, tree decl
)
21231 /* Defer until we have an assembler name set. */
21232 if (!DECL_ASSEMBLER_NAME_SET_P (decl
))
21234 limbo_die_node
*asm_name
;
21236 asm_name
= ggc_cleared_alloc
<limbo_die_node
> ();
21237 asm_name
->die
= die
;
21238 asm_name
->created_for
= decl
;
21239 asm_name
->next
= deferred_asm_name
;
21240 deferred_asm_name
= asm_name
;
21242 else if (DECL_ASSEMBLER_NAME (decl
) != DECL_NAME (decl
))
21243 add_linkage_attr (die
, decl
);
21246 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl if desired. */
21249 add_linkage_name (dw_die_ref die
, tree decl
)
21251 if (debug_info_level
> DINFO_LEVEL_NONE
21252 && VAR_OR_FUNCTION_DECL_P (decl
)
21253 && TREE_PUBLIC (decl
)
21254 && !(VAR_P (decl
) && DECL_REGISTER (decl
))
21255 && die
->die_tag
!= DW_TAG_member
)
21256 add_linkage_name_raw (die
, decl
);
21259 /* Add a DW_AT_name attribute and source coordinate attribute for the
21260 given decl, but only if it actually has a name. */
21263 add_name_and_src_coords_attributes (dw_die_ref die
, tree decl
,
21264 bool no_linkage_name
)
21268 decl_name
= DECL_NAME (decl
);
21269 if (decl_name
!= NULL
&& IDENTIFIER_POINTER (decl_name
) != NULL
)
21271 const char *name
= dwarf2_name (decl
, 0);
21273 add_name_attribute (die
, name
);
21275 add_desc_attribute (die
, decl
);
21277 if (! DECL_ARTIFICIAL (decl
))
21278 add_src_coords_attributes (die
, decl
);
21280 if (!no_linkage_name
)
21281 add_linkage_name (die
, decl
);
21284 add_desc_attribute (die
, decl
);
21286 #ifdef VMS_DEBUGGING_INFO
21287 /* Get the function's name, as described by its RTL. This may be different
21288 from the DECL_NAME name used in the source file. */
21289 if (TREE_CODE (decl
) == FUNCTION_DECL
&& TREE_ASM_WRITTEN (decl
))
21291 add_AT_addr (die
, DW_AT_VMS_rtnbeg_pd_address
,
21292 XEXP (DECL_RTL (decl
), 0), false);
21293 vec_safe_push (used_rtx_array
, XEXP (DECL_RTL (decl
), 0));
21295 #endif /* VMS_DEBUGGING_INFO */
21298 /* Add VALUE as a DW_AT_discr_value attribute to DIE. */
21301 add_discr_value (dw_die_ref die
, dw_discr_value
*value
)
21305 attr
.dw_attr
= DW_AT_discr_value
;
21306 attr
.dw_attr_val
.val_class
= dw_val_class_discr_value
;
21307 attr
.dw_attr_val
.val_entry
= NULL
;
21308 attr
.dw_attr_val
.v
.val_discr_value
.pos
= value
->pos
;
21310 attr
.dw_attr_val
.v
.val_discr_value
.v
.uval
= value
->v
.uval
;
21312 attr
.dw_attr_val
.v
.val_discr_value
.v
.sval
= value
->v
.sval
;
21313 add_dwarf_attr (die
, &attr
);
21316 /* Add DISCR_LIST as a DW_AT_discr_list to DIE. */
21319 add_discr_list (dw_die_ref die
, dw_discr_list_ref discr_list
)
21323 attr
.dw_attr
= DW_AT_discr_list
;
21324 attr
.dw_attr_val
.val_class
= dw_val_class_discr_list
;
21325 attr
.dw_attr_val
.val_entry
= NULL
;
21326 attr
.dw_attr_val
.v
.val_discr_list
= discr_list
;
21327 add_dwarf_attr (die
, &attr
);
21330 static inline dw_discr_list_ref
21331 AT_discr_list (dw_attr_node
*attr
)
21333 return attr
->dw_attr_val
.v
.val_discr_list
;
21336 #ifdef VMS_DEBUGGING_INFO
21337 /* Output the debug main pointer die for VMS */
21340 dwarf2out_vms_debug_main_pointer (void)
21342 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
21345 /* Allocate the VMS debug main subprogram die. */
21346 die
= new_die_raw (DW_TAG_subprogram
);
21347 add_name_attribute (die
, VMS_DEBUG_MAIN_POINTER
);
21348 ASM_GENERATE_INTERNAL_LABEL (label
, PROLOGUE_END_LABEL
,
21349 current_function_funcdef_no
);
21350 add_AT_lbl_id (die
, DW_AT_entry_pc
, label
);
21352 /* Make it the first child of comp_unit_die (). */
21353 die
->die_parent
= comp_unit_die ();
21354 if (comp_unit_die ()->die_child
)
21356 die
->die_sib
= comp_unit_die ()->die_child
->die_sib
;
21357 comp_unit_die ()->die_child
->die_sib
= die
;
21361 die
->die_sib
= die
;
21362 comp_unit_die ()->die_child
= die
;
21365 #endif /* VMS_DEBUGGING_INFO */
21367 /* walk_tree helper function for uses_local_type, below. */
21370 uses_local_type_r (tree
*tp
, int *walk_subtrees
, void *data ATTRIBUTE_UNUSED
)
21373 *walk_subtrees
= 0;
21376 tree name
= TYPE_NAME (*tp
);
21377 if (name
&& DECL_P (name
) && decl_function_context (name
))
21383 /* If TYPE involves a function-local type (including a local typedef to a
21384 non-local type), returns that type; otherwise returns NULL_TREE. */
21387 uses_local_type (tree type
)
21389 tree used
= walk_tree_without_duplicates (&type
, uses_local_type_r
, NULL
);
21393 /* Return the DIE for the scope that immediately contains this type.
21394 Non-named types that do not involve a function-local type get global
21395 scope. Named types nested in namespaces or other types get their
21396 containing scope. All other types (i.e. function-local named types) get
21397 the current active scope. */
21400 scope_die_for (tree t
, dw_die_ref context_die
)
21402 dw_die_ref scope_die
= NULL
;
21403 tree containing_scope
;
21405 /* Non-types always go in the current scope. */
21406 gcc_assert (TYPE_P (t
));
21408 /* Use the scope of the typedef, rather than the scope of the type
21410 if (TYPE_NAME (t
) && DECL_P (TYPE_NAME (t
)))
21411 containing_scope
= DECL_CONTEXT (TYPE_NAME (t
));
21413 containing_scope
= TYPE_CONTEXT (t
);
21415 /* Use the containing namespace if there is one. */
21416 if (containing_scope
&& TREE_CODE (containing_scope
) == NAMESPACE_DECL
)
21418 if (context_die
== lookup_decl_die (containing_scope
))
21420 else if (debug_info_level
> DINFO_LEVEL_TERSE
)
21421 context_die
= get_context_die (containing_scope
);
21423 containing_scope
= NULL_TREE
;
21426 /* Ignore function type "scopes" from the C frontend. They mean that
21427 a tagged type is local to a parmlist of a function declarator, but
21428 that isn't useful to DWARF. */
21429 if (containing_scope
&& TREE_CODE (containing_scope
) == FUNCTION_TYPE
)
21430 containing_scope
= NULL_TREE
;
21432 if (SCOPE_FILE_SCOPE_P (containing_scope
))
21434 /* If T uses a local type keep it local as well, to avoid references
21435 to function-local DIEs from outside the function. */
21436 if (current_function_decl
&& uses_local_type (t
))
21437 scope_die
= context_die
;
21439 scope_die
= comp_unit_die ();
21441 else if (TYPE_P (containing_scope
))
21443 /* For types, we can just look up the appropriate DIE. */
21444 if (debug_info_level
> DINFO_LEVEL_TERSE
)
21445 scope_die
= get_context_die (containing_scope
);
21448 scope_die
= lookup_type_die_strip_naming_typedef (containing_scope
);
21449 if (scope_die
== NULL
)
21450 scope_die
= comp_unit_die ();
21454 scope_die
= context_die
;
21459 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
21462 local_scope_p (dw_die_ref context_die
)
21464 for (; context_die
; context_die
= context_die
->die_parent
)
21465 if (context_die
->die_tag
== DW_TAG_inlined_subroutine
21466 || context_die
->die_tag
== DW_TAG_subprogram
)
21472 /* Returns nonzero if CONTEXT_DIE is a class. */
21475 class_scope_p (dw_die_ref context_die
)
21477 return (context_die
21478 && (context_die
->die_tag
== DW_TAG_structure_type
21479 || context_die
->die_tag
== DW_TAG_class_type
21480 || context_die
->die_tag
== DW_TAG_interface_type
21481 || context_die
->die_tag
== DW_TAG_union_type
));
21484 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
21485 whether or not to treat a DIE in this context as a declaration. */
21488 class_or_namespace_scope_p (dw_die_ref context_die
)
21490 return (class_scope_p (context_die
)
21491 || (context_die
&& context_die
->die_tag
== DW_TAG_namespace
));
21494 /* Many forms of DIEs require a "type description" attribute. This
21495 routine locates the proper "type descriptor" die for the type given
21496 by 'type' plus any additional qualifiers given by 'cv_quals', and
21497 adds a DW_AT_type attribute below the given die. */
21500 add_type_attribute (dw_die_ref object_die
, tree type
, int cv_quals
,
21501 bool reverse
, dw_die_ref context_die
)
21503 enum tree_code code
= TREE_CODE (type
);
21504 dw_die_ref type_die
= NULL
;
21506 /* ??? If this type is an unnamed subrange type of an integral, floating-point
21507 or fixed-point type, use the inner type. This is because we have no
21508 support for unnamed types in base_type_die. This can happen if this is
21509 an Ada subrange type. Correct solution is emit a subrange type die. */
21510 if ((code
== INTEGER_TYPE
|| code
== REAL_TYPE
|| code
== FIXED_POINT_TYPE
)
21511 && TREE_TYPE (type
) != 0 && TYPE_NAME (type
) == 0)
21512 type
= TREE_TYPE (type
), code
= TREE_CODE (type
);
21514 if (code
== ERROR_MARK
21515 /* Handle a special case. For functions whose return type is void, we
21516 generate *no* type attribute. (Note that no object may have type
21517 `void', so this only applies to function return types). */
21518 || code
== VOID_TYPE
)
21521 type_die
= modified_type_die (type
,
21522 cv_quals
| TYPE_QUALS (type
),
21526 if (type_die
!= NULL
)
21527 add_AT_die_ref (object_die
, DW_AT_type
, type_die
);
21530 /* Given an object die, add the calling convention attribute for the
21531 function call type. */
21533 add_calling_convention_attribute (dw_die_ref subr_die
, tree decl
)
21535 enum dwarf_calling_convention value
= DW_CC_normal
;
21537 value
= ((enum dwarf_calling_convention
)
21538 targetm
.dwarf_calling_convention (TREE_TYPE (decl
)));
21541 && id_equal (DECL_ASSEMBLER_NAME (decl
), "MAIN__"))
21543 /* DWARF 2 doesn't provide a way to identify a program's source-level
21544 entry point. DW_AT_calling_convention attributes are only meant
21545 to describe functions' calling conventions. However, lacking a
21546 better way to signal the Fortran main program, we used this for
21547 a long time, following existing custom. Now, DWARF 4 has
21548 DW_AT_main_subprogram, which we add below, but some tools still
21549 rely on the old way, which we thus keep. */
21550 value
= DW_CC_program
;
21552 if (dwarf_version
>= 4 || !dwarf_strict
)
21553 add_AT_flag (subr_die
, DW_AT_main_subprogram
, 1);
21556 /* Only add the attribute if the backend requests it, and
21557 is not DW_CC_normal. */
21558 if (value
&& (value
!= DW_CC_normal
))
21559 add_AT_unsigned (subr_die
, DW_AT_calling_convention
, value
);
21562 /* Given a tree pointer to a struct, class, union, or enum type node, return
21563 a pointer to the (string) tag name for the given type, or zero if the type
21564 was declared without a tag. */
21566 static const char *
21567 type_tag (const_tree type
)
21569 const char *name
= 0;
21571 if (TYPE_NAME (type
) != 0)
21575 /* Find the IDENTIFIER_NODE for the type name. */
21576 if (TREE_CODE (TYPE_NAME (type
)) == IDENTIFIER_NODE
21577 && !TYPE_NAMELESS (type
))
21578 t
= TYPE_NAME (type
);
21580 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
21581 a TYPE_DECL node, regardless of whether or not a `typedef' was
21583 else if (TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
21584 && ! DECL_IGNORED_P (TYPE_NAME (type
)))
21586 /* We want to be extra verbose. Don't call dwarf_name if
21587 DECL_NAME isn't set. The default hook for decl_printable_name
21588 doesn't like that, and in this context it's correct to return
21589 0, instead of "<anonymous>" or the like. */
21590 if (DECL_NAME (TYPE_NAME (type
))
21591 && !DECL_NAMELESS (TYPE_NAME (type
)))
21592 name
= lang_hooks
.dwarf_name (TYPE_NAME (type
), 2);
21595 /* Now get the name as a string, or invent one. */
21596 if (!name
&& t
!= 0)
21597 name
= IDENTIFIER_POINTER (t
);
21600 return (name
== 0 || *name
== '\0') ? 0 : name
;
21603 /* Return the type associated with a data member, make a special check
21604 for bit field types. */
21607 member_declared_type (const_tree member
)
21609 return (DECL_BIT_FIELD_TYPE (member
)
21610 ? DECL_BIT_FIELD_TYPE (member
) : TREE_TYPE (member
));
21613 /* Get the decl's label, as described by its RTL. This may be different
21614 from the DECL_NAME name used in the source file. */
21617 static const char *
21618 decl_start_label (tree decl
)
21621 const char *fnname
;
21623 x
= DECL_RTL (decl
);
21624 gcc_assert (MEM_P (x
));
21627 gcc_assert (GET_CODE (x
) == SYMBOL_REF
);
21629 fnname
= XSTR (x
, 0);
21634 /* For variable-length arrays that have been previously generated, but
21635 may be incomplete due to missing subscript info, fill the subscript
21636 info. Return TRUE if this is one of those cases. */
21638 fill_variable_array_bounds (tree type
)
21640 if (TREE_ASM_WRITTEN (type
)
21641 && TREE_CODE (type
) == ARRAY_TYPE
21642 && variably_modified_type_p (type
, NULL
))
21644 dw_die_ref array_die
= lookup_type_die (type
);
21647 add_subscript_info (array_die
, type
, !is_ada ());
21653 /* These routines generate the internal representation of the DIE's for
21654 the compilation unit. Debugging information is collected by walking
21655 the declaration trees passed in from dwarf2out_decl(). */
21658 gen_array_type_die (tree type
, dw_die_ref context_die
)
21660 dw_die_ref array_die
;
21662 /* GNU compilers represent multidimensional array types as sequences of one
21663 dimensional array types whose element types are themselves array types.
21664 We sometimes squish that down to a single array_type DIE with multiple
21665 subscripts in the Dwarf debugging info. The draft Dwarf specification
21666 say that we are allowed to do this kind of compression in C, because
21667 there is no difference between an array of arrays and a multidimensional
21668 array. We don't do this for Ada to remain as close as possible to the
21669 actual representation, which is especially important against the language
21670 flexibilty wrt arrays of variable size. */
21672 bool collapse_nested_arrays
= !is_ada ();
21674 if (fill_variable_array_bounds (type
))
21677 dw_die_ref scope_die
= scope_die_for (type
, context_die
);
21680 /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
21681 DW_TAG_string_type doesn't have DW_AT_type attribute). */
21682 if (TYPE_STRING_FLAG (type
)
21683 && TREE_CODE (type
) == ARRAY_TYPE
21685 && TYPE_MODE (TREE_TYPE (type
)) == TYPE_MODE (char_type_node
))
21687 HOST_WIDE_INT size
;
21689 array_die
= new_die (DW_TAG_string_type
, scope_die
, type
);
21690 add_name_attribute (array_die
, type_tag (type
));
21691 equate_type_number_to_die (type
, array_die
);
21692 size
= int_size_in_bytes (type
);
21694 add_AT_unsigned (array_die
, DW_AT_byte_size
, size
);
21695 /* ??? We can't annotate types late, but for LTO we may not
21696 generate a location early either (gfortran.dg/save_6.f90). */
21697 else if (! (early_dwarf
&& (flag_generate_lto
|| flag_generate_offload
))
21698 && TYPE_DOMAIN (type
) != NULL_TREE
21699 && TYPE_MAX_VALUE (TYPE_DOMAIN (type
)) != NULL_TREE
)
21701 tree szdecl
= TYPE_MAX_VALUE (TYPE_DOMAIN (type
));
21702 tree rszdecl
= szdecl
;
21704 size
= int_size_in_bytes (TREE_TYPE (szdecl
));
21705 if (!DECL_P (szdecl
))
21707 if (TREE_CODE (szdecl
) == INDIRECT_REF
21708 && DECL_P (TREE_OPERAND (szdecl
, 0)))
21710 rszdecl
= TREE_OPERAND (szdecl
, 0);
21711 if (int_size_in_bytes (TREE_TYPE (rszdecl
))
21712 != DWARF2_ADDR_SIZE
)
21720 dw_loc_list_ref loc
21721 = loc_list_from_tree (rszdecl
, szdecl
== rszdecl
? 2 : 0,
21725 add_AT_location_description (array_die
, DW_AT_string_length
,
21727 if (size
!= DWARF2_ADDR_SIZE
)
21728 add_AT_unsigned (array_die
, dwarf_version
>= 5
21729 ? DW_AT_string_length_byte_size
21730 : DW_AT_byte_size
, size
);
21737 array_die
= new_die (DW_TAG_array_type
, scope_die
, type
);
21738 add_name_attribute (array_die
, type_tag (type
));
21739 equate_type_number_to_die (type
, array_die
);
21741 if (TREE_CODE (type
) == VECTOR_TYPE
)
21742 add_AT_flag (array_die
, DW_AT_GNU_vector
, 1);
21744 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
21746 && TREE_CODE (type
) == ARRAY_TYPE
21747 && TREE_CODE (TREE_TYPE (type
)) == ARRAY_TYPE
21748 && !TYPE_STRING_FLAG (TREE_TYPE (type
)))
21749 add_AT_unsigned (array_die
, DW_AT_ordering
, DW_ORD_col_major
);
21752 /* We default the array ordering. Debuggers will probably do the right
21753 things even if DW_AT_ordering is not present. It's not even an issue
21754 until we start to get into multidimensional arrays anyway. If a debugger
21755 is ever caught doing the Wrong Thing for multi-dimensional arrays,
21756 then we'll have to put the DW_AT_ordering attribute back in. (But if
21757 and when we find out that we need to put these in, we will only do so
21758 for multidimensional arrays. */
21759 add_AT_unsigned (array_die
, DW_AT_ordering
, DW_ORD_row_major
);
21762 if (TREE_CODE (type
) == VECTOR_TYPE
)
21764 /* For VECTOR_TYPEs we use an array die with appropriate bounds. */
21765 dw_die_ref subrange_die
= new_die (DW_TAG_subrange_type
, array_die
, NULL
);
21766 add_bound_info (subrange_die
, DW_AT_lower_bound
, size_zero_node
, NULL
);
21767 add_bound_info (subrange_die
, DW_AT_upper_bound
,
21768 size_int (TYPE_VECTOR_SUBPARTS (type
) - 1), NULL
);
21771 add_subscript_info (array_die
, type
, collapse_nested_arrays
);
21773 /* Add representation of the type of the elements of this array type and
21774 emit the corresponding DIE if we haven't done it already. */
21775 element_type
= TREE_TYPE (type
);
21776 if (collapse_nested_arrays
)
21777 while (TREE_CODE (element_type
) == ARRAY_TYPE
)
21779 if (TYPE_STRING_FLAG (element_type
) && is_fortran ())
21781 element_type
= TREE_TYPE (element_type
);
21784 add_type_attribute (array_die
, element_type
, TYPE_UNQUALIFIED
,
21785 TREE_CODE (type
) == ARRAY_TYPE
21786 && TYPE_REVERSE_STORAGE_ORDER (type
),
21789 add_gnat_descriptive_type_attribute (array_die
, type
, context_die
);
21790 if (TYPE_ARTIFICIAL (type
))
21791 add_AT_flag (array_die
, DW_AT_artificial
, 1);
21793 if (get_AT (array_die
, DW_AT_name
))
21794 add_pubtype (type
, array_die
);
21796 add_alignment_attribute (array_die
, type
);
21799 /* This routine generates DIE for array with hidden descriptor, details
21800 are filled into *info by a langhook. */
21803 gen_descr_array_type_die (tree type
, struct array_descr_info
*info
,
21804 dw_die_ref context_die
)
21806 const dw_die_ref scope_die
= scope_die_for (type
, context_die
);
21807 const dw_die_ref array_die
= new_die (DW_TAG_array_type
, scope_die
, type
);
21808 struct loc_descr_context context
= { type
, info
->base_decl
, NULL
,
21810 enum dwarf_tag subrange_tag
= DW_TAG_subrange_type
;
21813 add_name_attribute (array_die
, type_tag (type
));
21814 equate_type_number_to_die (type
, array_die
);
21816 if (info
->ndimensions
> 1)
21817 switch (info
->ordering
)
21819 case array_descr_ordering_row_major
:
21820 add_AT_unsigned (array_die
, DW_AT_ordering
, DW_ORD_row_major
);
21822 case array_descr_ordering_column_major
:
21823 add_AT_unsigned (array_die
, DW_AT_ordering
, DW_ORD_col_major
);
21829 if (dwarf_version
>= 3 || !dwarf_strict
)
21831 if (info
->data_location
)
21832 add_scalar_info (array_die
, DW_AT_data_location
, info
->data_location
,
21833 dw_scalar_form_exprloc
, &context
);
21834 if (info
->associated
)
21835 add_scalar_info (array_die
, DW_AT_associated
, info
->associated
,
21836 dw_scalar_form_constant
21837 | dw_scalar_form_exprloc
21838 | dw_scalar_form_reference
, &context
);
21839 if (info
->allocated
)
21840 add_scalar_info (array_die
, DW_AT_allocated
, info
->allocated
,
21841 dw_scalar_form_constant
21842 | dw_scalar_form_exprloc
21843 | dw_scalar_form_reference
, &context
);
21846 const enum dwarf_attribute attr
21847 = (info
->stride_in_bits
) ? DW_AT_bit_stride
: DW_AT_byte_stride
;
21849 = (info
->stride_in_bits
)
21850 ? dw_scalar_form_constant
21851 : (dw_scalar_form_constant
21852 | dw_scalar_form_exprloc
21853 | dw_scalar_form_reference
);
21855 add_scalar_info (array_die
, attr
, info
->stride
, forms
, &context
);
21858 if (dwarf_version
>= 5)
21862 add_scalar_info (array_die
, DW_AT_rank
, info
->rank
,
21863 dw_scalar_form_constant
21864 | dw_scalar_form_exprloc
, &context
);
21865 subrange_tag
= DW_TAG_generic_subrange
;
21866 context
.placeholder_arg
= true;
21870 add_gnat_descriptive_type_attribute (array_die
, type
, context_die
);
21872 for (dim
= 0; dim
< info
->ndimensions
; dim
++)
21874 dw_die_ref subrange_die
= new_die (subrange_tag
, array_die
, NULL
);
21876 if (info
->dimen
[dim
].bounds_type
)
21877 add_type_attribute (subrange_die
,
21878 info
->dimen
[dim
].bounds_type
, TYPE_UNQUALIFIED
,
21879 false, context_die
);
21880 if (info
->dimen
[dim
].lower_bound
)
21881 add_bound_info (subrange_die
, DW_AT_lower_bound
,
21882 info
->dimen
[dim
].lower_bound
, &context
);
21883 if (info
->dimen
[dim
].upper_bound
)
21884 add_bound_info (subrange_die
, DW_AT_upper_bound
,
21885 info
->dimen
[dim
].upper_bound
, &context
);
21886 if ((dwarf_version
>= 3 || !dwarf_strict
) && info
->dimen
[dim
].stride
)
21887 add_scalar_info (subrange_die
, DW_AT_byte_stride
,
21888 info
->dimen
[dim
].stride
,
21889 dw_scalar_form_constant
21890 | dw_scalar_form_exprloc
21891 | dw_scalar_form_reference
,
21895 gen_type_die (info
->element_type
, context_die
);
21896 add_type_attribute (array_die
, info
->element_type
, TYPE_UNQUALIFIED
,
21897 TREE_CODE (type
) == ARRAY_TYPE
21898 && TYPE_REVERSE_STORAGE_ORDER (type
),
21901 if (get_AT (array_die
, DW_AT_name
))
21902 add_pubtype (type
, array_die
);
21904 add_alignment_attribute (array_die
, type
);
21909 gen_entry_point_die (tree decl
, dw_die_ref context_die
)
21911 tree origin
= decl_ultimate_origin (decl
);
21912 dw_die_ref decl_die
= new_die (DW_TAG_entry_point
, context_die
, decl
);
21914 if (origin
!= NULL
)
21915 add_abstract_origin_attribute (decl_die
, origin
);
21918 add_name_and_src_coords_attributes (decl_die
, decl
);
21919 add_type_attribute (decl_die
, TREE_TYPE (TREE_TYPE (decl
)),
21920 TYPE_UNQUALIFIED
, false, context_die
);
21923 if (DECL_ABSTRACT_P (decl
))
21924 equate_decl_number_to_die (decl
, decl_die
);
21926 add_AT_lbl_id (decl_die
, DW_AT_low_pc
, decl_start_label (decl
));
21930 /* Walk through the list of incomplete types again, trying once more to
21931 emit full debugging info for them. */
21934 retry_incomplete_types (void)
21939 for (i
= vec_safe_length (incomplete_types
) - 1; i
>= 0; i
--)
21940 if (should_emit_struct_debug ((*incomplete_types
)[i
], DINFO_USAGE_DIR_USE
))
21941 gen_type_die ((*incomplete_types
)[i
], comp_unit_die ());
21942 vec_safe_truncate (incomplete_types
, 0);
21945 /* Determine what tag to use for a record type. */
21947 static enum dwarf_tag
21948 record_type_tag (tree type
)
21950 if (! lang_hooks
.types
.classify_record
)
21951 return DW_TAG_structure_type
;
21953 switch (lang_hooks
.types
.classify_record (type
))
21955 case RECORD_IS_STRUCT
:
21956 return DW_TAG_structure_type
;
21958 case RECORD_IS_CLASS
:
21959 return DW_TAG_class_type
;
21961 case RECORD_IS_INTERFACE
:
21962 if (dwarf_version
>= 3 || !dwarf_strict
)
21963 return DW_TAG_interface_type
;
21964 return DW_TAG_structure_type
;
21967 gcc_unreachable ();
21971 /* Generate a DIE to represent an enumeration type. Note that these DIEs
21972 include all of the information about the enumeration values also. Each
21973 enumerated type name/value is listed as a child of the enumerated type
21977 gen_enumeration_type_die (tree type
, dw_die_ref context_die
)
21979 dw_die_ref type_die
= lookup_type_die (type
);
21980 dw_die_ref orig_type_die
= type_die
;
21982 if (type_die
== NULL
)
21984 type_die
= new_die (DW_TAG_enumeration_type
,
21985 scope_die_for (type
, context_die
), type
);
21986 equate_type_number_to_die (type
, type_die
);
21987 add_name_attribute (type_die
, type_tag (type
));
21988 if ((dwarf_version
>= 4 || !dwarf_strict
)
21989 && ENUM_IS_SCOPED (type
))
21990 add_AT_flag (type_die
, DW_AT_enum_class
, 1);
21991 if (ENUM_IS_OPAQUE (type
) && TYPE_SIZE (type
))
21992 add_AT_flag (type_die
, DW_AT_declaration
, 1);
21994 add_AT_unsigned (type_die
, DW_AT_encoding
,
21995 TYPE_UNSIGNED (type
)
21999 else if (! TYPE_SIZE (type
) || ENUM_IS_OPAQUE (type
))
22002 remove_AT (type_die
, DW_AT_declaration
);
22004 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
22005 given enum type is incomplete, do not generate the DW_AT_byte_size
22006 attribute or the DW_AT_element_list attribute. */
22007 if (TYPE_SIZE (type
))
22011 if (!ENUM_IS_OPAQUE (type
))
22012 TREE_ASM_WRITTEN (type
) = 1;
22013 if (!orig_type_die
|| !get_AT (type_die
, DW_AT_byte_size
))
22014 add_byte_size_attribute (type_die
, type
);
22015 if (!orig_type_die
|| !get_AT (type_die
, DW_AT_alignment
))
22016 add_alignment_attribute (type_die
, type
);
22017 if ((dwarf_version
>= 3 || !dwarf_strict
)
22018 && (!orig_type_die
|| !get_AT (type_die
, DW_AT_type
)))
22020 tree underlying
= lang_hooks
.types
.enum_underlying_base_type (type
);
22021 add_type_attribute (type_die
, underlying
, TYPE_UNQUALIFIED
, false,
22024 if (TYPE_STUB_DECL (type
) != NULL_TREE
)
22026 if (!orig_type_die
|| !get_AT (type_die
, DW_AT_decl_file
))
22027 add_src_coords_attributes (type_die
, TYPE_STUB_DECL (type
));
22028 if (!orig_type_die
|| !get_AT (type_die
, DW_AT_accessibility
))
22029 add_accessibility_attribute (type_die
, TYPE_STUB_DECL (type
));
22032 /* If the first reference to this type was as the return type of an
22033 inline function, then it may not have a parent. Fix this now. */
22034 if (type_die
->die_parent
== NULL
)
22035 add_child_die (scope_die_for (type
, context_die
), type_die
);
22037 for (link
= TYPE_VALUES (type
);
22038 link
!= NULL
; link
= TREE_CHAIN (link
))
22040 dw_die_ref enum_die
= new_die (DW_TAG_enumerator
, type_die
, link
);
22041 tree value
= TREE_VALUE (link
);
22043 gcc_assert (!ENUM_IS_OPAQUE (type
));
22044 add_name_attribute (enum_die
,
22045 IDENTIFIER_POINTER (TREE_PURPOSE (link
)));
22047 if (TREE_CODE (value
) == CONST_DECL
)
22048 value
= DECL_INITIAL (value
);
22050 if (simple_type_size_in_bits (TREE_TYPE (value
))
22051 <= HOST_BITS_PER_WIDE_INT
|| tree_fits_shwi_p (value
))
22053 /* For constant forms created by add_AT_unsigned DWARF
22054 consumers (GDB, elfutils, etc.) always zero extend
22055 the value. Only when the actual value is negative
22056 do we need to use add_AT_int to generate a constant
22057 form that can represent negative values. */
22058 HOST_WIDE_INT val
= TREE_INT_CST_LOW (value
);
22059 if (TYPE_UNSIGNED (TREE_TYPE (value
)) || val
>= 0)
22060 add_AT_unsigned (enum_die
, DW_AT_const_value
,
22061 (unsigned HOST_WIDE_INT
) val
);
22063 add_AT_int (enum_die
, DW_AT_const_value
, val
);
22066 /* Enumeration constants may be wider than HOST_WIDE_INT. Handle
22067 that here. TODO: This should be re-worked to use correct
22068 signed/unsigned double tags for all cases. */
22069 add_AT_wide (enum_die
, DW_AT_const_value
, wi::to_wide (value
));
22072 add_gnat_descriptive_type_attribute (type_die
, type
, context_die
);
22073 if (TYPE_ARTIFICIAL (type
)
22074 && (!orig_type_die
|| !get_AT (type_die
, DW_AT_artificial
)))
22075 add_AT_flag (type_die
, DW_AT_artificial
, 1);
22078 add_AT_flag (type_die
, DW_AT_declaration
, 1);
22080 add_pubtype (type
, type_die
);
22085 /* Generate a DIE to represent either a real live formal parameter decl or to
22086 represent just the type of some formal parameter position in some function
22089 Note that this routine is a bit unusual because its argument may be a
22090 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
22091 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
22092 node. If it's the former then this function is being called to output a
22093 DIE to represent a formal parameter object (or some inlining thereof). If
22094 it's the latter, then this function is only being called to output a
22095 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
22096 argument type of some subprogram type.
22097 If EMIT_NAME_P is true, name and source coordinate attributes
22101 gen_formal_parameter_die (tree node
, tree origin
, bool emit_name_p
,
22102 dw_die_ref context_die
)
22104 tree node_or_origin
= node
? node
: origin
;
22105 tree ultimate_origin
;
22106 dw_die_ref parm_die
= NULL
;
22108 if (DECL_P (node_or_origin
))
22110 parm_die
= lookup_decl_die (node
);
22112 /* If the contexts differ, we may not be talking about the same
22114 ??? When in LTO the DIE parent is the "abstract" copy and the
22115 context_die is the specification "copy". But this whole block
22116 should eventually be no longer needed. */
22117 if (parm_die
&& parm_die
->die_parent
!= context_die
&& !in_lto_p
)
22119 if (!DECL_ABSTRACT_P (node
))
22121 /* This can happen when creating an inlined instance, in
22122 which case we need to create a new DIE that will get
22123 annotated with DW_AT_abstract_origin. */
22127 gcc_unreachable ();
22130 if (parm_die
&& parm_die
->die_parent
== NULL
)
22132 /* Check that parm_die already has the right attributes that
22133 we would have added below. If any attributes are
22134 missing, fall through to add them. */
22135 if (! DECL_ABSTRACT_P (node_or_origin
)
22136 && !get_AT (parm_die
, DW_AT_location
)
22137 && !get_AT (parm_die
, DW_AT_const_value
))
22138 /* We are missing location info, and are about to add it. */
22142 add_child_die (context_die
, parm_die
);
22148 /* If we have a previously generated DIE, use it, unless this is an
22149 concrete instance (origin != NULL), in which case we need a new
22150 DIE with a corresponding DW_AT_abstract_origin. */
22152 if (parm_die
&& origin
== NULL
)
22153 reusing_die
= true;
22156 parm_die
= new_die (DW_TAG_formal_parameter
, context_die
, node
);
22157 reusing_die
= false;
22160 switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin
)))
22162 case tcc_declaration
:
22163 ultimate_origin
= decl_ultimate_origin (node_or_origin
);
22164 if (node
|| ultimate_origin
)
22165 origin
= ultimate_origin
;
22170 if (origin
!= NULL
)
22171 add_abstract_origin_attribute (parm_die
, origin
);
22172 else if (emit_name_p
)
22173 add_name_and_src_coords_attributes (parm_die
, node
);
22175 || (! DECL_ABSTRACT_P (node_or_origin
)
22176 && variably_modified_type_p (TREE_TYPE (node_or_origin
),
22177 decl_function_context
22178 (node_or_origin
))))
22180 tree type
= TREE_TYPE (node_or_origin
);
22181 if (decl_by_reference_p (node_or_origin
))
22182 add_type_attribute (parm_die
, TREE_TYPE (type
),
22184 false, context_die
);
22186 add_type_attribute (parm_die
, type
,
22187 decl_quals (node_or_origin
),
22188 false, context_die
);
22190 if (origin
== NULL
&& DECL_ARTIFICIAL (node
))
22191 add_AT_flag (parm_die
, DW_AT_artificial
, 1);
22193 if (node
&& node
!= origin
)
22194 equate_decl_number_to_die (node
, parm_die
);
22195 if (! DECL_ABSTRACT_P (node_or_origin
))
22196 add_location_or_const_value_attribute (parm_die
, node_or_origin
,
22202 /* We were called with some kind of a ..._TYPE node. */
22203 add_type_attribute (parm_die
, node_or_origin
, TYPE_UNQUALIFIED
, false,
22208 gcc_unreachable ();
22214 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
22215 children DW_TAG_formal_parameter DIEs representing the arguments of the
22218 PARM_PACK must be a function parameter pack.
22219 PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
22220 must point to the subsequent arguments of the function PACK_ARG belongs to.
22221 SUBR_DIE is the DIE of the function PACK_ARG belongs to.
22222 If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
22223 following the last one for which a DIE was generated. */
22226 gen_formal_parameter_pack_die (tree parm_pack
,
22228 dw_die_ref subr_die
,
22232 dw_die_ref parm_pack_die
;
22234 gcc_assert (parm_pack
22235 && lang_hooks
.function_parameter_pack_p (parm_pack
)
22238 parm_pack_die
= new_die (DW_TAG_GNU_formal_parameter_pack
, subr_die
, parm_pack
);
22239 add_src_coords_attributes (parm_pack_die
, parm_pack
);
22241 for (arg
= pack_arg
; arg
; arg
= DECL_CHAIN (arg
))
22243 if (! lang_hooks
.decls
.function_parm_expanded_from_pack_p (arg
,
22246 gen_formal_parameter_die (arg
, NULL
,
22247 false /* Don't emit name attribute. */,
22252 return parm_pack_die
;
22255 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
22256 at the end of an (ANSI prototyped) formal parameters list. */
22259 gen_unspecified_parameters_die (tree decl_or_type
, dw_die_ref context_die
)
22261 new_die (DW_TAG_unspecified_parameters
, context_die
, decl_or_type
);
22264 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
22265 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
22266 parameters as specified in some function type specification (except for
22267 those which appear as part of a function *definition*). */
22270 gen_formal_types_die (tree function_or_method_type
, dw_die_ref context_die
)
22273 tree formal_type
= NULL
;
22274 tree first_parm_type
;
22277 if (TREE_CODE (function_or_method_type
) == FUNCTION_DECL
)
22279 arg
= DECL_ARGUMENTS (function_or_method_type
);
22280 function_or_method_type
= TREE_TYPE (function_or_method_type
);
22285 first_parm_type
= TYPE_ARG_TYPES (function_or_method_type
);
22287 /* Make our first pass over the list of formal parameter types and output a
22288 DW_TAG_formal_parameter DIE for each one. */
22289 for (link
= first_parm_type
; link
; )
22291 dw_die_ref parm_die
;
22293 formal_type
= TREE_VALUE (link
);
22294 if (formal_type
== void_type_node
)
22297 /* Output a (nameless) DIE to represent the formal parameter itself. */
22298 parm_die
= gen_formal_parameter_die (formal_type
, NULL
,
22299 true /* Emit name attribute. */,
22301 if (TREE_CODE (function_or_method_type
) == METHOD_TYPE
22302 && link
== first_parm_type
)
22304 add_AT_flag (parm_die
, DW_AT_artificial
, 1);
22305 if (dwarf_version
>= 3 || !dwarf_strict
)
22306 add_AT_die_ref (context_die
, DW_AT_object_pointer
, parm_die
);
22308 else if (arg
&& DECL_ARTIFICIAL (arg
))
22309 add_AT_flag (parm_die
, DW_AT_artificial
, 1);
22311 link
= TREE_CHAIN (link
);
22313 arg
= DECL_CHAIN (arg
);
22316 /* If this function type has an ellipsis, add a
22317 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
22318 if (formal_type
!= void_type_node
)
22319 gen_unspecified_parameters_die (function_or_method_type
, context_die
);
22321 /* Make our second (and final) pass over the list of formal parameter types
22322 and output DIEs to represent those types (as necessary). */
22323 for (link
= TYPE_ARG_TYPES (function_or_method_type
);
22324 link
&& TREE_VALUE (link
);
22325 link
= TREE_CHAIN (link
))
22326 gen_type_die (TREE_VALUE (link
), context_die
);
22329 /* We want to generate the DIE for TYPE so that we can generate the
22330 die for MEMBER, which has been defined; we will need to refer back
22331 to the member declaration nested within TYPE. If we're trying to
22332 generate minimal debug info for TYPE, processing TYPE won't do the
22333 trick; we need to attach the member declaration by hand. */
22336 gen_type_die_for_member (tree type
, tree member
, dw_die_ref context_die
)
22338 gen_type_die (type
, context_die
);
22340 /* If we're trying to avoid duplicate debug info, we may not have
22341 emitted the member decl for this function. Emit it now. */
22342 if (TYPE_STUB_DECL (type
)
22343 && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type
))
22344 && ! lookup_decl_die (member
))
22346 dw_die_ref type_die
;
22347 gcc_assert (!decl_ultimate_origin (member
));
22349 type_die
= lookup_type_die_strip_naming_typedef (type
);
22350 if (TREE_CODE (member
) == FUNCTION_DECL
)
22351 gen_subprogram_die (member
, type_die
);
22352 else if (TREE_CODE (member
) == FIELD_DECL
)
22354 /* Ignore the nameless fields that are used to skip bits but handle
22355 C++ anonymous unions and structs. */
22356 if (DECL_NAME (member
) != NULL_TREE
22357 || TREE_CODE (TREE_TYPE (member
)) == UNION_TYPE
22358 || TREE_CODE (TREE_TYPE (member
)) == RECORD_TYPE
)
22360 struct vlr_context vlr_ctx
= {
22361 DECL_CONTEXT (member
), /* struct_type */
22362 NULL_TREE
/* variant_part_offset */
22364 gen_type_die (member_declared_type (member
), type_die
);
22365 gen_field_die (member
, &vlr_ctx
, type_die
);
22369 gen_variable_die (member
, NULL_TREE
, type_die
);
22373 /* Forward declare these functions, because they are mutually recursive
22374 with their set_block_* pairing functions. */
22375 static void set_decl_origin_self (tree
);
22377 /* Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
22378 given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
22379 that it points to the node itself, thus indicating that the node is its
22380 own (abstract) origin. Additionally, if the BLOCK_ABSTRACT_ORIGIN for
22381 the given node is NULL, recursively descend the decl/block tree which
22382 it is the root of, and for each other ..._DECL or BLOCK node contained
22383 therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
22384 still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
22385 values to point to themselves. */
22388 set_block_origin_self (tree stmt
)
22390 if (BLOCK_ABSTRACT_ORIGIN (stmt
) == NULL_TREE
)
22392 BLOCK_ABSTRACT_ORIGIN (stmt
) = stmt
;
22397 for (local_decl
= BLOCK_VARS (stmt
);
22398 local_decl
!= NULL_TREE
;
22399 local_decl
= DECL_CHAIN (local_decl
))
22400 /* Do not recurse on nested functions since the inlining status
22401 of parent and child can be different as per the DWARF spec. */
22402 if (TREE_CODE (local_decl
) != FUNCTION_DECL
22403 && !DECL_EXTERNAL (local_decl
))
22404 set_decl_origin_self (local_decl
);
22410 for (subblock
= BLOCK_SUBBLOCKS (stmt
);
22411 subblock
!= NULL_TREE
;
22412 subblock
= BLOCK_CHAIN (subblock
))
22413 set_block_origin_self (subblock
); /* Recurse. */
22418 /* Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
22419 the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
22420 node to so that it points to the node itself, thus indicating that the
22421 node represents its own (abstract) origin. Additionally, if the
22422 DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
22423 the decl/block tree of which the given node is the root of, and for
22424 each other ..._DECL or BLOCK node contained therein whose
22425 DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
22426 set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
22427 point to themselves. */
22430 set_decl_origin_self (tree decl
)
22432 if (DECL_ABSTRACT_ORIGIN (decl
) == NULL_TREE
)
22434 DECL_ABSTRACT_ORIGIN (decl
) = decl
;
22435 if (TREE_CODE (decl
) == FUNCTION_DECL
)
22439 for (arg
= DECL_ARGUMENTS (decl
); arg
; arg
= DECL_CHAIN (arg
))
22440 DECL_ABSTRACT_ORIGIN (arg
) = arg
;
22441 if (DECL_INITIAL (decl
) != NULL_TREE
22442 && DECL_INITIAL (decl
) != error_mark_node
)
22443 set_block_origin_self (DECL_INITIAL (decl
));
22448 /* Mark the early DIE for DECL as the abstract instance. */
22451 dwarf2out_abstract_function (tree decl
)
22453 dw_die_ref old_die
;
22455 /* Make sure we have the actual abstract inline, not a clone. */
22456 decl
= DECL_ORIGIN (decl
);
22458 if (DECL_IGNORED_P (decl
))
22461 /* In LTO we're all set. We already created abstract instances
22462 early and we want to avoid creating a concrete instance of that
22463 if we don't output it. */
22467 old_die
= lookup_decl_die (decl
);
22468 gcc_assert (old_die
!= NULL
);
22469 if (get_AT (old_die
, DW_AT_inline
))
22470 /* We've already generated the abstract instance. */
22473 /* Go ahead and put DW_AT_inline on the DIE. */
22474 if (DECL_DECLARED_INLINE_P (decl
))
22476 if (cgraph_function_possibly_inlined_p (decl
))
22477 add_AT_unsigned (old_die
, DW_AT_inline
, DW_INL_declared_inlined
);
22479 add_AT_unsigned (old_die
, DW_AT_inline
, DW_INL_declared_not_inlined
);
22483 if (cgraph_function_possibly_inlined_p (decl
))
22484 add_AT_unsigned (old_die
, DW_AT_inline
, DW_INL_inlined
);
22486 add_AT_unsigned (old_die
, DW_AT_inline
, DW_INL_not_inlined
);
22489 if (DECL_DECLARED_INLINE_P (decl
)
22490 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl
)))
22491 add_AT_flag (old_die
, DW_AT_artificial
, 1);
22493 set_decl_origin_self (decl
);
22496 /* Helper function of premark_used_types() which gets called through
22499 Marks the DIE of a given type in *SLOT as perennial, so it never gets
22500 marked as unused by prune_unused_types. */
22503 premark_used_types_helper (tree
const &type
, void *)
22507 die
= lookup_type_die (type
);
22509 die
->die_perennial_p
= 1;
22513 /* Helper function of premark_types_used_by_global_vars which gets called
22514 through htab_traverse.
22516 Marks the DIE of a given type in *SLOT as perennial, so it never gets
22517 marked as unused by prune_unused_types. The DIE of the type is marked
22518 only if the global variable using the type will actually be emitted. */
22521 premark_types_used_by_global_vars_helper (types_used_by_vars_entry
**slot
,
22524 struct types_used_by_vars_entry
*entry
;
22527 entry
= (struct types_used_by_vars_entry
*) *slot
;
22528 gcc_assert (entry
->type
!= NULL
22529 && entry
->var_decl
!= NULL
);
22530 die
= lookup_type_die (entry
->type
);
22533 /* Ask cgraph if the global variable really is to be emitted.
22534 If yes, then we'll keep the DIE of ENTRY->TYPE. */
22535 varpool_node
*node
= varpool_node::get (entry
->var_decl
);
22536 if (node
&& node
->definition
)
22538 die
->die_perennial_p
= 1;
22539 /* Keep the parent DIEs as well. */
22540 while ((die
= die
->die_parent
) && die
->die_perennial_p
== 0)
22541 die
->die_perennial_p
= 1;
22547 /* Mark all members of used_types_hash as perennial. */
22550 premark_used_types (struct function
*fun
)
22552 if (fun
&& fun
->used_types_hash
)
22553 fun
->used_types_hash
->traverse
<void *, premark_used_types_helper
> (NULL
);
22556 /* Mark all members of types_used_by_vars_entry as perennial. */
22559 premark_types_used_by_global_vars (void)
22561 if (types_used_by_vars_hash
)
22562 types_used_by_vars_hash
22563 ->traverse
<void *, premark_types_used_by_global_vars_helper
> (NULL
);
22566 /* Generate a DW_TAG_call_site DIE in function DECL under SUBR_DIE
22567 for CA_LOC call arg loc node. */
22570 gen_call_site_die (tree decl
, dw_die_ref subr_die
,
22571 struct call_arg_loc_node
*ca_loc
)
22573 dw_die_ref stmt_die
= NULL
, die
;
22574 tree block
= ca_loc
->block
;
22577 && block
!= DECL_INITIAL (decl
)
22578 && TREE_CODE (block
) == BLOCK
)
22580 stmt_die
= lookup_block_die (block
);
22583 block
= BLOCK_SUPERCONTEXT (block
);
22585 if (stmt_die
== NULL
)
22586 stmt_die
= subr_die
;
22587 die
= new_die (dwarf_TAG (DW_TAG_call_site
), stmt_die
, NULL_TREE
);
22588 add_AT_lbl_id (die
, dwarf_AT (DW_AT_call_return_pc
), ca_loc
->label
);
22589 if (ca_loc
->tail_call_p
)
22590 add_AT_flag (die
, dwarf_AT (DW_AT_call_tail_call
), 1);
22591 if (ca_loc
->symbol_ref
)
22593 dw_die_ref tdie
= lookup_decl_die (SYMBOL_REF_DECL (ca_loc
->symbol_ref
));
22595 add_AT_die_ref (die
, dwarf_AT (DW_AT_call_origin
), tdie
);
22597 add_AT_addr (die
, dwarf_AT (DW_AT_call_origin
), ca_loc
->symbol_ref
,
22603 /* Generate a DIE to represent a declared function (either file-scope or
22607 gen_subprogram_die (tree decl
, dw_die_ref context_die
)
22609 tree origin
= decl_ultimate_origin (decl
);
22610 dw_die_ref subr_die
;
22611 dw_die_ref old_die
= lookup_decl_die (decl
);
22613 /* This function gets called multiple times for different stages of
22614 the debug process. For example, for func() in this code:
22618 void func() { ... }
22621 ...we get called 4 times. Twice in early debug and twice in
22627 1. Once while generating func() within the namespace. This is
22628 the declaration. The declaration bit below is set, as the
22629 context is the namespace.
22631 A new DIE will be generated with DW_AT_declaration set.
22633 2. Once for func() itself. This is the specification. The
22634 declaration bit below is clear as the context is the CU.
22636 We will use the cached DIE from (1) to create a new DIE with
22637 DW_AT_specification pointing to the declaration in (1).
22639 Late debug via rest_of_handle_final()
22640 -------------------------------------
22642 3. Once generating func() within the namespace. This is also the
22643 declaration, as in (1), but this time we will early exit below
22644 as we have a cached DIE and a declaration needs no additional
22645 annotations (no locations), as the source declaration line
22648 4. Once for func() itself. As in (2), this is the specification,
22649 but this time we will re-use the cached DIE, and just annotate
22650 it with the location information that should now be available.
22652 For something without namespaces, but with abstract instances, we
22653 are also called a multiple times:
22658 Base (); // constructor declaration (1)
22661 Base::Base () { } // constructor specification (2)
22666 1. Once for the Base() constructor by virtue of it being a
22667 member of the Base class. This is done via
22668 rest_of_type_compilation.
22670 This is a declaration, so a new DIE will be created with
22673 2. Once for the Base() constructor definition, but this time
22674 while generating the abstract instance of the base
22675 constructor (__base_ctor) which is being generated via early
22676 debug of reachable functions.
22678 Even though we have a cached version of the declaration (1),
22679 we will create a DW_AT_specification of the declaration DIE
22682 3. Once for the __base_ctor itself, but this time, we generate
22683 an DW_AT_abstract_origin version of the DW_AT_specification in
22686 Late debug via rest_of_handle_final
22687 -----------------------------------
22689 4. One final time for the __base_ctor (which will have a cached
22690 DIE with DW_AT_abstract_origin created in (3). This time,
22691 we will just annotate the location information now
22694 int declaration
= (current_function_decl
!= decl
22695 || class_or_namespace_scope_p (context_die
));
22697 /* A declaration that has been previously dumped needs no
22698 additional information. */
22699 if (old_die
&& declaration
)
22702 /* Now that the C++ front end lazily declares artificial member fns, we
22703 might need to retrofit the declaration into its class. */
22704 if (!declaration
&& !origin
&& !old_die
22705 && DECL_CONTEXT (decl
) && TYPE_P (DECL_CONTEXT (decl
))
22706 && !class_or_namespace_scope_p (context_die
)
22707 && debug_info_level
> DINFO_LEVEL_TERSE
)
22708 old_die
= force_decl_die (decl
);
22710 /* A concrete instance, tag a new DIE with DW_AT_abstract_origin. */
22711 if (origin
!= NULL
)
22713 gcc_assert (!declaration
|| local_scope_p (context_die
));
22715 /* Fixup die_parent for the abstract instance of a nested
22716 inline function. */
22717 if (old_die
&& old_die
->die_parent
== NULL
)
22718 add_child_die (context_die
, old_die
);
22720 if (old_die
&& get_AT_ref (old_die
, DW_AT_abstract_origin
))
22722 /* If we have a DW_AT_abstract_origin we have a working
22724 subr_die
= old_die
;
22728 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
22729 add_abstract_origin_attribute (subr_die
, origin
);
22730 /* This is where the actual code for a cloned function is.
22731 Let's emit linkage name attribute for it. This helps
22732 debuggers to e.g, set breakpoints into
22733 constructors/destructors when the user asks "break
22735 add_linkage_name (subr_die
, decl
);
22738 /* A cached copy, possibly from early dwarf generation. Reuse as
22739 much as possible. */
22742 if (!get_AT_flag (old_die
, DW_AT_declaration
)
22743 /* We can have a normal definition following an inline one in the
22744 case of redefinition of GNU C extern inlines.
22745 It seems reasonable to use AT_specification in this case. */
22746 && !get_AT (old_die
, DW_AT_inline
))
22748 /* Detect and ignore this case, where we are trying to output
22749 something we have already output. */
22750 if (get_AT (old_die
, DW_AT_low_pc
)
22751 || get_AT (old_die
, DW_AT_ranges
))
22754 /* If we have no location information, this must be a
22755 partially generated DIE from early dwarf generation.
22756 Fall through and generate it. */
22759 /* If the definition comes from the same place as the declaration,
22760 maybe use the old DIE. We always want the DIE for this function
22761 that has the *_pc attributes to be under comp_unit_die so the
22762 debugger can find it. We also need to do this for abstract
22763 instances of inlines, since the spec requires the out-of-line copy
22764 to have the same parent. For local class methods, this doesn't
22765 apply; we just use the old DIE. */
22766 expanded_location s
= expand_location (DECL_SOURCE_LOCATION (decl
));
22767 struct dwarf_file_data
* file_index
= lookup_filename (s
.file
);
22768 if (((is_unit_die (old_die
->die_parent
)
22769 /* This condition fixes the inconsistency/ICE with the
22770 following Fortran test (or some derivative thereof) while
22771 building libgfortran:
22775 logical function funky (FLAG)
22780 || (old_die
->die_parent
22781 && old_die
->die_parent
->die_tag
== DW_TAG_module
)
22782 || local_scope_p (old_die
->die_parent
)
22783 || context_die
== NULL
)
22784 && (DECL_ARTIFICIAL (decl
)
22785 || (get_AT_file (old_die
, DW_AT_decl_file
) == file_index
22786 && (get_AT_unsigned (old_die
, DW_AT_decl_line
)
22787 == (unsigned) s
.line
)
22788 && (!debug_column_info
22790 || (get_AT_unsigned (old_die
, DW_AT_decl_column
)
22791 == (unsigned) s
.column
)))))
22792 /* With LTO if there's an abstract instance for
22793 the old DIE, this is a concrete instance and
22794 thus re-use the DIE. */
22795 || get_AT (old_die
, DW_AT_abstract_origin
))
22797 subr_die
= old_die
;
22799 /* Clear out the declaration attribute, but leave the
22800 parameters so they can be augmented with location
22801 information later. Unless this was a declaration, in
22802 which case, wipe out the nameless parameters and recreate
22803 them further down. */
22804 if (remove_AT (subr_die
, DW_AT_declaration
))
22807 remove_AT (subr_die
, DW_AT_object_pointer
);
22808 remove_child_TAG (subr_die
, DW_TAG_formal_parameter
);
22811 /* Make a specification pointing to the previously built
22815 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
22816 add_AT_specification (subr_die
, old_die
);
22817 add_pubname (decl
, subr_die
);
22818 if (get_AT_file (old_die
, DW_AT_decl_file
) != file_index
)
22819 add_AT_file (subr_die
, DW_AT_decl_file
, file_index
);
22820 if (get_AT_unsigned (old_die
, DW_AT_decl_line
) != (unsigned) s
.line
)
22821 add_AT_unsigned (subr_die
, DW_AT_decl_line
, s
.line
);
22822 if (debug_column_info
22824 && (get_AT_unsigned (old_die
, DW_AT_decl_column
)
22825 != (unsigned) s
.column
))
22826 add_AT_unsigned (subr_die
, DW_AT_decl_column
, s
.column
);
22828 /* If the prototype had an 'auto' or 'decltype(auto)' return type,
22829 emit the real type on the definition die. */
22830 if (is_cxx () && debug_info_level
> DINFO_LEVEL_TERSE
)
22832 dw_die_ref die
= get_AT_ref (old_die
, DW_AT_type
);
22833 if (die
== auto_die
|| die
== decltype_auto_die
)
22834 add_type_attribute (subr_die
, TREE_TYPE (TREE_TYPE (decl
)),
22835 TYPE_UNQUALIFIED
, false, context_die
);
22838 /* When we process the method declaration, we haven't seen
22839 the out-of-class defaulted definition yet, so we have to
22841 if ((dwarf_version
>= 5 || ! dwarf_strict
)
22842 && !get_AT (subr_die
, DW_AT_defaulted
))
22845 = lang_hooks
.decls
.decl_dwarf_attribute (decl
,
22847 if (defaulted
!= -1)
22849 /* Other values must have been handled before. */
22850 gcc_assert (defaulted
== DW_DEFAULTED_out_of_class
);
22851 add_AT_unsigned (subr_die
, DW_AT_defaulted
, defaulted
);
22856 /* Create a fresh DIE for anything else. */
22859 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
22861 if (TREE_PUBLIC (decl
))
22862 add_AT_flag (subr_die
, DW_AT_external
, 1);
22864 add_name_and_src_coords_attributes (subr_die
, decl
);
22865 add_pubname (decl
, subr_die
);
22866 if (debug_info_level
> DINFO_LEVEL_TERSE
)
22868 add_prototyped_attribute (subr_die
, TREE_TYPE (decl
));
22869 add_type_attribute (subr_die
, TREE_TYPE (TREE_TYPE (decl
)),
22870 TYPE_UNQUALIFIED
, false, context_die
);
22873 add_pure_or_virtual_attribute (subr_die
, decl
);
22874 if (DECL_ARTIFICIAL (decl
))
22875 add_AT_flag (subr_die
, DW_AT_artificial
, 1);
22877 if (TREE_THIS_VOLATILE (decl
) && (dwarf_version
>= 5 || !dwarf_strict
))
22878 add_AT_flag (subr_die
, DW_AT_noreturn
, 1);
22880 add_alignment_attribute (subr_die
, decl
);
22882 add_accessibility_attribute (subr_die
, decl
);
22885 /* Unless we have an existing non-declaration DIE, equate the new
22887 if (!old_die
|| is_declaration_die (old_die
))
22888 equate_decl_number_to_die (decl
, subr_die
);
22892 if (!old_die
|| !get_AT (old_die
, DW_AT_inline
))
22894 add_AT_flag (subr_die
, DW_AT_declaration
, 1);
22896 /* If this is an explicit function declaration then generate
22897 a DW_AT_explicit attribute. */
22898 if ((dwarf_version
>= 3 || !dwarf_strict
)
22899 && lang_hooks
.decls
.decl_dwarf_attribute (decl
,
22900 DW_AT_explicit
) == 1)
22901 add_AT_flag (subr_die
, DW_AT_explicit
, 1);
22903 /* If this is a C++11 deleted special function member then generate
22904 a DW_AT_deleted attribute. */
22905 if ((dwarf_version
>= 5 || !dwarf_strict
)
22906 && lang_hooks
.decls
.decl_dwarf_attribute (decl
,
22907 DW_AT_deleted
) == 1)
22908 add_AT_flag (subr_die
, DW_AT_deleted
, 1);
22910 /* If this is a C++11 defaulted special function member then
22911 generate a DW_AT_defaulted attribute. */
22912 if (dwarf_version
>= 5 || !dwarf_strict
)
22915 = lang_hooks
.decls
.decl_dwarf_attribute (decl
,
22917 if (defaulted
!= -1)
22918 add_AT_unsigned (subr_die
, DW_AT_defaulted
, defaulted
);
22921 /* If this is a C++11 non-static member function with & ref-qualifier
22922 then generate a DW_AT_reference attribute. */
22923 if ((dwarf_version
>= 5 || !dwarf_strict
)
22924 && lang_hooks
.decls
.decl_dwarf_attribute (decl
,
22925 DW_AT_reference
) == 1)
22926 add_AT_flag (subr_die
, DW_AT_reference
, 1);
22928 /* If this is a C++11 non-static member function with &&
22929 ref-qualifier then generate a DW_AT_reference attribute. */
22930 if ((dwarf_version
>= 5 || !dwarf_strict
)
22931 && lang_hooks
.decls
.decl_dwarf_attribute (decl
,
22932 DW_AT_rvalue_reference
)
22934 add_AT_flag (subr_die
, DW_AT_rvalue_reference
, 1);
22937 /* For non DECL_EXTERNALs, if range information is available, fill
22938 the DIE with it. */
22939 else if (!DECL_EXTERNAL (decl
) && !early_dwarf
)
22941 HOST_WIDE_INT cfa_fb_offset
;
22943 struct function
*fun
= DECL_STRUCT_FUNCTION (decl
);
22945 if (!crtl
->has_bb_partition
)
22947 dw_fde_ref fde
= fun
->fde
;
22948 if (fde
->dw_fde_begin
)
22950 /* We have already generated the labels. */
22951 add_AT_low_high_pc (subr_die
, fde
->dw_fde_begin
,
22952 fde
->dw_fde_end
, false);
22956 /* Create start/end labels and add the range. */
22957 char label_id_low
[MAX_ARTIFICIAL_LABEL_BYTES
];
22958 char label_id_high
[MAX_ARTIFICIAL_LABEL_BYTES
];
22959 ASM_GENERATE_INTERNAL_LABEL (label_id_low
, FUNC_BEGIN_LABEL
,
22960 current_function_funcdef_no
);
22961 ASM_GENERATE_INTERNAL_LABEL (label_id_high
, FUNC_END_LABEL
,
22962 current_function_funcdef_no
);
22963 add_AT_low_high_pc (subr_die
, label_id_low
, label_id_high
,
22967 #if VMS_DEBUGGING_INFO
22968 /* HP OpenVMS Industry Standard 64: DWARF Extensions
22969 Section 2.3 Prologue and Epilogue Attributes:
22970 When a breakpoint is set on entry to a function, it is generally
22971 desirable for execution to be suspended, not on the very first
22972 instruction of the function, but rather at a point after the
22973 function's frame has been set up, after any language defined local
22974 declaration processing has been completed, and before execution of
22975 the first statement of the function begins. Debuggers generally
22976 cannot properly determine where this point is. Similarly for a
22977 breakpoint set on exit from a function. The prologue and epilogue
22978 attributes allow a compiler to communicate the location(s) to use. */
22981 if (fde
->dw_fde_vms_end_prologue
)
22982 add_AT_vms_delta (subr_die
, DW_AT_HP_prologue
,
22983 fde
->dw_fde_begin
, fde
->dw_fde_vms_end_prologue
);
22985 if (fde
->dw_fde_vms_begin_epilogue
)
22986 add_AT_vms_delta (subr_die
, DW_AT_HP_epilogue
,
22987 fde
->dw_fde_begin
, fde
->dw_fde_vms_begin_epilogue
);
22994 /* Generate pubnames entries for the split function code ranges. */
22995 dw_fde_ref fde
= fun
->fde
;
22997 if (fde
->dw_fde_second_begin
)
22999 if (dwarf_version
>= 3 || !dwarf_strict
)
23001 /* We should use ranges for non-contiguous code section
23002 addresses. Use the actual code range for the initial
23003 section, since the HOT/COLD labels might precede an
23004 alignment offset. */
23005 bool range_list_added
= false;
23006 add_ranges_by_labels (subr_die
, fde
->dw_fde_begin
,
23007 fde
->dw_fde_end
, &range_list_added
,
23009 add_ranges_by_labels (subr_die
, fde
->dw_fde_second_begin
,
23010 fde
->dw_fde_second_end
,
23011 &range_list_added
, false);
23012 if (range_list_added
)
23017 /* There is no real support in DW2 for this .. so we make
23018 a work-around. First, emit the pub name for the segment
23019 containing the function label. Then make and emit a
23020 simplified subprogram DIE for the second segment with the
23021 name pre-fixed by __hot/cold_sect_of_. We use the same
23022 linkage name for the second die so that gdb will find both
23023 sections when given "b foo". */
23024 const char *name
= NULL
;
23025 tree decl_name
= DECL_NAME (decl
);
23026 dw_die_ref seg_die
;
23028 /* Do the 'primary' section. */
23029 add_AT_low_high_pc (subr_die
, fde
->dw_fde_begin
,
23030 fde
->dw_fde_end
, false);
23032 /* Build a minimal DIE for the secondary section. */
23033 seg_die
= new_die (DW_TAG_subprogram
,
23034 subr_die
->die_parent
, decl
);
23036 if (TREE_PUBLIC (decl
))
23037 add_AT_flag (seg_die
, DW_AT_external
, 1);
23039 if (decl_name
!= NULL
23040 && IDENTIFIER_POINTER (decl_name
) != NULL
)
23042 name
= dwarf2_name (decl
, 1);
23043 if (! DECL_ARTIFICIAL (decl
))
23044 add_src_coords_attributes (seg_die
, decl
);
23046 add_linkage_name (seg_die
, decl
);
23048 gcc_assert (name
!= NULL
);
23049 add_pure_or_virtual_attribute (seg_die
, decl
);
23050 if (DECL_ARTIFICIAL (decl
))
23051 add_AT_flag (seg_die
, DW_AT_artificial
, 1);
23053 name
= concat ("__second_sect_of_", name
, NULL
);
23054 add_AT_low_high_pc (seg_die
, fde
->dw_fde_second_begin
,
23055 fde
->dw_fde_second_end
, false);
23056 add_name_attribute (seg_die
, name
);
23057 if (want_pubnames ())
23058 add_pubname_string (name
, seg_die
);
23062 add_AT_low_high_pc (subr_die
, fde
->dw_fde_begin
, fde
->dw_fde_end
,
23066 cfa_fb_offset
= CFA_FRAME_BASE_OFFSET (decl
);
23068 /* We define the "frame base" as the function's CFA. This is more
23069 convenient for several reasons: (1) It's stable across the prologue
23070 and epilogue, which makes it better than just a frame pointer,
23071 (2) With dwarf3, there exists a one-byte encoding that allows us
23072 to reference the .debug_frame data by proxy, but failing that,
23073 (3) We can at least reuse the code inspection and interpretation
23074 code that determines the CFA position at various points in the
23076 if (dwarf_version
>= 3 && targetm
.debug_unwind_info () == UI_DWARF2
)
23078 dw_loc_descr_ref op
= new_loc_descr (DW_OP_call_frame_cfa
, 0, 0);
23079 add_AT_loc (subr_die
, DW_AT_frame_base
, op
);
23083 dw_loc_list_ref list
= convert_cfa_to_fb_loc_list (cfa_fb_offset
);
23084 if (list
->dw_loc_next
)
23085 add_AT_loc_list (subr_die
, DW_AT_frame_base
, list
);
23087 add_AT_loc (subr_die
, DW_AT_frame_base
, list
->expr
);
23090 /* Compute a displacement from the "steady-state frame pointer" to
23091 the CFA. The former is what all stack slots and argument slots
23092 will reference in the rtl; the latter is what we've told the
23093 debugger about. We'll need to adjust all frame_base references
23094 by this displacement. */
23095 compute_frame_pointer_to_fb_displacement (cfa_fb_offset
);
23097 if (fun
->static_chain_decl
)
23099 /* DWARF requires here a location expression that computes the
23100 address of the enclosing subprogram's frame base. The machinery
23101 in tree-nested.c is supposed to store this specific address in the
23102 last field of the FRAME record. */
23103 const tree frame_type
23104 = TREE_TYPE (TREE_TYPE (fun
->static_chain_decl
));
23105 const tree fb_decl
= tree_last (TYPE_FIELDS (frame_type
));
23108 = build1 (INDIRECT_REF
, frame_type
, fun
->static_chain_decl
);
23109 fb_expr
= build3 (COMPONENT_REF
, TREE_TYPE (fb_decl
),
23110 fb_expr
, fb_decl
, NULL_TREE
);
23112 add_AT_location_description (subr_die
, DW_AT_static_link
,
23113 loc_list_from_tree (fb_expr
, 0, NULL
));
23116 resolve_variable_values ();
23119 /* Generate child dies for template paramaters. */
23120 if (early_dwarf
&& debug_info_level
> DINFO_LEVEL_TERSE
)
23121 gen_generic_params_dies (decl
);
23123 /* Now output descriptions of the arguments for this function. This gets
23124 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
23125 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
23126 `...' at the end of the formal parameter list. In order to find out if
23127 there was a trailing ellipsis or not, we must instead look at the type
23128 associated with the FUNCTION_DECL. This will be a node of type
23129 FUNCTION_TYPE. If the chain of type nodes hanging off of this
23130 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
23131 an ellipsis at the end. */
23133 /* In the case where we are describing a mere function declaration, all we
23134 need to do here (and all we *can* do here) is to describe the *types* of
23135 its formal parameters. */
23136 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
23138 else if (declaration
)
23139 gen_formal_types_die (decl
, subr_die
);
23142 /* Generate DIEs to represent all known formal parameters. */
23143 tree parm
= DECL_ARGUMENTS (decl
);
23144 tree generic_decl
= early_dwarf
23145 ? lang_hooks
.decls
.get_generic_function_decl (decl
) : NULL
;
23146 tree generic_decl_parm
= generic_decl
23147 ? DECL_ARGUMENTS (generic_decl
)
23150 /* Now we want to walk the list of parameters of the function and
23151 emit their relevant DIEs.
23153 We consider the case of DECL being an instance of a generic function
23154 as well as it being a normal function.
23156 If DECL is an instance of a generic function we walk the
23157 parameters of the generic function declaration _and_ the parameters of
23158 DECL itself. This is useful because we want to emit specific DIEs for
23159 function parameter packs and those are declared as part of the
23160 generic function declaration. In that particular case,
23161 the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
23162 That DIE has children DIEs representing the set of arguments
23163 of the pack. Note that the set of pack arguments can be empty.
23164 In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
23167 Otherwise, we just consider the parameters of DECL. */
23168 while (generic_decl_parm
|| parm
)
23170 if (generic_decl_parm
23171 && lang_hooks
.function_parameter_pack_p (generic_decl_parm
))
23172 gen_formal_parameter_pack_die (generic_decl_parm
,
23177 dw_die_ref parm_die
= gen_decl_die (parm
, NULL
, NULL
, subr_die
);
23180 && parm
== DECL_ARGUMENTS (decl
)
23181 && TREE_CODE (TREE_TYPE (decl
)) == METHOD_TYPE
23183 && (dwarf_version
>= 3 || !dwarf_strict
))
23184 add_AT_die_ref (subr_die
, DW_AT_object_pointer
, parm_die
);
23186 parm
= DECL_CHAIN (parm
);
23189 parm
= DECL_CHAIN (parm
);
23191 if (generic_decl_parm
)
23192 generic_decl_parm
= DECL_CHAIN (generic_decl_parm
);
23195 /* Decide whether we need an unspecified_parameters DIE at the end.
23196 There are 2 more cases to do this for: 1) the ansi ... declaration -
23197 this is detectable when the end of the arg list is not a
23198 void_type_node 2) an unprototyped function declaration (not a
23199 definition). This just means that we have no info about the
23200 parameters at all. */
23203 if (prototype_p (TREE_TYPE (decl
)))
23205 /* This is the prototyped case, check for.... */
23206 if (stdarg_p (TREE_TYPE (decl
)))
23207 gen_unspecified_parameters_die (decl
, subr_die
);
23209 else if (DECL_INITIAL (decl
) == NULL_TREE
)
23210 gen_unspecified_parameters_die (decl
, subr_die
);
23214 if (subr_die
!= old_die
)
23215 /* Add the calling convention attribute if requested. */
23216 add_calling_convention_attribute (subr_die
, decl
);
23218 /* Output Dwarf info for all of the stuff within the body of the function
23219 (if it has one - it may be just a declaration).
23221 OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
23222 a function. This BLOCK actually represents the outermost binding contour
23223 for the function, i.e. the contour in which the function's formal
23224 parameters and labels get declared. Curiously, it appears that the front
23225 end doesn't actually put the PARM_DECL nodes for the current function onto
23226 the BLOCK_VARS list for this outer scope, but are strung off of the
23227 DECL_ARGUMENTS list for the function instead.
23229 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
23230 the LABEL_DECL nodes for the function however, and we output DWARF info
23231 for those in decls_for_scope. Just within the `outer_scope' there will be
23232 a BLOCK node representing the function's outermost pair of curly braces,
23233 and any blocks used for the base and member initializers of a C++
23234 constructor function. */
23235 tree outer_scope
= DECL_INITIAL (decl
);
23236 if (! declaration
&& outer_scope
&& TREE_CODE (outer_scope
) != ERROR_MARK
)
23238 int call_site_note_count
= 0;
23239 int tail_call_site_note_count
= 0;
23241 /* Emit a DW_TAG_variable DIE for a named return value. */
23242 if (DECL_NAME (DECL_RESULT (decl
)))
23243 gen_decl_die (DECL_RESULT (decl
), NULL
, NULL
, subr_die
);
23245 /* The first time through decls_for_scope we will generate the
23246 DIEs for the locals. The second time, we fill in the
23248 decls_for_scope (outer_scope
, subr_die
);
23250 if (call_arg_locations
&& (!dwarf_strict
|| dwarf_version
>= 5))
23252 struct call_arg_loc_node
*ca_loc
;
23253 for (ca_loc
= call_arg_locations
; ca_loc
; ca_loc
= ca_loc
->next
)
23255 dw_die_ref die
= NULL
;
23256 rtx tloc
= NULL_RTX
, tlocc
= NULL_RTX
;
23258 tree arg_decl
= NULL_TREE
;
23260 for (arg
= (ca_loc
->call_arg_loc_note
!= NULL_RTX
23261 ? XEXP (ca_loc
->call_arg_loc_note
, 0)
23263 arg
; arg
= next_arg
)
23265 dw_loc_descr_ref reg
, val
;
23266 machine_mode mode
= GET_MODE (XEXP (XEXP (arg
, 0), 1));
23267 dw_die_ref cdie
, tdie
= NULL
;
23269 next_arg
= XEXP (arg
, 1);
23270 if (REG_P (XEXP (XEXP (arg
, 0), 0))
23272 && MEM_P (XEXP (XEXP (next_arg
, 0), 0))
23273 && REG_P (XEXP (XEXP (XEXP (next_arg
, 0), 0), 0))
23274 && REGNO (XEXP (XEXP (arg
, 0), 0))
23275 == REGNO (XEXP (XEXP (XEXP (next_arg
, 0), 0), 0)))
23276 next_arg
= XEXP (next_arg
, 1);
23277 if (mode
== VOIDmode
)
23279 mode
= GET_MODE (XEXP (XEXP (arg
, 0), 0));
23280 if (mode
== VOIDmode
)
23281 mode
= GET_MODE (XEXP (arg
, 0));
23283 if (mode
== VOIDmode
|| mode
== BLKmode
)
23285 /* Get dynamic information about call target only if we
23286 have no static information: we cannot generate both
23287 DW_AT_call_origin and DW_AT_call_target
23289 if (ca_loc
->symbol_ref
== NULL_RTX
)
23291 if (XEXP (XEXP (arg
, 0), 0) == pc_rtx
)
23293 tloc
= XEXP (XEXP (arg
, 0), 1);
23296 else if (GET_CODE (XEXP (XEXP (arg
, 0), 0)) == CLOBBER
23297 && XEXP (XEXP (XEXP (arg
, 0), 0), 0) == pc_rtx
)
23299 tlocc
= XEXP (XEXP (arg
, 0), 1);
23304 if (REG_P (XEXP (XEXP (arg
, 0), 0)))
23305 reg
= reg_loc_descriptor (XEXP (XEXP (arg
, 0), 0),
23306 VAR_INIT_STATUS_INITIALIZED
);
23307 else if (MEM_P (XEXP (XEXP (arg
, 0), 0)))
23309 rtx mem
= XEXP (XEXP (arg
, 0), 0);
23310 reg
= mem_loc_descriptor (XEXP (mem
, 0),
23311 get_address_mode (mem
),
23313 VAR_INIT_STATUS_INITIALIZED
);
23315 else if (GET_CODE (XEXP (XEXP (arg
, 0), 0))
23316 == DEBUG_PARAMETER_REF
)
23319 = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg
, 0), 0));
23320 tdie
= lookup_decl_die (tdecl
);
23328 && GET_CODE (XEXP (XEXP (arg
, 0), 0))
23329 != DEBUG_PARAMETER_REF
)
23331 val
= mem_loc_descriptor (XEXP (XEXP (arg
, 0), 1), mode
,
23333 VAR_INIT_STATUS_INITIALIZED
);
23337 die
= gen_call_site_die (decl
, subr_die
, ca_loc
);
23338 cdie
= new_die (dwarf_TAG (DW_TAG_call_site_parameter
), die
,
23340 add_desc_attribute (cdie
, arg_decl
);
23342 add_AT_loc (cdie
, DW_AT_location
, reg
);
23343 else if (tdie
!= NULL
)
23344 add_AT_die_ref (cdie
, dwarf_AT (DW_AT_call_parameter
),
23346 add_AT_loc (cdie
, dwarf_AT (DW_AT_call_value
), val
);
23347 if (next_arg
!= XEXP (arg
, 1))
23349 mode
= GET_MODE (XEXP (XEXP (XEXP (arg
, 1), 0), 1));
23350 if (mode
== VOIDmode
)
23351 mode
= GET_MODE (XEXP (XEXP (XEXP (arg
, 1), 0), 0));
23352 val
= mem_loc_descriptor (XEXP (XEXP (XEXP (arg
, 1),
23355 VAR_INIT_STATUS_INITIALIZED
);
23357 add_AT_loc (cdie
, dwarf_AT (DW_AT_call_data_value
),
23362 && (ca_loc
->symbol_ref
|| tloc
))
23363 die
= gen_call_site_die (decl
, subr_die
, ca_loc
);
23364 if (die
!= NULL
&& (tloc
!= NULL_RTX
|| tlocc
!= NULL_RTX
))
23366 dw_loc_descr_ref tval
= NULL
;
23368 if (tloc
!= NULL_RTX
)
23369 tval
= mem_loc_descriptor (tloc
,
23370 GET_MODE (tloc
) == VOIDmode
23371 ? Pmode
: GET_MODE (tloc
),
23373 VAR_INIT_STATUS_INITIALIZED
);
23375 add_AT_loc (die
, dwarf_AT (DW_AT_call_target
), tval
);
23376 else if (tlocc
!= NULL_RTX
)
23378 tval
= mem_loc_descriptor (tlocc
,
23379 GET_MODE (tlocc
) == VOIDmode
23380 ? Pmode
: GET_MODE (tlocc
),
23382 VAR_INIT_STATUS_INITIALIZED
);
23385 dwarf_AT (DW_AT_call_target_clobbered
),
23391 call_site_note_count
++;
23392 if (ca_loc
->tail_call_p
)
23393 tail_call_site_note_count
++;
23397 call_arg_locations
= NULL
;
23398 call_arg_loc_last
= NULL
;
23399 if (tail_call_site_count
>= 0
23400 && tail_call_site_count
== tail_call_site_note_count
23401 && (!dwarf_strict
|| dwarf_version
>= 5))
23403 if (call_site_count
>= 0
23404 && call_site_count
== call_site_note_count
)
23405 add_AT_flag (subr_die
, dwarf_AT (DW_AT_call_all_calls
), 1);
23407 add_AT_flag (subr_die
, dwarf_AT (DW_AT_call_all_tail_calls
), 1);
23409 call_site_count
= -1;
23410 tail_call_site_count
= -1;
23413 /* Mark used types after we have created DIEs for the functions scopes. */
23414 premark_used_types (DECL_STRUCT_FUNCTION (decl
));
23417 /* Returns a hash value for X (which really is a die_struct). */
23420 block_die_hasher::hash (die_struct
*d
)
23422 return (hashval_t
) d
->decl_id
^ htab_hash_pointer (d
->die_parent
);
23425 /* Return nonzero if decl_id and die_parent of die_struct X is the same
23426 as decl_id and die_parent of die_struct Y. */
23429 block_die_hasher::equal (die_struct
*x
, die_struct
*y
)
23431 return x
->decl_id
== y
->decl_id
&& x
->die_parent
== y
->die_parent
;
23434 /* Hold information about markers for inlined entry points. */
23435 struct GTY ((for_user
)) inline_entry_data
23437 /* The block that's the inlined_function_outer_scope for an inlined
23441 /* The label at the inlined entry point. */
23442 const char *label_pfx
;
23443 unsigned int label_num
;
23445 /* The view number to be used as the inlined entry point. */
23449 struct inline_entry_data_hasher
: ggc_ptr_hash
<inline_entry_data
>
23451 typedef tree compare_type
;
23452 static inline hashval_t
hash (const inline_entry_data
*);
23453 static inline bool equal (const inline_entry_data
*, const_tree
);
23456 /* Hash table routines for inline_entry_data. */
23459 inline_entry_data_hasher::hash (const inline_entry_data
*data
)
23461 return htab_hash_pointer (data
->block
);
23465 inline_entry_data_hasher::equal (const inline_entry_data
*data
,
23468 return data
->block
== block
;
23471 /* Inlined entry points pending DIE creation in this compilation unit. */
23473 static GTY(()) hash_table
<inline_entry_data_hasher
> *inline_entry_data_table
;
23476 /* Return TRUE if DECL, which may have been previously generated as
23477 OLD_DIE, is a candidate for a DW_AT_specification. DECLARATION is
23478 true if decl (or its origin) is either an extern declaration or a
23479 class/namespace scoped declaration.
23481 The declare_in_namespace support causes us to get two DIEs for one
23482 variable, both of which are declarations. We want to avoid
23483 considering one to be a specification, so we must test for
23484 DECLARATION and DW_AT_declaration. */
23486 decl_will_get_specification_p (dw_die_ref old_die
, tree decl
, bool declaration
)
23488 return (old_die
&& TREE_STATIC (decl
) && !declaration
23489 && get_AT_flag (old_die
, DW_AT_declaration
) == 1);
23492 /* Return true if DECL is a local static. */
23495 local_function_static (tree decl
)
23497 gcc_assert (VAR_P (decl
));
23498 return TREE_STATIC (decl
)
23499 && DECL_CONTEXT (decl
)
23500 && TREE_CODE (DECL_CONTEXT (decl
)) == FUNCTION_DECL
;
23503 /* Generate a DIE to represent a declared data object.
23504 Either DECL or ORIGIN must be non-null. */
23507 gen_variable_die (tree decl
, tree origin
, dw_die_ref context_die
)
23509 HOST_WIDE_INT off
= 0;
23511 tree decl_or_origin
= decl
? decl
: origin
;
23512 tree ultimate_origin
;
23513 dw_die_ref var_die
;
23514 dw_die_ref old_die
= decl
? lookup_decl_die (decl
) : NULL
;
23515 bool declaration
= (DECL_EXTERNAL (decl_or_origin
)
23516 || class_or_namespace_scope_p (context_die
));
23517 bool specialization_p
= false;
23518 bool no_linkage_name
= false;
23520 /* While C++ inline static data members have definitions inside of the
23521 class, force the first DIE to be a declaration, then let gen_member_die
23522 reparent it to the class context and call gen_variable_die again
23523 to create the outside of the class DIE for the definition. */
23527 && DECL_CONTEXT (decl
)
23528 && TYPE_P (DECL_CONTEXT (decl
))
23529 && lang_hooks
.decls
.decl_dwarf_attribute (decl
, DW_AT_inline
) != -1)
23531 declaration
= true;
23532 if (dwarf_version
< 5)
23533 no_linkage_name
= true;
23536 ultimate_origin
= decl_ultimate_origin (decl_or_origin
);
23537 if (decl
|| ultimate_origin
)
23538 origin
= ultimate_origin
;
23539 com_decl
= fortran_common (decl_or_origin
, &off
);
23541 /* Symbol in common gets emitted as a child of the common block, in the form
23542 of a data member. */
23545 dw_die_ref com_die
;
23546 dw_loc_list_ref loc
= NULL
;
23547 die_node com_die_arg
;
23549 var_die
= lookup_decl_die (decl_or_origin
);
23552 if (! early_dwarf
&& get_AT (var_die
, DW_AT_location
) == NULL
)
23554 loc
= loc_list_from_tree (com_decl
, off
? 1 : 2, NULL
);
23559 /* Optimize the common case. */
23560 if (single_element_loc_list_p (loc
)
23561 && loc
->expr
->dw_loc_opc
== DW_OP_addr
23562 && loc
->expr
->dw_loc_next
== NULL
23563 && GET_CODE (loc
->expr
->dw_loc_oprnd1
.v
.val_addr
)
23566 rtx x
= loc
->expr
->dw_loc_oprnd1
.v
.val_addr
;
23567 loc
->expr
->dw_loc_oprnd1
.v
.val_addr
23568 = plus_constant (GET_MODE (x
), x
, off
);
23571 loc_list_plus_const (loc
, off
);
23573 add_AT_location_description (var_die
, DW_AT_location
, loc
);
23574 remove_AT (var_die
, DW_AT_declaration
);
23580 if (common_block_die_table
== NULL
)
23581 common_block_die_table
= hash_table
<block_die_hasher
>::create_ggc (10);
23583 com_die_arg
.decl_id
= DECL_UID (com_decl
);
23584 com_die_arg
.die_parent
= context_die
;
23585 com_die
= common_block_die_table
->find (&com_die_arg
);
23587 loc
= loc_list_from_tree (com_decl
, 2, NULL
);
23588 if (com_die
== NULL
)
23591 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl
));
23594 com_die
= new_die (DW_TAG_common_block
, context_die
, decl
);
23595 add_name_and_src_coords_attributes (com_die
, com_decl
);
23598 add_AT_location_description (com_die
, DW_AT_location
, loc
);
23599 /* Avoid sharing the same loc descriptor between
23600 DW_TAG_common_block and DW_TAG_variable. */
23601 loc
= loc_list_from_tree (com_decl
, 2, NULL
);
23603 else if (DECL_EXTERNAL (decl_or_origin
))
23604 add_AT_flag (com_die
, DW_AT_declaration
, 1);
23605 if (want_pubnames ())
23606 add_pubname_string (cnam
, com_die
); /* ??? needed? */
23607 com_die
->decl_id
= DECL_UID (com_decl
);
23608 slot
= common_block_die_table
->find_slot (com_die
, INSERT
);
23611 else if (get_AT (com_die
, DW_AT_location
) == NULL
&& loc
)
23613 add_AT_location_description (com_die
, DW_AT_location
, loc
);
23614 loc
= loc_list_from_tree (com_decl
, 2, NULL
);
23615 remove_AT (com_die
, DW_AT_declaration
);
23617 var_die
= new_die (DW_TAG_variable
, com_die
, decl
);
23618 add_name_and_src_coords_attributes (var_die
, decl_or_origin
);
23619 add_type_attribute (var_die
, TREE_TYPE (decl_or_origin
),
23620 decl_quals (decl_or_origin
), false,
23622 add_alignment_attribute (var_die
, decl
);
23623 add_AT_flag (var_die
, DW_AT_external
, 1);
23628 /* Optimize the common case. */
23629 if (single_element_loc_list_p (loc
)
23630 && loc
->expr
->dw_loc_opc
== DW_OP_addr
23631 && loc
->expr
->dw_loc_next
== NULL
23632 && GET_CODE (loc
->expr
->dw_loc_oprnd1
.v
.val_addr
) == SYMBOL_REF
)
23634 rtx x
= loc
->expr
->dw_loc_oprnd1
.v
.val_addr
;
23635 loc
->expr
->dw_loc_oprnd1
.v
.val_addr
23636 = plus_constant (GET_MODE (x
), x
, off
);
23639 loc_list_plus_const (loc
, off
);
23641 add_AT_location_description (var_die
, DW_AT_location
, loc
);
23643 else if (DECL_EXTERNAL (decl_or_origin
))
23644 add_AT_flag (var_die
, DW_AT_declaration
, 1);
23646 equate_decl_number_to_die (decl
, var_die
);
23654 /* A declaration that has been previously dumped, needs no
23655 further annotations, since it doesn't need location on
23656 the second pass. */
23659 else if (decl_will_get_specification_p (old_die
, decl
, declaration
)
23660 && !get_AT (old_die
, DW_AT_specification
))
23662 /* Fall-thru so we can make a new variable die along with a
23663 DW_AT_specification. */
23665 else if (origin
&& old_die
->die_parent
!= context_die
)
23667 /* If we will be creating an inlined instance, we need a
23668 new DIE that will get annotated with
23669 DW_AT_abstract_origin. */
23670 gcc_assert (!DECL_ABSTRACT_P (decl
));
23674 /* If a DIE was dumped early, it still needs location info.
23675 Skip to where we fill the location bits. */
23678 /* ??? In LTRANS we cannot annotate early created variably
23679 modified type DIEs without copying them and adjusting all
23680 references to them. Thus we dumped them again. Also add a
23681 reference to them but beware of -g0 compile and -g link
23682 in which case the reference will be already present. */
23683 tree type
= TREE_TYPE (decl_or_origin
);
23685 && ! get_AT (var_die
, DW_AT_type
)
23686 && variably_modified_type_p
23687 (type
, decl_function_context (decl_or_origin
)))
23689 if (decl_by_reference_p (decl_or_origin
))
23690 add_type_attribute (var_die
, TREE_TYPE (type
),
23691 TYPE_UNQUALIFIED
, false, context_die
);
23693 add_type_attribute (var_die
, type
, decl_quals (decl_or_origin
),
23694 false, context_die
);
23697 goto gen_variable_die_location
;
23701 /* For static data members, the declaration in the class is supposed
23702 to have DW_TAG_member tag in DWARF{3,4} and we emit it for compatibility
23703 also in DWARF2; the specification should still be DW_TAG_variable
23704 referencing the DW_TAG_member DIE. */
23705 if (declaration
&& class_scope_p (context_die
) && dwarf_version
< 5)
23706 var_die
= new_die (DW_TAG_member
, context_die
, decl
);
23708 var_die
= new_die (DW_TAG_variable
, context_die
, decl
);
23710 if (origin
!= NULL
)
23711 add_abstract_origin_attribute (var_die
, origin
);
23713 /* Loop unrolling can create multiple blocks that refer to the same
23714 static variable, so we must test for the DW_AT_declaration flag.
23716 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
23717 copy decls and set the DECL_ABSTRACT_P flag on them instead of
23720 ??? Duplicated blocks have been rewritten to use .debug_ranges. */
23721 else if (decl_will_get_specification_p (old_die
, decl
, declaration
))
23723 /* This is a definition of a C++ class level static. */
23724 add_AT_specification (var_die
, old_die
);
23725 specialization_p
= true;
23726 if (DECL_NAME (decl
))
23728 expanded_location s
= expand_location (DECL_SOURCE_LOCATION (decl
));
23729 struct dwarf_file_data
* file_index
= lookup_filename (s
.file
);
23731 if (get_AT_file (old_die
, DW_AT_decl_file
) != file_index
)
23732 add_AT_file (var_die
, DW_AT_decl_file
, file_index
);
23734 if (get_AT_unsigned (old_die
, DW_AT_decl_line
) != (unsigned) s
.line
)
23735 add_AT_unsigned (var_die
, DW_AT_decl_line
, s
.line
);
23737 if (debug_column_info
23739 && (get_AT_unsigned (old_die
, DW_AT_decl_column
)
23740 != (unsigned) s
.column
))
23741 add_AT_unsigned (var_die
, DW_AT_decl_column
, s
.column
);
23743 if (old_die
->die_tag
== DW_TAG_member
)
23744 add_linkage_name (var_die
, decl
);
23748 add_name_and_src_coords_attributes (var_die
, decl
, no_linkage_name
);
23750 if ((origin
== NULL
&& !specialization_p
)
23752 && !DECL_ABSTRACT_P (decl_or_origin
)
23753 && variably_modified_type_p (TREE_TYPE (decl_or_origin
),
23754 decl_function_context
23755 (decl_or_origin
))))
23757 tree type
= TREE_TYPE (decl_or_origin
);
23759 if (decl_by_reference_p (decl_or_origin
))
23760 add_type_attribute (var_die
, TREE_TYPE (type
), TYPE_UNQUALIFIED
, false,
23763 add_type_attribute (var_die
, type
, decl_quals (decl_or_origin
), false,
23767 if (origin
== NULL
&& !specialization_p
)
23769 if (TREE_PUBLIC (decl
))
23770 add_AT_flag (var_die
, DW_AT_external
, 1);
23772 if (DECL_ARTIFICIAL (decl
))
23773 add_AT_flag (var_die
, DW_AT_artificial
, 1);
23775 add_alignment_attribute (var_die
, decl
);
23777 add_accessibility_attribute (var_die
, decl
);
23781 add_AT_flag (var_die
, DW_AT_declaration
, 1);
23783 if (decl
&& (DECL_ABSTRACT_P (decl
)
23784 || !old_die
|| is_declaration_die (old_die
)))
23785 equate_decl_number_to_die (decl
, var_die
);
23787 gen_variable_die_location
:
23789 && (! DECL_ABSTRACT_P (decl_or_origin
)
23790 /* Local static vars are shared between all clones/inlines,
23791 so emit DW_AT_location on the abstract DIE if DECL_RTL is
23793 || (VAR_P (decl_or_origin
)
23794 && TREE_STATIC (decl_or_origin
)
23795 && DECL_RTL_SET_P (decl_or_origin
))))
23798 add_pubname (decl_or_origin
, var_die
);
23800 add_location_or_const_value_attribute (var_die
, decl_or_origin
,
23804 tree_add_const_value_attribute_for_decl (var_die
, decl_or_origin
);
23806 if ((dwarf_version
>= 4 || !dwarf_strict
)
23807 && lang_hooks
.decls
.decl_dwarf_attribute (decl_or_origin
,
23808 DW_AT_const_expr
) == 1
23809 && !get_AT (var_die
, DW_AT_const_expr
)
23810 && !specialization_p
)
23811 add_AT_flag (var_die
, DW_AT_const_expr
, 1);
23815 int inl
= lang_hooks
.decls
.decl_dwarf_attribute (decl_or_origin
,
23818 && !get_AT (var_die
, DW_AT_inline
)
23819 && !specialization_p
)
23820 add_AT_unsigned (var_die
, DW_AT_inline
, inl
);
23824 /* Generate a DIE to represent a named constant. */
23827 gen_const_die (tree decl
, dw_die_ref context_die
)
23829 dw_die_ref const_die
;
23830 tree type
= TREE_TYPE (decl
);
23832 const_die
= lookup_decl_die (decl
);
23836 const_die
= new_die (DW_TAG_constant
, context_die
, decl
);
23837 equate_decl_number_to_die (decl
, const_die
);
23838 add_name_and_src_coords_attributes (const_die
, decl
);
23839 add_type_attribute (const_die
, type
, TYPE_QUAL_CONST
, false, context_die
);
23840 if (TREE_PUBLIC (decl
))
23841 add_AT_flag (const_die
, DW_AT_external
, 1);
23842 if (DECL_ARTIFICIAL (decl
))
23843 add_AT_flag (const_die
, DW_AT_artificial
, 1);
23844 tree_add_const_value_attribute_for_decl (const_die
, decl
);
23847 /* Generate a DIE to represent a label identifier. */
23850 gen_label_die (tree decl
, dw_die_ref context_die
)
23852 tree origin
= decl_ultimate_origin (decl
);
23853 dw_die_ref lbl_die
= lookup_decl_die (decl
);
23855 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
23859 lbl_die
= new_die (DW_TAG_label
, context_die
, decl
);
23860 equate_decl_number_to_die (decl
, lbl_die
);
23862 if (origin
!= NULL
)
23863 add_abstract_origin_attribute (lbl_die
, origin
);
23865 add_name_and_src_coords_attributes (lbl_die
, decl
);
23868 if (DECL_ABSTRACT_P (decl
))
23869 equate_decl_number_to_die (decl
, lbl_die
);
23870 else if (! early_dwarf
)
23872 insn
= DECL_RTL_IF_SET (decl
);
23874 /* Deleted labels are programmer specified labels which have been
23875 eliminated because of various optimizations. We still emit them
23876 here so that it is possible to put breakpoints on them. */
23880 && NOTE_KIND (insn
) == NOTE_INSN_DELETED_LABEL
))))
23882 /* When optimization is enabled (via -O) some parts of the compiler
23883 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
23884 represent source-level labels which were explicitly declared by
23885 the user. This really shouldn't be happening though, so catch
23886 it if it ever does happen. */
23887 gcc_assert (!as_a
<rtx_insn
*> (insn
)->deleted ());
23889 ASM_GENERATE_INTERNAL_LABEL (label
, "L", CODE_LABEL_NUMBER (insn
));
23890 add_AT_lbl_id (lbl_die
, DW_AT_low_pc
, label
);
23894 && NOTE_KIND (insn
) == NOTE_INSN_DELETED_DEBUG_LABEL
23895 && CODE_LABEL_NUMBER (insn
) != -1)
23897 ASM_GENERATE_INTERNAL_LABEL (label
, "LDL", CODE_LABEL_NUMBER (insn
));
23898 add_AT_lbl_id (lbl_die
, DW_AT_low_pc
, label
);
23903 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
23904 attributes to the DIE for a block STMT, to describe where the inlined
23905 function was called from. This is similar to add_src_coords_attributes. */
23908 add_call_src_coords_attributes (tree stmt
, dw_die_ref die
)
23910 /* We can end up with BUILTINS_LOCATION here. */
23911 if (RESERVED_LOCATION_P (BLOCK_SOURCE_LOCATION (stmt
)))
23914 expanded_location s
= expand_location (BLOCK_SOURCE_LOCATION (stmt
));
23916 if (dwarf_version
>= 3 || !dwarf_strict
)
23918 add_AT_file (die
, DW_AT_call_file
, lookup_filename (s
.file
));
23919 add_AT_unsigned (die
, DW_AT_call_line
, s
.line
);
23920 if (debug_column_info
&& s
.column
)
23921 add_AT_unsigned (die
, DW_AT_call_column
, s
.column
);
23926 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
23927 Add low_pc and high_pc attributes to the DIE for a block STMT. */
23930 add_high_low_attributes (tree stmt
, dw_die_ref die
)
23932 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
23934 if (inline_entry_data
**iedp
23935 = !inline_entry_data_table
? NULL
23936 : inline_entry_data_table
->find_slot_with_hash (stmt
,
23937 htab_hash_pointer (stmt
),
23940 inline_entry_data
*ied
= *iedp
;
23941 gcc_assert (MAY_HAVE_DEBUG_MARKER_INSNS
);
23942 gcc_assert (debug_inline_points
);
23943 gcc_assert (inlined_function_outer_scope_p (stmt
));
23945 ASM_GENERATE_INTERNAL_LABEL (label
, ied
->label_pfx
, ied
->label_num
);
23946 add_AT_lbl_id (die
, DW_AT_entry_pc
, label
);
23948 if (debug_variable_location_views
&& !ZERO_VIEW_P (ied
->view
)
23951 if (!output_asm_line_debug_info ())
23952 add_AT_unsigned (die
, DW_AT_GNU_entry_view
, ied
->view
);
23955 ASM_GENERATE_INTERNAL_LABEL (label
, "LVU", ied
->view
);
23956 /* FIXME: this will resolve to a small number. Could we
23957 possibly emit smaller data? Ideally we'd emit a
23958 uleb128, but that would make the size of DIEs
23959 impossible for the compiler to compute, since it's
23960 the assembler that computes the value of the view
23961 label in this case. Ideally, we'd have a single form
23962 encompassing both the address and the view, and
23963 indirecting them through a table might make things
23964 easier, but even that would be more wasteful,
23965 space-wise, than what we have now. */
23966 add_AT_symview (die
, DW_AT_GNU_entry_view
, label
);
23970 inline_entry_data_table
->clear_slot (iedp
);
23973 if (BLOCK_FRAGMENT_CHAIN (stmt
)
23974 && (dwarf_version
>= 3 || !dwarf_strict
))
23976 tree chain
, superblock
= NULL_TREE
;
23978 dw_attr_node
*attr
= NULL
;
23980 if (!debug_inline_points
&& inlined_function_outer_scope_p (stmt
))
23982 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_BEGIN_LABEL
,
23983 BLOCK_NUMBER (stmt
));
23984 add_AT_lbl_id (die
, DW_AT_entry_pc
, label
);
23987 /* Optimize duplicate .debug_ranges lists or even tails of
23988 lists. If this BLOCK has same ranges as its supercontext,
23989 lookup DW_AT_ranges attribute in the supercontext (and
23990 recursively so), verify that the ranges_table contains the
23991 right values and use it instead of adding a new .debug_range. */
23992 for (chain
= stmt
, pdie
= die
;
23993 BLOCK_SAME_RANGE (chain
);
23994 chain
= BLOCK_SUPERCONTEXT (chain
))
23996 dw_attr_node
*new_attr
;
23998 pdie
= pdie
->die_parent
;
24001 if (BLOCK_SUPERCONTEXT (chain
) == NULL_TREE
)
24003 new_attr
= get_AT (pdie
, DW_AT_ranges
);
24004 if (new_attr
== NULL
24005 || new_attr
->dw_attr_val
.val_class
!= dw_val_class_range_list
)
24008 superblock
= BLOCK_SUPERCONTEXT (chain
);
24011 && ((*ranges_table
)[attr
->dw_attr_val
.v
.val_offset
].num
24012 == (int)BLOCK_NUMBER (superblock
))
24013 && BLOCK_FRAGMENT_CHAIN (superblock
))
24015 unsigned long off
= attr
->dw_attr_val
.v
.val_offset
;
24016 unsigned long supercnt
= 0, thiscnt
= 0;
24017 for (chain
= BLOCK_FRAGMENT_CHAIN (superblock
);
24018 chain
; chain
= BLOCK_FRAGMENT_CHAIN (chain
))
24021 gcc_checking_assert ((*ranges_table
)[off
+ supercnt
].num
24022 == (int)BLOCK_NUMBER (chain
));
24024 gcc_checking_assert ((*ranges_table
)[off
+ supercnt
+ 1].num
== 0);
24025 for (chain
= BLOCK_FRAGMENT_CHAIN (stmt
);
24026 chain
; chain
= BLOCK_FRAGMENT_CHAIN (chain
))
24028 gcc_assert (supercnt
>= thiscnt
);
24029 add_AT_range_list (die
, DW_AT_ranges
, off
+ supercnt
- thiscnt
,
24031 note_rnglist_head (off
+ supercnt
- thiscnt
);
24035 unsigned int offset
= add_ranges (stmt
, true);
24036 add_AT_range_list (die
, DW_AT_ranges
, offset
, false);
24037 note_rnglist_head (offset
);
24039 bool prev_in_cold
= BLOCK_IN_COLD_SECTION_P (stmt
);
24040 chain
= BLOCK_FRAGMENT_CHAIN (stmt
);
24043 add_ranges (chain
, prev_in_cold
!= BLOCK_IN_COLD_SECTION_P (chain
));
24044 prev_in_cold
= BLOCK_IN_COLD_SECTION_P (chain
);
24045 chain
= BLOCK_FRAGMENT_CHAIN (chain
);
24052 char label_high
[MAX_ARTIFICIAL_LABEL_BYTES
];
24053 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_BEGIN_LABEL
,
24054 BLOCK_NUMBER (stmt
));
24055 ASM_GENERATE_INTERNAL_LABEL (label_high
, BLOCK_END_LABEL
,
24056 BLOCK_NUMBER (stmt
));
24057 add_AT_low_high_pc (die
, label
, label_high
, false);
24061 /* Generate a DIE for a lexical block. */
24064 gen_lexical_block_die (tree stmt
, dw_die_ref context_die
)
24066 dw_die_ref old_die
= lookup_block_die (stmt
);
24067 dw_die_ref stmt_die
= NULL
;
24070 stmt_die
= new_die (DW_TAG_lexical_block
, context_die
, stmt
);
24071 equate_block_to_die (stmt
, stmt_die
);
24074 if (BLOCK_ABSTRACT_ORIGIN (stmt
))
24076 /* If this is an inlined or conrecte instance, create a new lexical
24077 die for anything below to attach DW_AT_abstract_origin to. */
24079 stmt_die
= new_die (DW_TAG_lexical_block
, context_die
, stmt
);
24081 tree origin
= block_ultimate_origin (stmt
);
24082 if (origin
!= NULL_TREE
&& (origin
!= stmt
|| old_die
))
24083 add_abstract_origin_attribute (stmt_die
, origin
);
24089 stmt_die
= old_die
;
24091 /* A non abstract block whose blocks have already been reordered
24092 should have the instruction range for this block. If so, set the
24093 high/low attributes. */
24094 if (!early_dwarf
&& TREE_ASM_WRITTEN (stmt
))
24096 gcc_assert (stmt_die
);
24097 add_high_low_attributes (stmt
, stmt_die
);
24100 decls_for_scope (stmt
, stmt_die
);
24103 /* Generate a DIE for an inlined subprogram. */
24106 gen_inlined_subroutine_die (tree stmt
, dw_die_ref context_die
)
24108 tree decl
= block_ultimate_origin (stmt
);
24110 /* Make sure any inlined functions are known to be inlineable. */
24111 gcc_checking_assert (DECL_ABSTRACT_P (decl
)
24112 || cgraph_function_possibly_inlined_p (decl
));
24114 dw_die_ref subr_die
= new_die (DW_TAG_inlined_subroutine
, context_die
, stmt
);
24116 if (call_arg_locations
|| debug_inline_points
)
24117 equate_block_to_die (stmt
, subr_die
);
24118 add_abstract_origin_attribute (subr_die
, decl
);
24119 if (TREE_ASM_WRITTEN (stmt
))
24120 add_high_low_attributes (stmt
, subr_die
);
24121 add_call_src_coords_attributes (stmt
, subr_die
);
24123 /* The inliner creates an extra BLOCK for the parameter setup,
24124 we want to merge that with the actual outermost BLOCK of the
24125 inlined function to avoid duplicate locals in consumers.
24126 Do that by doing the recursion to subblocks on the single subblock
24128 bool unwrap_one
= false;
24129 if (BLOCK_SUBBLOCKS (stmt
) && !BLOCK_CHAIN (BLOCK_SUBBLOCKS (stmt
)))
24131 tree origin
= block_ultimate_origin (BLOCK_SUBBLOCKS (stmt
));
24133 && TREE_CODE (origin
) == BLOCK
24134 && BLOCK_SUPERCONTEXT (origin
) == decl
)
24137 decls_for_scope (stmt
, subr_die
, !unwrap_one
);
24139 decls_for_scope (BLOCK_SUBBLOCKS (stmt
), subr_die
);
24142 /* Generate a DIE for a field in a record, or structure. CTX is required: see
24143 the comment for VLR_CONTEXT. */
24146 gen_field_die (tree decl
, struct vlr_context
*ctx
, dw_die_ref context_die
)
24148 dw_die_ref decl_die
;
24150 if (TREE_TYPE (decl
) == error_mark_node
)
24153 decl_die
= new_die (DW_TAG_member
, context_die
, decl
);
24154 add_name_and_src_coords_attributes (decl_die
, decl
);
24155 add_type_attribute (decl_die
, member_declared_type (decl
), decl_quals (decl
),
24156 TYPE_REVERSE_STORAGE_ORDER (DECL_FIELD_CONTEXT (decl
)),
24159 if (DECL_BIT_FIELD_TYPE (decl
))
24161 add_byte_size_attribute (decl_die
, decl
);
24162 add_bit_size_attribute (decl_die
, decl
);
24163 add_bit_offset_attribute (decl_die
, decl
, ctx
);
24166 add_alignment_attribute (decl_die
, decl
);
24168 /* If we have a variant part offset, then we are supposed to process a member
24169 of a QUAL_UNION_TYPE, which is how we represent variant parts in
24171 gcc_assert (ctx
->variant_part_offset
== NULL_TREE
24172 || TREE_CODE (DECL_FIELD_CONTEXT (decl
)) != QUAL_UNION_TYPE
);
24173 if (TREE_CODE (DECL_FIELD_CONTEXT (decl
)) != UNION_TYPE
)
24174 add_data_member_location_attribute (decl_die
, decl
, ctx
);
24176 if (DECL_ARTIFICIAL (decl
))
24177 add_AT_flag (decl_die
, DW_AT_artificial
, 1);
24179 add_accessibility_attribute (decl_die
, decl
);
24181 /* Equate decl number to die, so that we can look up this decl later on. */
24182 equate_decl_number_to_die (decl
, decl_die
);
24185 /* Generate a DIE for a pointer to a member type. TYPE can be an
24186 OFFSET_TYPE, for a pointer to data member, or a RECORD_TYPE, for a
24187 pointer to member function. */
24190 gen_ptr_to_mbr_type_die (tree type
, dw_die_ref context_die
)
24192 if (lookup_type_die (type
))
24195 dw_die_ref ptr_die
= new_die (DW_TAG_ptr_to_member_type
,
24196 scope_die_for (type
, context_die
), type
);
24198 equate_type_number_to_die (type
, ptr_die
);
24199 add_AT_die_ref (ptr_die
, DW_AT_containing_type
,
24200 lookup_type_die (TYPE_OFFSET_BASETYPE (type
)));
24201 add_type_attribute (ptr_die
, TREE_TYPE (type
), TYPE_UNQUALIFIED
, false,
24203 add_alignment_attribute (ptr_die
, type
);
24205 if (TREE_CODE (TREE_TYPE (type
)) != FUNCTION_TYPE
24206 && TREE_CODE (TREE_TYPE (type
)) != METHOD_TYPE
)
24208 dw_loc_descr_ref op
= new_loc_descr (DW_OP_plus
, 0, 0);
24209 add_AT_loc (ptr_die
, DW_AT_use_location
, op
);
24213 static char *producer_string
;
24215 /* Return a heap allocated producer string including command line options
24216 if -grecord-gcc-switches. */
24219 gen_producer_string (void)
24222 auto_vec
<const char *> switches
;
24223 const char *language_string
= lang_hooks
.name
;
24224 char *producer
, *tail
;
24226 size_t len
= dwarf_record_gcc_switches
? 0 : 3;
24227 size_t plen
= strlen (language_string
) + 1 + strlen (version_string
);
24229 for (j
= 1; dwarf_record_gcc_switches
&& j
< save_decoded_options_count
; j
++)
24230 switch (save_decoded_options
[j
].opt_index
)
24237 case OPT_auxbase_strip
:
24246 case OPT_SPECIAL_unknown
:
24247 case OPT_SPECIAL_ignore
:
24248 case OPT_SPECIAL_deprecated
:
24249 case OPT_SPECIAL_program_name
:
24250 case OPT_SPECIAL_input_file
:
24251 case OPT_grecord_gcc_switches
:
24252 case OPT__output_pch_
:
24253 case OPT_fdiagnostics_show_location_
:
24254 case OPT_fdiagnostics_show_option
:
24255 case OPT_fdiagnostics_show_caret
:
24256 case OPT_fdiagnostics_show_labels
:
24257 case OPT_fdiagnostics_show_line_numbers
:
24258 case OPT_fdiagnostics_color_
:
24259 case OPT_fverbose_asm
:
24261 case OPT__sysroot_
:
24263 case OPT_nostdinc__
:
24264 case OPT_fpreprocessed
:
24265 case OPT_fltrans_output_list_
:
24266 case OPT_fresolution_
:
24267 case OPT_fdebug_prefix_map_
:
24268 case OPT_fmacro_prefix_map_
:
24269 case OPT_ffile_prefix_map_
:
24270 case OPT_fcompare_debug
:
24271 case OPT_fchecking
:
24272 case OPT_fchecking_
:
24273 /* Ignore these. */
24276 if (cl_options
[save_decoded_options
[j
].opt_index
].flags
24277 & CL_NO_DWARF_RECORD
)
24279 gcc_checking_assert (save_decoded_options
[j
].canonical_option
[0][0]
24281 switch (save_decoded_options
[j
].canonical_option
[0][1])
24288 if (strncmp (save_decoded_options
[j
].canonical_option
[0] + 2,
24295 switches
.safe_push (save_decoded_options
[j
].orig_option_with_args_text
);
24296 len
+= strlen (save_decoded_options
[j
].orig_option_with_args_text
) + 1;
24300 producer
= XNEWVEC (char, plen
+ 1 + len
+ 1);
24302 sprintf (tail
, "%s %s", language_string
, version_string
);
24305 FOR_EACH_VEC_ELT (switches
, j
, p
)
24309 memcpy (tail
+ 1, p
, len
);
24317 /* Given a C and/or C++ language/version string return the "highest".
24318 C++ is assumed to be "higher" than C in this case. Used for merging
24319 LTO translation unit languages. */
24320 static const char *
24321 highest_c_language (const char *lang1
, const char *lang2
)
24323 if (strcmp ("GNU C++17", lang1
) == 0 || strcmp ("GNU C++17", lang2
) == 0)
24324 return "GNU C++17";
24325 if (strcmp ("GNU C++14", lang1
) == 0 || strcmp ("GNU C++14", lang2
) == 0)
24326 return "GNU C++14";
24327 if (strcmp ("GNU C++11", lang1
) == 0 || strcmp ("GNU C++11", lang2
) == 0)
24328 return "GNU C++11";
24329 if (strcmp ("GNU C++98", lang1
) == 0 || strcmp ("GNU C++98", lang2
) == 0)
24330 return "GNU C++98";
24332 if (strcmp ("GNU C2X", lang1
) == 0 || strcmp ("GNU C2X", lang2
) == 0)
24334 if (strcmp ("GNU C17", lang1
) == 0 || strcmp ("GNU C17", lang2
) == 0)
24336 if (strcmp ("GNU C11", lang1
) == 0 || strcmp ("GNU C11", lang2
) == 0)
24338 if (strcmp ("GNU C99", lang1
) == 0 || strcmp ("GNU C99", lang2
) == 0)
24340 if (strcmp ("GNU C89", lang1
) == 0 || strcmp ("GNU C89", lang2
) == 0)
24343 gcc_unreachable ();
24347 /* Generate the DIE for the compilation unit. */
24350 gen_compile_unit_die (const char *filename
)
24353 const char *language_string
= lang_hooks
.name
;
24356 die
= new_die (DW_TAG_compile_unit
, NULL
, NULL
);
24360 add_name_attribute (die
, filename
);
24361 /* Don't add cwd for <built-in>. */
24362 if (filename
[0] != '<')
24363 add_comp_dir_attribute (die
);
24366 add_AT_string (die
, DW_AT_producer
, producer_string
? producer_string
: "");
24368 /* If our producer is LTO try to figure out a common language to use
24369 from the global list of translation units. */
24370 if (strcmp (language_string
, "GNU GIMPLE") == 0)
24374 const char *common_lang
= NULL
;
24376 FOR_EACH_VEC_SAFE_ELT (all_translation_units
, i
, t
)
24378 if (!TRANSLATION_UNIT_LANGUAGE (t
))
24381 common_lang
= TRANSLATION_UNIT_LANGUAGE (t
);
24382 else if (strcmp (common_lang
, TRANSLATION_UNIT_LANGUAGE (t
)) == 0)
24384 else if (strncmp (common_lang
, "GNU C", 5) == 0
24385 && strncmp (TRANSLATION_UNIT_LANGUAGE (t
), "GNU C", 5) == 0)
24386 /* Mixing C and C++ is ok, use C++ in that case. */
24387 common_lang
= highest_c_language (common_lang
,
24388 TRANSLATION_UNIT_LANGUAGE (t
));
24391 /* Fall back to C. */
24392 common_lang
= NULL
;
24398 language_string
= common_lang
;
24401 language
= DW_LANG_C
;
24402 if (strncmp (language_string
, "GNU C", 5) == 0
24403 && ISDIGIT (language_string
[5]))
24405 language
= DW_LANG_C89
;
24406 if (dwarf_version
>= 3 || !dwarf_strict
)
24408 if (strcmp (language_string
, "GNU C89") != 0)
24409 language
= DW_LANG_C99
;
24411 if (dwarf_version
>= 5 /* || !dwarf_strict */)
24412 if (strcmp (language_string
, "GNU C11") == 0
24413 || strcmp (language_string
, "GNU C17") == 0
24414 || strcmp (language_string
, "GNU C2X"))
24415 language
= DW_LANG_C11
;
24418 else if (strncmp (language_string
, "GNU C++", 7) == 0)
24420 language
= DW_LANG_C_plus_plus
;
24421 if (dwarf_version
>= 5 /* || !dwarf_strict */)
24423 if (strcmp (language_string
, "GNU C++11") == 0)
24424 language
= DW_LANG_C_plus_plus_11
;
24425 else if (strcmp (language_string
, "GNU C++14") == 0)
24426 language
= DW_LANG_C_plus_plus_14
;
24427 else if (strcmp (language_string
, "GNU C++17") == 0)
24429 language
= DW_LANG_C_plus_plus_14
;
24432 else if (strcmp (language_string
, "GNU F77") == 0)
24433 language
= DW_LANG_Fortran77
;
24434 else if (dwarf_version
>= 3 || !dwarf_strict
)
24436 if (strcmp (language_string
, "GNU Ada") == 0)
24437 language
= DW_LANG_Ada95
;
24438 else if (strncmp (language_string
, "GNU Fortran", 11) == 0)
24440 language
= DW_LANG_Fortran95
;
24441 if (dwarf_version
>= 5 /* || !dwarf_strict */)
24443 if (strcmp (language_string
, "GNU Fortran2003") == 0)
24444 language
= DW_LANG_Fortran03
;
24445 else if (strcmp (language_string
, "GNU Fortran2008") == 0)
24446 language
= DW_LANG_Fortran08
;
24449 else if (strcmp (language_string
, "GNU Objective-C") == 0)
24450 language
= DW_LANG_ObjC
;
24451 else if (strcmp (language_string
, "GNU Objective-C++") == 0)
24452 language
= DW_LANG_ObjC_plus_plus
;
24453 else if (dwarf_version
>= 5 || !dwarf_strict
)
24455 if (strcmp (language_string
, "GNU Go") == 0)
24456 language
= DW_LANG_Go
;
24459 /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */
24460 else if (strncmp (language_string
, "GNU Fortran", 11) == 0)
24461 language
= DW_LANG_Fortran90
;
24462 /* Likewise for Ada. */
24463 else if (strcmp (language_string
, "GNU Ada") == 0)
24464 language
= DW_LANG_Ada83
;
24466 add_AT_unsigned (die
, DW_AT_language
, language
);
24470 case DW_LANG_Fortran77
:
24471 case DW_LANG_Fortran90
:
24472 case DW_LANG_Fortran95
:
24473 case DW_LANG_Fortran03
:
24474 case DW_LANG_Fortran08
:
24475 /* Fortran has case insensitive identifiers and the front-end
24476 lowercases everything. */
24477 add_AT_unsigned (die
, DW_AT_identifier_case
, DW_ID_down_case
);
24480 /* The default DW_ID_case_sensitive doesn't need to be specified. */
24486 /* Generate the DIE for a base class. */
24489 gen_inheritance_die (tree binfo
, tree access
, tree type
,
24490 dw_die_ref context_die
)
24492 dw_die_ref die
= new_die (DW_TAG_inheritance
, context_die
, binfo
);
24493 struct vlr_context ctx
= { type
, NULL
};
24495 add_type_attribute (die
, BINFO_TYPE (binfo
), TYPE_UNQUALIFIED
, false,
24497 add_data_member_location_attribute (die
, binfo
, &ctx
);
24499 if (BINFO_VIRTUAL_P (binfo
))
24500 add_AT_unsigned (die
, DW_AT_virtuality
, DW_VIRTUALITY_virtual
);
24502 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
24503 children, otherwise the default is DW_ACCESS_public. In DWARF2
24504 the default has always been DW_ACCESS_private. */
24505 if (access
== access_public_node
)
24507 if (dwarf_version
== 2
24508 || context_die
->die_tag
== DW_TAG_class_type
)
24509 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_public
);
24511 else if (access
== access_protected_node
)
24512 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_protected
);
24513 else if (dwarf_version
> 2
24514 && context_die
->die_tag
!= DW_TAG_class_type
)
24515 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_private
);
24518 /* Return whether DECL is a FIELD_DECL that represents the variant part of a
24521 is_variant_part (tree decl
)
24523 return (TREE_CODE (decl
) == FIELD_DECL
24524 && TREE_CODE (TREE_TYPE (decl
)) == QUAL_UNION_TYPE
);
24527 /* Check that OPERAND is a reference to a field in STRUCT_TYPE. If it is,
24528 return the FIELD_DECL. Return NULL_TREE otherwise. */
24531 analyze_discr_in_predicate (tree operand
, tree struct_type
)
24533 bool continue_stripping
= true;
24534 while (continue_stripping
)
24535 switch (TREE_CODE (operand
))
24538 operand
= TREE_OPERAND (operand
, 0);
24541 continue_stripping
= false;
24545 /* Match field access to members of struct_type only. */
24546 if (TREE_CODE (operand
) == COMPONENT_REF
24547 && TREE_CODE (TREE_OPERAND (operand
, 0)) == PLACEHOLDER_EXPR
24548 && TREE_TYPE (TREE_OPERAND (operand
, 0)) == struct_type
24549 && TREE_CODE (TREE_OPERAND (operand
, 1)) == FIELD_DECL
)
24550 return TREE_OPERAND (operand
, 1);
24555 /* Check that SRC is a constant integer that can be represented as a native
24556 integer constant (either signed or unsigned). If so, store it into DEST and
24557 return true. Return false otherwise. */
24560 get_discr_value (tree src
, dw_discr_value
*dest
)
24562 tree discr_type
= TREE_TYPE (src
);
24564 if (lang_hooks
.types
.get_debug_type
)
24566 tree debug_type
= lang_hooks
.types
.get_debug_type (discr_type
);
24567 if (debug_type
!= NULL
)
24568 discr_type
= debug_type
;
24571 if (TREE_CODE (src
) != INTEGER_CST
|| !INTEGRAL_TYPE_P (discr_type
))
24574 /* Signedness can vary between the original type and the debug type. This
24575 can happen for character types in Ada for instance: the character type
24576 used for code generation can be signed, to be compatible with the C one,
24577 but from a debugger point of view, it must be unsigned. */
24578 bool is_orig_unsigned
= TYPE_UNSIGNED (TREE_TYPE (src
));
24579 bool is_debug_unsigned
= TYPE_UNSIGNED (discr_type
);
24581 if (is_orig_unsigned
!= is_debug_unsigned
)
24582 src
= fold_convert (discr_type
, src
);
24584 if (!(is_debug_unsigned
? tree_fits_uhwi_p (src
) : tree_fits_shwi_p (src
)))
24587 dest
->pos
= is_debug_unsigned
;
24588 if (is_debug_unsigned
)
24589 dest
->v
.uval
= tree_to_uhwi (src
);
24591 dest
->v
.sval
= tree_to_shwi (src
);
24596 /* Try to extract synthetic properties out of VARIANT_PART_DECL, which is a
24597 FIELD_DECL in STRUCT_TYPE that represents a variant part. If unsuccessful,
24598 store NULL_TREE in DISCR_DECL. Otherwise:
24600 - store the discriminant field in STRUCT_TYPE that controls the variant
24601 part to *DISCR_DECL
24603 - put in *DISCR_LISTS_P an array where for each variant, the item
24604 represents the corresponding matching list of discriminant values.
24606 - put in *DISCR_LISTS_LENGTH the number of variants, which is the size of
24609 Note that when the array is allocated (i.e. when the analysis is
24610 successful), it is up to the caller to free the array. */
24613 analyze_variants_discr (tree variant_part_decl
,
24616 dw_discr_list_ref
**discr_lists_p
,
24617 unsigned *discr_lists_length
)
24619 tree variant_part_type
= TREE_TYPE (variant_part_decl
);
24621 dw_discr_list_ref
*discr_lists
;
24624 /* Compute how many variants there are in this variant part. */
24625 *discr_lists_length
= 0;
24626 for (variant
= TYPE_FIELDS (variant_part_type
);
24627 variant
!= NULL_TREE
;
24628 variant
= DECL_CHAIN (variant
))
24629 ++*discr_lists_length
;
24631 *discr_decl
= NULL_TREE
;
24633 = (dw_discr_list_ref
*) xcalloc (*discr_lists_length
,
24634 sizeof (**discr_lists_p
));
24635 discr_lists
= *discr_lists_p
;
24637 /* And then analyze all variants to extract discriminant information for all
24638 of them. This analysis is conservative: as soon as we detect something we
24639 do not support, abort everything and pretend we found nothing. */
24640 for (variant
= TYPE_FIELDS (variant_part_type
), i
= 0;
24641 variant
!= NULL_TREE
;
24642 variant
= DECL_CHAIN (variant
), ++i
)
24644 tree match_expr
= DECL_QUALIFIER (variant
);
24646 /* Now, try to analyze the predicate and deduce a discriminant for
24648 if (match_expr
== boolean_true_node
)
24649 /* Typically happens for the default variant: it matches all cases that
24650 previous variants rejected. Don't output any matching value for
24654 /* The following loop tries to iterate over each discriminant
24655 possibility: single values or ranges. */
24656 while (match_expr
!= NULL_TREE
)
24658 tree next_round_match_expr
;
24659 tree candidate_discr
= NULL_TREE
;
24660 dw_discr_list_ref new_node
= NULL
;
24662 /* Possibilities are matched one after the other by nested
24663 TRUTH_ORIF_EXPR expressions. Process the current possibility and
24664 continue with the rest at next iteration. */
24665 if (TREE_CODE (match_expr
) == TRUTH_ORIF_EXPR
)
24667 next_round_match_expr
= TREE_OPERAND (match_expr
, 0);
24668 match_expr
= TREE_OPERAND (match_expr
, 1);
24671 next_round_match_expr
= NULL_TREE
;
24673 if (match_expr
== boolean_false_node
)
24674 /* This sub-expression matches nothing: just wait for the next
24678 else if (TREE_CODE (match_expr
) == EQ_EXPR
)
24680 /* We are matching: <discr_field> == <integer_cst>
24681 This sub-expression matches a single value. */
24682 tree integer_cst
= TREE_OPERAND (match_expr
, 1);
24685 = analyze_discr_in_predicate (TREE_OPERAND (match_expr
, 0),
24688 new_node
= ggc_cleared_alloc
<dw_discr_list_node
> ();
24689 if (!get_discr_value (integer_cst
,
24690 &new_node
->dw_discr_lower_bound
))
24692 new_node
->dw_discr_range
= false;
24695 else if (TREE_CODE (match_expr
) == TRUTH_ANDIF_EXPR
)
24697 /* We are matching:
24698 <discr_field> > <integer_cst>
24699 && <discr_field> < <integer_cst>.
24700 This sub-expression matches the range of values between the
24701 two matched integer constants. Note that comparisons can be
24702 inclusive or exclusive. */
24703 tree candidate_discr_1
, candidate_discr_2
;
24704 tree lower_cst
, upper_cst
;
24705 bool lower_cst_included
, upper_cst_included
;
24706 tree lower_op
= TREE_OPERAND (match_expr
, 0);
24707 tree upper_op
= TREE_OPERAND (match_expr
, 1);
24709 /* When the comparison is exclusive, the integer constant is not
24710 the discriminant range bound we are looking for: we will have
24711 to increment or decrement it. */
24712 if (TREE_CODE (lower_op
) == GE_EXPR
)
24713 lower_cst_included
= true;
24714 else if (TREE_CODE (lower_op
) == GT_EXPR
)
24715 lower_cst_included
= false;
24719 if (TREE_CODE (upper_op
) == LE_EXPR
)
24720 upper_cst_included
= true;
24721 else if (TREE_CODE (upper_op
) == LT_EXPR
)
24722 upper_cst_included
= false;
24726 /* Extract the discriminant from the first operand and check it
24727 is consistant with the same analysis in the second
24730 = analyze_discr_in_predicate (TREE_OPERAND (lower_op
, 0),
24733 = analyze_discr_in_predicate (TREE_OPERAND (upper_op
, 0),
24735 if (candidate_discr_1
== candidate_discr_2
)
24736 candidate_discr
= candidate_discr_1
;
24740 /* Extract bounds from both. */
24741 new_node
= ggc_cleared_alloc
<dw_discr_list_node
> ();
24742 lower_cst
= TREE_OPERAND (lower_op
, 1);
24743 upper_cst
= TREE_OPERAND (upper_op
, 1);
24745 if (!lower_cst_included
)
24747 = fold_build2 (PLUS_EXPR
, TREE_TYPE (lower_cst
), lower_cst
,
24748 build_int_cst (TREE_TYPE (lower_cst
), 1));
24749 if (!upper_cst_included
)
24751 = fold_build2 (MINUS_EXPR
, TREE_TYPE (upper_cst
), upper_cst
,
24752 build_int_cst (TREE_TYPE (upper_cst
), 1));
24754 if (!get_discr_value (lower_cst
,
24755 &new_node
->dw_discr_lower_bound
)
24756 || !get_discr_value (upper_cst
,
24757 &new_node
->dw_discr_upper_bound
))
24760 new_node
->dw_discr_range
= true;
24764 /* Unsupported sub-expression: we cannot determine the set of
24765 matching discriminant values. Abort everything. */
24768 /* If the discriminant info is not consistant with what we saw so
24769 far, consider the analysis failed and abort everything. */
24770 if (candidate_discr
== NULL_TREE
24771 || (*discr_decl
!= NULL_TREE
&& candidate_discr
!= *discr_decl
))
24774 *discr_decl
= candidate_discr
;
24776 if (new_node
!= NULL
)
24778 new_node
->dw_discr_next
= discr_lists
[i
];
24779 discr_lists
[i
] = new_node
;
24781 match_expr
= next_round_match_expr
;
24785 /* If we reach this point, we could match everything we were interested
24790 /* Clean all data structure and return no result. */
24791 free (*discr_lists_p
);
24792 *discr_lists_p
= NULL
;
24793 *discr_decl
= NULL_TREE
;
24796 /* Generate a DIE to represent VARIANT_PART_DECL, a variant part that is part
24797 of STRUCT_TYPE, a record type. This new DIE is emitted as the next child
24800 Variant parts are supposed to be implemented as a FIELD_DECL whose type is a
24801 QUAL_UNION_TYPE: this is the VARIANT_PART_DECL parameter. The members for
24802 this type, which are record types, represent the available variants and each
24803 has a DECL_QUALIFIER attribute. The discriminant and the discriminant
24804 values are inferred from these attributes.
24806 In trees, the offsets for the fields inside these sub-records are relative
24807 to the variant part itself, whereas the corresponding DIEs should have
24808 offset attributes that are relative to the embedding record base address.
24809 This is why the caller must provide a VARIANT_PART_OFFSET expression: it
24810 must be an expression that computes the offset of the variant part to
24811 describe in DWARF. */
24814 gen_variant_part (tree variant_part_decl
, struct vlr_context
*vlr_ctx
,
24815 dw_die_ref context_die
)
24817 const tree variant_part_type
= TREE_TYPE (variant_part_decl
);
24818 tree variant_part_offset
= vlr_ctx
->variant_part_offset
;
24819 struct loc_descr_context ctx
= {
24820 vlr_ctx
->struct_type
, /* context_type */
24821 NULL_TREE
, /* base_decl */
24823 false, /* placeholder_arg */
24824 false /* placeholder_seen */
24827 /* The FIELD_DECL node in STRUCT_TYPE that acts as the discriminant, or
24828 NULL_TREE if there is no such field. */
24829 tree discr_decl
= NULL_TREE
;
24830 dw_discr_list_ref
*discr_lists
;
24831 unsigned discr_lists_length
= 0;
24834 dw_die_ref dwarf_proc_die
= NULL
;
24835 dw_die_ref variant_part_die
24836 = new_die (DW_TAG_variant_part
, context_die
, variant_part_type
);
24838 equate_decl_number_to_die (variant_part_decl
, variant_part_die
);
24840 analyze_variants_discr (variant_part_decl
, vlr_ctx
->struct_type
,
24841 &discr_decl
, &discr_lists
, &discr_lists_length
);
24843 if (discr_decl
!= NULL_TREE
)
24845 dw_die_ref discr_die
= lookup_decl_die (discr_decl
);
24848 add_AT_die_ref (variant_part_die
, DW_AT_discr
, discr_die
);
24850 /* We have no DIE for the discriminant, so just discard all
24851 discrimimant information in the output. */
24852 discr_decl
= NULL_TREE
;
24855 /* If the offset for this variant part is more complex than a constant,
24856 create a DWARF procedure for it so that we will not have to generate DWARF
24857 expressions for it for each member. */
24858 if (TREE_CODE (variant_part_offset
) != INTEGER_CST
24859 && (dwarf_version
>= 3 || !dwarf_strict
))
24861 const tree dwarf_proc_fndecl
24862 = build_decl (UNKNOWN_LOCATION
, FUNCTION_DECL
, NULL_TREE
,
24863 build_function_type (TREE_TYPE (variant_part_offset
),
24865 const tree dwarf_proc_call
= build_call_expr (dwarf_proc_fndecl
, 0);
24866 const dw_loc_descr_ref dwarf_proc_body
24867 = loc_descriptor_from_tree (variant_part_offset
, 0, &ctx
);
24869 dwarf_proc_die
= new_dwarf_proc_die (dwarf_proc_body
,
24870 dwarf_proc_fndecl
, context_die
);
24871 if (dwarf_proc_die
!= NULL
)
24872 variant_part_offset
= dwarf_proc_call
;
24875 /* Output DIEs for all variants. */
24877 for (tree variant
= TYPE_FIELDS (variant_part_type
);
24878 variant
!= NULL_TREE
;
24879 variant
= DECL_CHAIN (variant
), ++i
)
24881 tree variant_type
= TREE_TYPE (variant
);
24882 dw_die_ref variant_die
;
24884 /* All variants (i.e. members of a variant part) are supposed to be
24885 encoded as structures. Sub-variant parts are QUAL_UNION_TYPE fields
24886 under these records. */
24887 gcc_assert (TREE_CODE (variant_type
) == RECORD_TYPE
);
24889 variant_die
= new_die (DW_TAG_variant
, variant_part_die
, variant_type
);
24890 equate_decl_number_to_die (variant
, variant_die
);
24892 /* Output discriminant values this variant matches, if any. */
24893 if (discr_decl
== NULL
|| discr_lists
[i
] == NULL
)
24894 /* In the case we have discriminant information at all, this is
24895 probably the default variant: as the standard says, don't
24896 output any discriminant value/list attribute. */
24898 else if (discr_lists
[i
]->dw_discr_next
== NULL
24899 && !discr_lists
[i
]->dw_discr_range
)
24900 /* If there is only one accepted value, don't bother outputting a
24902 add_discr_value (variant_die
, &discr_lists
[i
]->dw_discr_lower_bound
);
24904 add_discr_list (variant_die
, discr_lists
[i
]);
24906 for (tree member
= TYPE_FIELDS (variant_type
);
24907 member
!= NULL_TREE
;
24908 member
= DECL_CHAIN (member
))
24910 struct vlr_context vlr_sub_ctx
= {
24911 vlr_ctx
->struct_type
, /* struct_type */
24912 NULL
/* variant_part_offset */
24914 if (is_variant_part (member
))
24916 /* All offsets for fields inside variant parts are relative to
24917 the top-level embedding RECORD_TYPE's base address. On the
24918 other hand, offsets in GCC's types are relative to the
24919 nested-most variant part. So we have to sum offsets each time
24922 vlr_sub_ctx
.variant_part_offset
24923 = fold_build2 (PLUS_EXPR
, TREE_TYPE (variant_part_offset
),
24924 variant_part_offset
, byte_position (member
));
24925 gen_variant_part (member
, &vlr_sub_ctx
, variant_die
);
24929 vlr_sub_ctx
.variant_part_offset
= variant_part_offset
;
24930 gen_decl_die (member
, NULL
, &vlr_sub_ctx
, variant_die
);
24935 free (discr_lists
);
24938 /* Generate a DIE for a class member. */
24941 gen_member_die (tree type
, dw_die_ref context_die
)
24944 tree binfo
= TYPE_BINFO (type
);
24946 gcc_assert (TYPE_MAIN_VARIANT (type
) == type
);
24948 /* If this is not an incomplete type, output descriptions of each of its
24949 members. Note that as we output the DIEs necessary to represent the
24950 members of this record or union type, we will also be trying to output
24951 DIEs to represent the *types* of those members. However the `type'
24952 function (above) will specifically avoid generating type DIEs for member
24953 types *within* the list of member DIEs for this (containing) type except
24954 for those types (of members) which are explicitly marked as also being
24955 members of this (containing) type themselves. The g++ front- end can
24956 force any given type to be treated as a member of some other (containing)
24957 type by setting the TYPE_CONTEXT of the given (member) type to point to
24958 the TREE node representing the appropriate (containing) type. */
24960 /* First output info about the base classes. */
24963 vec
<tree
, va_gc
> *accesses
= BINFO_BASE_ACCESSES (binfo
);
24967 for (i
= 0; BINFO_BASE_ITERATE (binfo
, i
, base
); i
++)
24968 gen_inheritance_die (base
,
24969 (accesses
? (*accesses
)[i
] : access_public_node
),
24974 /* Now output info about the data members and type members. */
24975 for (member
= TYPE_FIELDS (type
); member
; member
= DECL_CHAIN (member
))
24977 struct vlr_context vlr_ctx
= { type
, NULL_TREE
};
24978 bool static_inline_p
24979 = (TREE_STATIC (member
)
24980 && (lang_hooks
.decls
.decl_dwarf_attribute (member
, DW_AT_inline
)
24983 /* Ignore clones. */
24984 if (DECL_ABSTRACT_ORIGIN (member
))
24987 /* If we thought we were generating minimal debug info for TYPE
24988 and then changed our minds, some of the member declarations
24989 may have already been defined. Don't define them again, but
24990 do put them in the right order. */
24992 if (dw_die_ref child
= lookup_decl_die (member
))
24994 /* Handle inline static data members, which only have in-class
24996 dw_die_ref ref
= NULL
;
24997 if (child
->die_tag
== DW_TAG_variable
24998 && child
->die_parent
== comp_unit_die ())
25000 ref
= get_AT_ref (child
, DW_AT_specification
);
25001 /* For C++17 inline static data members followed by redundant
25002 out of class redeclaration, we might get here with
25003 child being the DIE created for the out of class
25004 redeclaration and with its DW_AT_specification being
25005 the DIE created for in-class definition. We want to
25006 reparent the latter, and don't want to create another
25007 DIE with DW_AT_specification in that case, because
25008 we already have one. */
25011 && ref
->die_tag
== DW_TAG_variable
25012 && ref
->die_parent
== comp_unit_die ()
25013 && get_AT (ref
, DW_AT_specification
) == NULL
)
25017 static_inline_p
= false;
25021 if (child
->die_tag
== DW_TAG_variable
25022 && child
->die_parent
== comp_unit_die ()
25025 reparent_child (child
, context_die
);
25026 if (dwarf_version
< 5)
25027 child
->die_tag
= DW_TAG_member
;
25030 splice_child_die (context_die
, child
);
25033 /* Do not generate standard DWARF for variant parts if we are generating
25034 the corresponding GNAT encodings: DIEs generated for both would
25035 conflict in our mappings. */
25036 else if (is_variant_part (member
)
25037 && gnat_encodings
== DWARF_GNAT_ENCODINGS_MINIMAL
)
25039 vlr_ctx
.variant_part_offset
= byte_position (member
);
25040 gen_variant_part (member
, &vlr_ctx
, context_die
);
25044 vlr_ctx
.variant_part_offset
= NULL_TREE
;
25045 gen_decl_die (member
, NULL
, &vlr_ctx
, context_die
);
25048 /* For C++ inline static data members emit immediately a DW_TAG_variable
25049 DIE that will refer to that DW_TAG_member/DW_TAG_variable through
25050 DW_AT_specification. */
25051 if (static_inline_p
)
25053 int old_extern
= DECL_EXTERNAL (member
);
25054 DECL_EXTERNAL (member
) = 0;
25055 gen_decl_die (member
, NULL
, NULL
, comp_unit_die ());
25056 DECL_EXTERNAL (member
) = old_extern
;
25061 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
25062 is set, we pretend that the type was never defined, so we only get the
25063 member DIEs needed by later specification DIEs. */
25066 gen_struct_or_union_type_die (tree type
, dw_die_ref context_die
,
25067 enum debug_info_usage usage
)
25069 if (TREE_ASM_WRITTEN (type
))
25071 /* Fill in the bound of variable-length fields in late dwarf if
25072 still incomplete. */
25073 if (!early_dwarf
&& variably_modified_type_p (type
, NULL
))
25074 for (tree member
= TYPE_FIELDS (type
);
25076 member
= DECL_CHAIN (member
))
25077 fill_variable_array_bounds (TREE_TYPE (member
));
25081 dw_die_ref type_die
= lookup_type_die (type
);
25082 dw_die_ref scope_die
= 0;
25084 int complete
= (TYPE_SIZE (type
)
25085 && (! TYPE_STUB_DECL (type
)
25086 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type
))));
25087 int ns_decl
= (context_die
&& context_die
->die_tag
== DW_TAG_namespace
);
25088 complete
= complete
&& should_emit_struct_debug (type
, usage
);
25090 if (type_die
&& ! complete
)
25093 if (TYPE_CONTEXT (type
) != NULL_TREE
25094 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type
))
25095 || TREE_CODE (TYPE_CONTEXT (type
)) == NAMESPACE_DECL
))
25098 scope_die
= scope_die_for (type
, context_die
);
25100 /* Generate child dies for template paramaters. */
25101 if (!type_die
&& debug_info_level
> DINFO_LEVEL_TERSE
)
25102 schedule_generic_params_dies_gen (type
);
25104 if (! type_die
|| (nested
&& is_cu_die (scope_die
)))
25105 /* First occurrence of type or toplevel definition of nested class. */
25107 dw_die_ref old_die
= type_die
;
25109 type_die
= new_die (TREE_CODE (type
) == RECORD_TYPE
25110 ? record_type_tag (type
) : DW_TAG_union_type
,
25112 equate_type_number_to_die (type
, type_die
);
25114 add_AT_specification (type_die
, old_die
);
25116 add_name_attribute (type_die
, type_tag (type
));
25119 remove_AT (type_die
, DW_AT_declaration
);
25121 /* If this type has been completed, then give it a byte_size attribute and
25122 then give a list of members. */
25123 if (complete
&& !ns_decl
)
25125 /* Prevent infinite recursion in cases where the type of some member of
25126 this type is expressed in terms of this type itself. */
25127 TREE_ASM_WRITTEN (type
) = 1;
25128 add_byte_size_attribute (type_die
, type
);
25129 add_alignment_attribute (type_die
, type
);
25130 if (TYPE_STUB_DECL (type
) != NULL_TREE
)
25132 add_src_coords_attributes (type_die
, TYPE_STUB_DECL (type
));
25133 add_accessibility_attribute (type_die
, TYPE_STUB_DECL (type
));
25136 /* If the first reference to this type was as the return type of an
25137 inline function, then it may not have a parent. Fix this now. */
25138 if (type_die
->die_parent
== NULL
)
25139 add_child_die (scope_die
, type_die
);
25141 gen_member_die (type
, type_die
);
25143 add_gnat_descriptive_type_attribute (type_die
, type
, context_die
);
25144 if (TYPE_ARTIFICIAL (type
))
25145 add_AT_flag (type_die
, DW_AT_artificial
, 1);
25147 /* GNU extension: Record what type our vtable lives in. */
25148 if (TYPE_VFIELD (type
))
25150 tree vtype
= DECL_FCONTEXT (TYPE_VFIELD (type
));
25152 gen_type_die (vtype
, context_die
);
25153 add_AT_die_ref (type_die
, DW_AT_containing_type
,
25154 lookup_type_die (vtype
));
25159 add_AT_flag (type_die
, DW_AT_declaration
, 1);
25161 /* We don't need to do this for function-local types. */
25162 if (TYPE_STUB_DECL (type
)
25163 && ! decl_function_context (TYPE_STUB_DECL (type
)))
25164 vec_safe_push (incomplete_types
, type
);
25167 if (get_AT (type_die
, DW_AT_name
))
25168 add_pubtype (type
, type_die
);
25171 /* Generate a DIE for a subroutine _type_. */
25174 gen_subroutine_type_die (tree type
, dw_die_ref context_die
)
25176 tree return_type
= TREE_TYPE (type
);
25177 dw_die_ref subr_die
25178 = new_die (DW_TAG_subroutine_type
,
25179 scope_die_for (type
, context_die
), type
);
25181 equate_type_number_to_die (type
, subr_die
);
25182 add_prototyped_attribute (subr_die
, type
);
25183 add_type_attribute (subr_die
, return_type
, TYPE_UNQUALIFIED
, false,
25185 add_alignment_attribute (subr_die
, type
);
25186 gen_formal_types_die (type
, subr_die
);
25188 if (get_AT (subr_die
, DW_AT_name
))
25189 add_pubtype (type
, subr_die
);
25190 if ((dwarf_version
>= 5 || !dwarf_strict
)
25191 && lang_hooks
.types
.type_dwarf_attribute (type
, DW_AT_reference
) != -1)
25192 add_AT_flag (subr_die
, DW_AT_reference
, 1);
25193 if ((dwarf_version
>= 5 || !dwarf_strict
)
25194 && lang_hooks
.types
.type_dwarf_attribute (type
,
25195 DW_AT_rvalue_reference
) != -1)
25196 add_AT_flag (subr_die
, DW_AT_rvalue_reference
, 1);
25199 /* Generate a DIE for a type definition. */
25202 gen_typedef_die (tree decl
, dw_die_ref context_die
)
25204 dw_die_ref type_die
;
25207 if (TREE_ASM_WRITTEN (decl
))
25209 if (DECL_ORIGINAL_TYPE (decl
))
25210 fill_variable_array_bounds (DECL_ORIGINAL_TYPE (decl
));
25214 /* As we avoid creating DIEs for local typedefs (see decl_ultimate_origin
25215 checks in process_scope_var and modified_type_die), this should be called
25216 only for original types. */
25217 gcc_assert (decl_ultimate_origin (decl
) == NULL
25218 || decl_ultimate_origin (decl
) == decl
);
25220 TREE_ASM_WRITTEN (decl
) = 1;
25221 type_die
= new_die (DW_TAG_typedef
, context_die
, decl
);
25223 add_name_and_src_coords_attributes (type_die
, decl
);
25224 if (DECL_ORIGINAL_TYPE (decl
))
25226 type
= DECL_ORIGINAL_TYPE (decl
);
25227 if (type
== error_mark_node
)
25230 gcc_assert (type
!= TREE_TYPE (decl
));
25231 equate_type_number_to_die (TREE_TYPE (decl
), type_die
);
25235 type
= TREE_TYPE (decl
);
25236 if (type
== error_mark_node
)
25239 if (is_naming_typedef_decl (TYPE_NAME (type
)))
25241 /* Here, we are in the case of decl being a typedef naming
25242 an anonymous type, e.g:
25243 typedef struct {...} foo;
25244 In that case TREE_TYPE (decl) is not a typedef variant
25245 type and TYPE_NAME of the anonymous type is set to the
25246 TYPE_DECL of the typedef. This construct is emitted by
25249 TYPE is the anonymous struct named by the typedef
25250 DECL. As we need the DW_AT_type attribute of the
25251 DW_TAG_typedef to point to the DIE of TYPE, let's
25252 generate that DIE right away. add_type_attribute
25253 called below will then pick (via lookup_type_die) that
25254 anonymous struct DIE. */
25255 if (!TREE_ASM_WRITTEN (type
))
25256 gen_tagged_type_die (type
, context_die
, DINFO_USAGE_DIR_USE
);
25258 /* This is a GNU Extension. We are adding a
25259 DW_AT_linkage_name attribute to the DIE of the
25260 anonymous struct TYPE. The value of that attribute
25261 is the name of the typedef decl naming the anonymous
25262 struct. This greatly eases the work of consumers of
25263 this debug info. */
25264 add_linkage_name_raw (lookup_type_die (type
), decl
);
25268 add_type_attribute (type_die
, type
, decl_quals (decl
), false,
25271 if (is_naming_typedef_decl (decl
))
25272 /* We want that all subsequent calls to lookup_type_die with
25273 TYPE in argument yield the DW_TAG_typedef we have just
25275 equate_type_number_to_die (type
, type_die
);
25277 add_alignment_attribute (type_die
, TREE_TYPE (decl
));
25279 add_accessibility_attribute (type_die
, decl
);
25281 if (DECL_ABSTRACT_P (decl
))
25282 equate_decl_number_to_die (decl
, type_die
);
25284 if (get_AT (type_die
, DW_AT_name
))
25285 add_pubtype (decl
, type_die
);
25288 /* Generate a DIE for a struct, class, enum or union type. */
25291 gen_tagged_type_die (tree type
,
25292 dw_die_ref context_die
,
25293 enum debug_info_usage usage
)
25295 if (type
== NULL_TREE
25296 || !is_tagged_type (type
))
25299 if (TREE_ASM_WRITTEN (type
))
25301 /* If this is a nested type whose containing class hasn't been written
25302 out yet, writing it out will cover this one, too. This does not apply
25303 to instantiations of member class templates; they need to be added to
25304 the containing class as they are generated. FIXME: This hurts the
25305 idea of combining type decls from multiple TUs, since we can't predict
25306 what set of template instantiations we'll get. */
25307 else if (TYPE_CONTEXT (type
)
25308 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type
))
25309 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type
)))
25311 gen_type_die_with_usage (TYPE_CONTEXT (type
), context_die
, usage
);
25313 if (TREE_ASM_WRITTEN (type
))
25316 /* If that failed, attach ourselves to the stub. */
25317 context_die
= lookup_type_die (TYPE_CONTEXT (type
));
25319 else if (TYPE_CONTEXT (type
) != NULL_TREE
25320 && (TREE_CODE (TYPE_CONTEXT (type
)) == FUNCTION_DECL
))
25322 /* If this type is local to a function that hasn't been written
25323 out yet, use a NULL context for now; it will be fixed up in
25324 decls_for_scope. */
25325 context_die
= lookup_decl_die (TYPE_CONTEXT (type
));
25326 /* A declaration DIE doesn't count; nested types need to go in the
25328 if (context_die
&& is_declaration_die (context_die
))
25329 context_die
= NULL
;
25332 context_die
= declare_in_namespace (type
, context_die
);
25334 if (TREE_CODE (type
) == ENUMERAL_TYPE
)
25336 /* This might have been written out by the call to
25337 declare_in_namespace. */
25338 if (!TREE_ASM_WRITTEN (type
))
25339 gen_enumeration_type_die (type
, context_die
);
25342 gen_struct_or_union_type_die (type
, context_die
, usage
);
25344 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
25345 it up if it is ever completed. gen_*_type_die will set it for us
25346 when appropriate. */
25349 /* Generate a type description DIE. */
25352 gen_type_die_with_usage (tree type
, dw_die_ref context_die
,
25353 enum debug_info_usage usage
)
25355 struct array_descr_info info
;
25357 if (type
== NULL_TREE
|| type
== error_mark_node
)
25360 if (flag_checking
&& type
)
25361 verify_type (type
);
25363 if (TYPE_NAME (type
) != NULL_TREE
25364 && TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
25365 && is_redundant_typedef (TYPE_NAME (type
))
25366 && DECL_ORIGINAL_TYPE (TYPE_NAME (type
)))
25367 /* The DECL of this type is a typedef we don't want to emit debug
25368 info for but we want debug info for its underlying typedef.
25369 This can happen for e.g, the injected-class-name of a C++
25371 type
= DECL_ORIGINAL_TYPE (TYPE_NAME (type
));
25373 /* If TYPE is a typedef type variant, let's generate debug info
25374 for the parent typedef which TYPE is a type of. */
25375 if (typedef_variant_p (type
))
25377 if (TREE_ASM_WRITTEN (type
))
25380 tree name
= TYPE_NAME (type
);
25381 tree origin
= decl_ultimate_origin (name
);
25382 if (origin
!= NULL
&& origin
!= name
)
25384 gen_decl_die (origin
, NULL
, NULL
, context_die
);
25388 /* Prevent broken recursion; we can't hand off to the same type. */
25389 gcc_assert (DECL_ORIGINAL_TYPE (name
) != type
);
25391 /* Give typedefs the right scope. */
25392 context_die
= scope_die_for (type
, context_die
);
25394 TREE_ASM_WRITTEN (type
) = 1;
25396 gen_decl_die (name
, NULL
, NULL
, context_die
);
25400 /* If type is an anonymous tagged type named by a typedef, let's
25401 generate debug info for the typedef. */
25402 if (is_naming_typedef_decl (TYPE_NAME (type
)))
25404 /* Give typedefs the right scope. */
25405 context_die
= scope_die_for (type
, context_die
);
25407 gen_decl_die (TYPE_NAME (type
), NULL
, NULL
, context_die
);
25411 if (lang_hooks
.types
.get_debug_type
)
25413 tree debug_type
= lang_hooks
.types
.get_debug_type (type
);
25415 if (debug_type
!= NULL_TREE
&& debug_type
!= type
)
25417 gen_type_die_with_usage (debug_type
, context_die
, usage
);
25422 /* We are going to output a DIE to represent the unqualified version
25423 of this type (i.e. without any const or volatile qualifiers) so
25424 get the main variant (i.e. the unqualified version) of this type
25425 now. (Vectors and arrays are special because the debugging info is in the
25426 cloned type itself. Similarly function/method types can contain extra
25427 ref-qualification). */
25428 if (TREE_CODE (type
) == FUNCTION_TYPE
25429 || TREE_CODE (type
) == METHOD_TYPE
)
25431 /* For function/method types, can't use type_main_variant here,
25432 because that can have different ref-qualifiers for C++,
25433 but try to canonicalize. */
25434 tree main
= TYPE_MAIN_VARIANT (type
);
25435 for (tree t
= main
; t
; t
= TYPE_NEXT_VARIANT (t
))
25436 if (TYPE_QUALS_NO_ADDR_SPACE (t
) == 0
25437 && check_base_type (t
, main
)
25438 && check_lang_type (t
, type
))
25444 else if (TREE_CODE (type
) != VECTOR_TYPE
25445 && TREE_CODE (type
) != ARRAY_TYPE
)
25446 type
= type_main_variant (type
);
25448 /* If this is an array type with hidden descriptor, handle it first. */
25449 if (!TREE_ASM_WRITTEN (type
)
25450 && lang_hooks
.types
.get_array_descr_info
)
25452 memset (&info
, 0, sizeof (info
));
25453 if (lang_hooks
.types
.get_array_descr_info (type
, &info
))
25455 /* Fortran sometimes emits array types with no dimension. */
25456 gcc_assert (info
.ndimensions
>= 0
25457 && (info
.ndimensions
25458 <= DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN
));
25459 gen_descr_array_type_die (type
, &info
, context_die
);
25460 TREE_ASM_WRITTEN (type
) = 1;
25465 if (TREE_ASM_WRITTEN (type
))
25467 /* Variable-length types may be incomplete even if
25468 TREE_ASM_WRITTEN. For such types, fall through to
25469 gen_array_type_die() and possibly fill in
25470 DW_AT_{upper,lower}_bound attributes. */
25471 if ((TREE_CODE (type
) != ARRAY_TYPE
25472 && TREE_CODE (type
) != RECORD_TYPE
25473 && TREE_CODE (type
) != UNION_TYPE
25474 && TREE_CODE (type
) != QUAL_UNION_TYPE
)
25475 || !variably_modified_type_p (type
, NULL
))
25479 switch (TREE_CODE (type
))
25485 case REFERENCE_TYPE
:
25486 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
25487 ensures that the gen_type_die recursion will terminate even if the
25488 type is recursive. Recursive types are possible in Ada. */
25489 /* ??? We could perhaps do this for all types before the switch
25491 TREE_ASM_WRITTEN (type
) = 1;
25493 /* For these types, all that is required is that we output a DIE (or a
25494 set of DIEs) to represent the "basis" type. */
25495 gen_type_die_with_usage (TREE_TYPE (type
), context_die
,
25496 DINFO_USAGE_IND_USE
);
25500 /* This code is used for C++ pointer-to-data-member types.
25501 Output a description of the relevant class type. */
25502 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type
), context_die
,
25503 DINFO_USAGE_IND_USE
);
25505 /* Output a description of the type of the object pointed to. */
25506 gen_type_die_with_usage (TREE_TYPE (type
), context_die
,
25507 DINFO_USAGE_IND_USE
);
25509 /* Now output a DIE to represent this pointer-to-data-member type
25511 gen_ptr_to_mbr_type_die (type
, context_die
);
25514 case FUNCTION_TYPE
:
25515 /* Force out return type (in case it wasn't forced out already). */
25516 gen_type_die_with_usage (TREE_TYPE (type
), context_die
,
25517 DINFO_USAGE_DIR_USE
);
25518 gen_subroutine_type_die (type
, context_die
);
25522 /* Force out return type (in case it wasn't forced out already). */
25523 gen_type_die_with_usage (TREE_TYPE (type
), context_die
,
25524 DINFO_USAGE_DIR_USE
);
25525 gen_subroutine_type_die (type
, context_die
);
25530 gen_array_type_die (type
, context_die
);
25533 case ENUMERAL_TYPE
:
25536 case QUAL_UNION_TYPE
:
25537 gen_tagged_type_die (type
, context_die
, usage
);
25543 case FIXED_POINT_TYPE
:
25546 /* No DIEs needed for fundamental types. */
25551 /* Just use DW_TAG_unspecified_type. */
25553 dw_die_ref type_die
= lookup_type_die (type
);
25554 if (type_die
== NULL
)
25556 tree name
= TYPE_IDENTIFIER (type
);
25557 type_die
= new_die (DW_TAG_unspecified_type
, comp_unit_die (),
25559 add_name_attribute (type_die
, IDENTIFIER_POINTER (name
));
25560 equate_type_number_to_die (type
, type_die
);
25566 if (is_cxx_auto (type
))
25568 tree name
= TYPE_IDENTIFIER (type
);
25569 dw_die_ref
*die
= (name
== get_identifier ("auto")
25570 ? &auto_die
: &decltype_auto_die
);
25573 *die
= new_die (DW_TAG_unspecified_type
,
25574 comp_unit_die (), NULL_TREE
);
25575 add_name_attribute (*die
, IDENTIFIER_POINTER (name
));
25577 equate_type_number_to_die (type
, *die
);
25580 gcc_unreachable ();
25583 TREE_ASM_WRITTEN (type
) = 1;
25587 gen_type_die (tree type
, dw_die_ref context_die
)
25589 if (type
!= error_mark_node
)
25591 gen_type_die_with_usage (type
, context_die
, DINFO_USAGE_DIR_USE
);
25594 dw_die_ref die
= lookup_type_die (type
);
25601 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
25602 things which are local to the given block. */
25605 gen_block_die (tree stmt
, dw_die_ref context_die
)
25607 int must_output_die
= 0;
25610 /* Ignore blocks that are NULL. */
25611 if (stmt
== NULL_TREE
)
25614 inlined_func
= inlined_function_outer_scope_p (stmt
);
25616 /* If the block is one fragment of a non-contiguous block, do not
25617 process the variables, since they will have been done by the
25618 origin block. Do process subblocks. */
25619 if (BLOCK_FRAGMENT_ORIGIN (stmt
))
25623 for (sub
= BLOCK_SUBBLOCKS (stmt
); sub
; sub
= BLOCK_CHAIN (sub
))
25624 gen_block_die (sub
, context_die
);
25629 /* Determine if we need to output any Dwarf DIEs at all to represent this
25632 /* The outer scopes for inlinings *must* always be represented. We
25633 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
25634 must_output_die
= 1;
25635 else if (lookup_block_die (stmt
))
25636 /* If we already have a DIE then it was filled early. Meanwhile
25637 we might have pruned all BLOCK_VARS as optimized out but we
25638 still want to generate high/low PC attributes so output it. */
25639 must_output_die
= 1;
25640 else if (TREE_USED (stmt
)
25641 || TREE_ASM_WRITTEN (stmt
))
25643 /* Determine if this block directly contains any "significant"
25644 local declarations which we will need to output DIEs for. */
25645 if (debug_info_level
> DINFO_LEVEL_TERSE
)
25647 /* We are not in terse mode so any local declaration that
25648 is not ignored for debug purposes counts as being a
25649 "significant" one. */
25650 if (BLOCK_NUM_NONLOCALIZED_VARS (stmt
))
25651 must_output_die
= 1;
25653 for (tree var
= BLOCK_VARS (stmt
); var
; var
= DECL_CHAIN (var
))
25654 if (!DECL_IGNORED_P (var
))
25656 must_output_die
= 1;
25660 else if (!dwarf2out_ignore_block (stmt
))
25661 must_output_die
= 1;
25664 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
25665 DIE for any block which contains no significant local declarations at
25666 all. Rather, in such cases we just call `decls_for_scope' so that any
25667 needed Dwarf info for any sub-blocks will get properly generated. Note
25668 that in terse mode, our definition of what constitutes a "significant"
25669 local declaration gets restricted to include only inlined function
25670 instances and local (nested) function definitions. */
25671 if (must_output_die
)
25674 gen_inlined_subroutine_die (stmt
, context_die
);
25676 gen_lexical_block_die (stmt
, context_die
);
25679 decls_for_scope (stmt
, context_die
);
25682 /* Process variable DECL (or variable with origin ORIGIN) within
25683 block STMT and add it to CONTEXT_DIE. */
25685 process_scope_var (tree stmt
, tree decl
, tree origin
, dw_die_ref context_die
)
25688 tree decl_or_origin
= decl
? decl
: origin
;
25690 if (TREE_CODE (decl_or_origin
) == FUNCTION_DECL
)
25691 die
= lookup_decl_die (decl_or_origin
);
25692 else if (TREE_CODE (decl_or_origin
) == TYPE_DECL
)
25694 if (TYPE_DECL_IS_STUB (decl_or_origin
))
25695 die
= lookup_type_die (TREE_TYPE (decl_or_origin
));
25697 die
= lookup_decl_die (decl_or_origin
);
25698 /* Avoid re-creating the DIE late if it was optimized as unused early. */
25699 if (! die
&& ! early_dwarf
)
25705 /* Avoid creating DIEs for local typedefs and concrete static variables that
25706 will only be pruned later. */
25707 if ((origin
|| decl_ultimate_origin (decl
))
25708 && (TREE_CODE (decl_or_origin
) == TYPE_DECL
25709 || (VAR_P (decl_or_origin
) && TREE_STATIC (decl_or_origin
))))
25711 origin
= decl_ultimate_origin (decl_or_origin
);
25712 if (decl
&& VAR_P (decl
) && die
!= NULL
)
25714 die
= lookup_decl_die (origin
);
25716 equate_decl_number_to_die (decl
, die
);
25721 if (die
!= NULL
&& die
->die_parent
== NULL
)
25722 add_child_die (context_die
, die
);
25723 else if (TREE_CODE (decl_or_origin
) == IMPORTED_DECL
)
25726 dwarf2out_imported_module_or_decl_1 (decl_or_origin
, DECL_NAME (decl_or_origin
),
25727 stmt
, context_die
);
25731 if (decl
&& DECL_P (decl
))
25733 die
= lookup_decl_die (decl
);
25735 /* Early created DIEs do not have a parent as the decls refer
25736 to the function as DECL_CONTEXT rather than the BLOCK. */
25737 if (die
&& die
->die_parent
== NULL
)
25739 gcc_assert (in_lto_p
);
25740 add_child_die (context_die
, die
);
25744 gen_decl_die (decl
, origin
, NULL
, context_die
);
25748 /* Generate all of the decls declared within a given scope and (recursively)
25749 all of its sub-blocks. */
25752 decls_for_scope (tree stmt
, dw_die_ref context_die
, bool recurse
)
25758 /* Ignore NULL blocks. */
25759 if (stmt
== NULL_TREE
)
25762 /* Output the DIEs to represent all of the data objects and typedefs
25763 declared directly within this block but not within any nested
25764 sub-blocks. Also, nested function and tag DIEs have been
25765 generated with a parent of NULL; fix that up now. We don't
25766 have to do this if we're at -g1. */
25767 if (debug_info_level
> DINFO_LEVEL_TERSE
)
25769 for (decl
= BLOCK_VARS (stmt
); decl
!= NULL
; decl
= DECL_CHAIN (decl
))
25770 process_scope_var (stmt
, decl
, NULL_TREE
, context_die
);
25771 /* BLOCK_NONLOCALIZED_VARs simply generate DIE stubs with abstract
25772 origin - avoid doing this twice as we have no good way to see
25773 if we've done it once already. */
25775 for (i
= 0; i
< BLOCK_NUM_NONLOCALIZED_VARS (stmt
); i
++)
25777 decl
= BLOCK_NONLOCALIZED_VAR (stmt
, i
);
25778 if (decl
== current_function_decl
)
25779 /* Ignore declarations of the current function, while they
25780 are declarations, gen_subprogram_die would treat them
25781 as definitions again, because they are equal to
25782 current_function_decl and endlessly recurse. */;
25783 else if (TREE_CODE (decl
) == FUNCTION_DECL
)
25784 process_scope_var (stmt
, decl
, NULL_TREE
, context_die
);
25786 process_scope_var (stmt
, NULL_TREE
, decl
, context_die
);
25790 /* Even if we're at -g1, we need to process the subblocks in order to get
25791 inlined call information. */
25793 /* Output the DIEs to represent all sub-blocks (and the items declared
25794 therein) of this block. */
25796 for (subblocks
= BLOCK_SUBBLOCKS (stmt
);
25798 subblocks
= BLOCK_CHAIN (subblocks
))
25799 gen_block_die (subblocks
, context_die
);
25802 /* Is this a typedef we can avoid emitting? */
25805 is_redundant_typedef (const_tree decl
)
25807 if (TYPE_DECL_IS_STUB (decl
))
25810 if (DECL_ARTIFICIAL (decl
)
25811 && DECL_CONTEXT (decl
)
25812 && is_tagged_type (DECL_CONTEXT (decl
))
25813 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl
))) == TYPE_DECL
25814 && DECL_NAME (decl
) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl
))))
25815 /* Also ignore the artificial member typedef for the class name. */
25821 /* Return TRUE if TYPE is a typedef that names a type for linkage
25822 purposes. This kind of typedefs is produced by the C++ FE for
25825 typedef struct {...} foo;
25827 In that case, there is no typedef variant type produced for foo.
25828 Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
25832 is_naming_typedef_decl (const_tree decl
)
25834 if (decl
== NULL_TREE
25835 || TREE_CODE (decl
) != TYPE_DECL
25836 || DECL_NAMELESS (decl
)
25837 || !is_tagged_type (TREE_TYPE (decl
))
25838 || DECL_IS_BUILTIN (decl
)
25839 || is_redundant_typedef (decl
)
25840 /* It looks like Ada produces TYPE_DECLs that are very similar
25841 to C++ naming typedefs but that have different
25842 semantics. Let's be specific to c++ for now. */
25846 return (DECL_ORIGINAL_TYPE (decl
) == NULL_TREE
25847 && TYPE_NAME (TREE_TYPE (decl
)) == decl
25848 && (TYPE_STUB_DECL (TREE_TYPE (decl
))
25849 != TYPE_NAME (TREE_TYPE (decl
))));
25852 /* Looks up the DIE for a context. */
25854 static inline dw_die_ref
25855 lookup_context_die (tree context
)
25859 /* Find die that represents this context. */
25860 if (TYPE_P (context
))
25862 context
= TYPE_MAIN_VARIANT (context
);
25863 dw_die_ref ctx
= lookup_type_die (context
);
25866 return strip_naming_typedef (context
, ctx
);
25869 return lookup_decl_die (context
);
25871 return comp_unit_die ();
25874 /* Returns the DIE for a context. */
25876 static inline dw_die_ref
25877 get_context_die (tree context
)
25881 /* Find die that represents this context. */
25882 if (TYPE_P (context
))
25884 context
= TYPE_MAIN_VARIANT (context
);
25885 return strip_naming_typedef (context
, force_type_die (context
));
25888 return force_decl_die (context
);
25890 return comp_unit_die ();
25893 /* Returns the DIE for decl. A DIE will always be returned. */
25896 force_decl_die (tree decl
)
25898 dw_die_ref decl_die
;
25899 unsigned saved_external_flag
;
25900 tree save_fn
= NULL_TREE
;
25901 decl_die
= lookup_decl_die (decl
);
25904 dw_die_ref context_die
= get_context_die (DECL_CONTEXT (decl
));
25906 decl_die
= lookup_decl_die (decl
);
25910 switch (TREE_CODE (decl
))
25912 case FUNCTION_DECL
:
25913 /* Clear current_function_decl, so that gen_subprogram_die thinks
25914 that this is a declaration. At this point, we just want to force
25915 declaration die. */
25916 save_fn
= current_function_decl
;
25917 current_function_decl
= NULL_TREE
;
25918 gen_subprogram_die (decl
, context_die
);
25919 current_function_decl
= save_fn
;
25923 /* Set external flag to force declaration die. Restore it after
25924 gen_decl_die() call. */
25925 saved_external_flag
= DECL_EXTERNAL (decl
);
25926 DECL_EXTERNAL (decl
) = 1;
25927 gen_decl_die (decl
, NULL
, NULL
, context_die
);
25928 DECL_EXTERNAL (decl
) = saved_external_flag
;
25931 case NAMESPACE_DECL
:
25932 if (dwarf_version
>= 3 || !dwarf_strict
)
25933 dwarf2out_decl (decl
);
25935 /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace. */
25936 decl_die
= comp_unit_die ();
25939 case TRANSLATION_UNIT_DECL
:
25940 decl_die
= comp_unit_die ();
25944 gcc_unreachable ();
25947 /* We should be able to find the DIE now. */
25949 decl_die
= lookup_decl_die (decl
);
25950 gcc_assert (decl_die
);
25956 /* Returns the DIE for TYPE, that must not be a base type. A DIE is
25957 always returned. */
25960 force_type_die (tree type
)
25962 dw_die_ref type_die
;
25964 type_die
= lookup_type_die (type
);
25967 dw_die_ref context_die
= get_context_die (TYPE_CONTEXT (type
));
25969 type_die
= modified_type_die (type
, TYPE_QUALS_NO_ADDR_SPACE (type
),
25970 false, context_die
);
25971 gcc_assert (type_die
);
25976 /* Force out any required namespaces to be able to output DECL,
25977 and return the new context_die for it, if it's changed. */
25980 setup_namespace_context (tree thing
, dw_die_ref context_die
)
25982 tree context
= (DECL_P (thing
)
25983 ? DECL_CONTEXT (thing
) : TYPE_CONTEXT (thing
));
25984 if (context
&& TREE_CODE (context
) == NAMESPACE_DECL
)
25985 /* Force out the namespace. */
25986 context_die
= force_decl_die (context
);
25988 return context_die
;
25991 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
25992 type) within its namespace, if appropriate.
25994 For compatibility with older debuggers, namespace DIEs only contain
25995 declarations; all definitions are emitted at CU scope, with
25996 DW_AT_specification pointing to the declaration (like with class
26000 declare_in_namespace (tree thing
, dw_die_ref context_die
)
26002 dw_die_ref ns_context
;
26004 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26005 return context_die
;
26007 /* External declarations in the local scope only need to be emitted
26008 once, not once in the namespace and once in the scope.
26010 This avoids declaring the `extern' below in the
26011 namespace DIE as well as in the innermost scope:
26024 if (DECL_P (thing
) && DECL_EXTERNAL (thing
) && local_scope_p (context_die
))
26025 return context_die
;
26027 /* If this decl is from an inlined function, then don't try to emit it in its
26028 namespace, as we will get confused. It would have already been emitted
26029 when the abstract instance of the inline function was emitted anyways. */
26030 if (DECL_P (thing
) && DECL_ABSTRACT_ORIGIN (thing
))
26031 return context_die
;
26033 ns_context
= setup_namespace_context (thing
, context_die
);
26035 if (ns_context
!= context_die
)
26039 if (DECL_P (thing
))
26040 gen_decl_die (thing
, NULL
, NULL
, ns_context
);
26042 gen_type_die (thing
, ns_context
);
26044 return context_die
;
26047 /* Generate a DIE for a namespace or namespace alias. */
26050 gen_namespace_die (tree decl
, dw_die_ref context_die
)
26052 dw_die_ref namespace_die
;
26054 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
26055 they are an alias of. */
26056 if (DECL_ABSTRACT_ORIGIN (decl
) == NULL
)
26058 /* Output a real namespace or module. */
26059 context_die
= setup_namespace_context (decl
, comp_unit_die ());
26060 namespace_die
= new_die (is_fortran ()
26061 ? DW_TAG_module
: DW_TAG_namespace
,
26062 context_die
, decl
);
26063 /* For Fortran modules defined in different CU don't add src coords. */
26064 if (namespace_die
->die_tag
== DW_TAG_module
&& DECL_EXTERNAL (decl
))
26066 const char *name
= dwarf2_name (decl
, 0);
26068 add_name_attribute (namespace_die
, name
);
26071 add_name_and_src_coords_attributes (namespace_die
, decl
);
26072 if (DECL_EXTERNAL (decl
))
26073 add_AT_flag (namespace_die
, DW_AT_declaration
, 1);
26074 equate_decl_number_to_die (decl
, namespace_die
);
26078 /* Output a namespace alias. */
26080 /* Force out the namespace we are an alias of, if necessary. */
26081 dw_die_ref origin_die
26082 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl
));
26084 if (DECL_FILE_SCOPE_P (decl
)
26085 || TREE_CODE (DECL_CONTEXT (decl
)) == NAMESPACE_DECL
)
26086 context_die
= setup_namespace_context (decl
, comp_unit_die ());
26087 /* Now create the namespace alias DIE. */
26088 namespace_die
= new_die (DW_TAG_imported_declaration
, context_die
, decl
);
26089 add_name_and_src_coords_attributes (namespace_die
, decl
);
26090 add_AT_die_ref (namespace_die
, DW_AT_import
, origin_die
);
26091 equate_decl_number_to_die (decl
, namespace_die
);
26093 if ((dwarf_version
>= 5 || !dwarf_strict
)
26094 && lang_hooks
.decls
.decl_dwarf_attribute (decl
,
26095 DW_AT_export_symbols
) == 1)
26096 add_AT_flag (namespace_die
, DW_AT_export_symbols
, 1);
26098 /* Bypass dwarf2_name's check for DECL_NAMELESS. */
26099 if (want_pubnames ())
26100 add_pubname_string (lang_hooks
.dwarf_name (decl
, 1), namespace_die
);
26103 /* Generate Dwarf debug information for a decl described by DECL.
26104 The return value is currently only meaningful for PARM_DECLs,
26105 for all other decls it returns NULL.
26107 If DECL is a FIELD_DECL, CTX is required: see the comment for VLR_CONTEXT.
26108 It can be NULL otherwise. */
26111 gen_decl_die (tree decl
, tree origin
, struct vlr_context
*ctx
,
26112 dw_die_ref context_die
)
26114 tree decl_or_origin
= decl
? decl
: origin
;
26115 tree class_origin
= NULL
, ultimate_origin
;
26117 if (DECL_P (decl_or_origin
) && DECL_IGNORED_P (decl_or_origin
))
26120 switch (TREE_CODE (decl_or_origin
))
26126 if (!is_fortran () && !is_ada ())
26128 /* The individual enumerators of an enum type get output when we output
26129 the Dwarf representation of the relevant enum type itself. */
26133 /* Emit its type. */
26134 gen_type_die (TREE_TYPE (decl
), context_die
);
26136 /* And its containing namespace. */
26137 context_die
= declare_in_namespace (decl
, context_die
);
26139 gen_const_die (decl
, context_die
);
26142 case FUNCTION_DECL
:
26145 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
26146 on local redeclarations of global functions. That seems broken. */
26147 if (current_function_decl
!= decl
)
26148 /* This is only a declaration. */;
26151 /* We should have abstract copies already and should not generate
26152 stray type DIEs in late LTO dumping. */
26156 /* If we're emitting a clone, emit info for the abstract instance. */
26157 else if (origin
|| DECL_ORIGIN (decl
) != decl
)
26158 dwarf2out_abstract_function (origin
26159 ? DECL_ORIGIN (origin
)
26160 : DECL_ABSTRACT_ORIGIN (decl
));
26162 /* If we're emitting a possibly inlined function emit it as
26163 abstract instance. */
26164 else if (cgraph_function_possibly_inlined_p (decl
)
26165 && ! DECL_ABSTRACT_P (decl
)
26166 && ! class_or_namespace_scope_p (context_die
)
26167 /* dwarf2out_abstract_function won't emit a die if this is just
26168 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
26169 that case, because that works only if we have a die. */
26170 && DECL_INITIAL (decl
) != NULL_TREE
)
26171 dwarf2out_abstract_function (decl
);
26173 /* Otherwise we're emitting the primary DIE for this decl. */
26174 else if (debug_info_level
> DINFO_LEVEL_TERSE
)
26176 /* Before we describe the FUNCTION_DECL itself, make sure that we
26177 have its containing type. */
26179 origin
= decl_class_context (decl
);
26180 if (origin
!= NULL_TREE
)
26181 gen_type_die (origin
, context_die
);
26183 /* And its return type. */
26184 gen_type_die (TREE_TYPE (TREE_TYPE (decl
)), context_die
);
26186 /* And its virtual context. */
26187 if (DECL_VINDEX (decl
) != NULL_TREE
)
26188 gen_type_die (DECL_CONTEXT (decl
), context_die
);
26190 /* Make sure we have a member DIE for decl. */
26191 if (origin
!= NULL_TREE
)
26192 gen_type_die_for_member (origin
, decl
, context_die
);
26194 /* And its containing namespace. */
26195 context_die
= declare_in_namespace (decl
, context_die
);
26198 /* Now output a DIE to represent the function itself. */
26200 gen_subprogram_die (decl
, context_die
);
26204 /* If we are in terse mode, don't generate any DIEs to represent any
26205 actual typedefs. */
26206 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26209 /* In the special case of a TYPE_DECL node representing the declaration
26210 of some type tag, if the given TYPE_DECL is marked as having been
26211 instantiated from some other (original) TYPE_DECL node (e.g. one which
26212 was generated within the original definition of an inline function) we
26213 used to generate a special (abbreviated) DW_TAG_structure_type,
26214 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing
26215 should be actually referencing those DIEs, as variable DIEs with that
26216 type would be emitted already in the abstract origin, so it was always
26217 removed during unused type prunning. Don't add anything in this
26219 if (TYPE_DECL_IS_STUB (decl
) && decl_ultimate_origin (decl
) != NULL_TREE
)
26222 if (is_redundant_typedef (decl
))
26223 gen_type_die (TREE_TYPE (decl
), context_die
);
26225 /* Output a DIE to represent the typedef itself. */
26226 gen_typedef_die (decl
, context_die
);
26230 if (debug_info_level
>= DINFO_LEVEL_NORMAL
)
26231 gen_label_die (decl
, context_die
);
26236 /* If we are in terse mode, don't generate any DIEs to represent any
26237 variable declarations or definitions. */
26238 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26241 /* Avoid generating stray type DIEs during late dwarf dumping.
26242 All types have been dumped early. */
26244 /* ??? But in LTRANS we cannot annotate early created variably
26245 modified type DIEs without copying them and adjusting all
26246 references to them. Dump them again as happens for inlining
26247 which copies both the decl and the types. */
26248 /* ??? And even non-LTO needs to re-visit type DIEs to fill
26249 in VLA bound information for example. */
26250 || (decl
&& variably_modified_type_p (TREE_TYPE (decl
),
26251 current_function_decl
)))
26253 /* Output any DIEs that are needed to specify the type of this data
26255 if (decl_by_reference_p (decl_or_origin
))
26256 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin
)), context_die
);
26258 gen_type_die (TREE_TYPE (decl_or_origin
), context_die
);
26263 /* And its containing type. */
26264 class_origin
= decl_class_context (decl_or_origin
);
26265 if (class_origin
!= NULL_TREE
)
26266 gen_type_die_for_member (class_origin
, decl_or_origin
, context_die
);
26268 /* And its containing namespace. */
26269 context_die
= declare_in_namespace (decl_or_origin
, context_die
);
26272 /* Now output the DIE to represent the data object itself. This gets
26273 complicated because of the possibility that the VAR_DECL really
26274 represents an inlined instance of a formal parameter for an inline
26276 ultimate_origin
= decl_ultimate_origin (decl_or_origin
);
26277 if (ultimate_origin
!= NULL_TREE
26278 && TREE_CODE (ultimate_origin
) == PARM_DECL
)
26279 gen_formal_parameter_die (decl
, origin
,
26280 true /* Emit name attribute. */,
26283 gen_variable_die (decl
, origin
, context_die
);
26287 gcc_assert (ctx
!= NULL
&& ctx
->struct_type
!= NULL
);
26288 /* Ignore the nameless fields that are used to skip bits but handle C++
26289 anonymous unions and structs. */
26290 if (DECL_NAME (decl
) != NULL_TREE
26291 || TREE_CODE (TREE_TYPE (decl
)) == UNION_TYPE
26292 || TREE_CODE (TREE_TYPE (decl
)) == RECORD_TYPE
)
26294 gen_type_die (member_declared_type (decl
), context_die
);
26295 gen_field_die (decl
, ctx
, context_die
);
26300 /* Avoid generating stray type DIEs during late dwarf dumping.
26301 All types have been dumped early. */
26303 /* ??? But in LTRANS we cannot annotate early created variably
26304 modified type DIEs without copying them and adjusting all
26305 references to them. Dump them again as happens for inlining
26306 which copies both the decl and the types. */
26307 /* ??? And even non-LTO needs to re-visit type DIEs to fill
26308 in VLA bound information for example. */
26309 || (decl
&& variably_modified_type_p (TREE_TYPE (decl
),
26310 current_function_decl
)))
26312 if (DECL_BY_REFERENCE (decl_or_origin
))
26313 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin
)), context_die
);
26315 gen_type_die (TREE_TYPE (decl_or_origin
), context_die
);
26317 return gen_formal_parameter_die (decl
, origin
,
26318 true /* Emit name attribute. */,
26321 case NAMESPACE_DECL
:
26322 if (dwarf_version
>= 3 || !dwarf_strict
)
26323 gen_namespace_die (decl
, context_die
);
26326 case IMPORTED_DECL
:
26327 dwarf2out_imported_module_or_decl_1 (decl
, DECL_NAME (decl
),
26328 DECL_CONTEXT (decl
), context_die
);
26331 case NAMELIST_DECL
:
26332 gen_namelist_decl (DECL_NAME (decl
), context_die
,
26333 NAMELIST_DECL_ASSOCIATED_DECL (decl
));
26337 /* Probably some frontend-internal decl. Assume we don't care. */
26338 gcc_assert ((int)TREE_CODE (decl
) > NUM_TREE_CODES
);
26345 /* Output initial debug information for global DECL. Called at the
26346 end of the parsing process.
26348 This is the initial debug generation process. As such, the DIEs
26349 generated may be incomplete. A later debug generation pass
26350 (dwarf2out_late_global_decl) will augment the information generated
26351 in this pass (e.g., with complete location info). */
26354 dwarf2out_early_global_decl (tree decl
)
26358 /* gen_decl_die() will set DECL_ABSTRACT because
26359 cgraph_function_possibly_inlined_p() returns true. This is in
26360 turn will cause DW_AT_inline attributes to be set.
26362 This happens because at early dwarf generation, there is no
26363 cgraph information, causing cgraph_function_possibly_inlined_p()
26364 to return true. Trick cgraph_function_possibly_inlined_p()
26365 while we generate dwarf early. */
26366 bool save
= symtab
->global_info_ready
;
26367 symtab
->global_info_ready
= true;
26369 /* We don't handle TYPE_DECLs. If required, they'll be reached via
26370 other DECLs and they can point to template types or other things
26371 that dwarf2out can't handle when done via dwarf2out_decl. */
26372 if (TREE_CODE (decl
) != TYPE_DECL
26373 && TREE_CODE (decl
) != PARM_DECL
)
26375 if (TREE_CODE (decl
) == FUNCTION_DECL
)
26377 tree save_fndecl
= current_function_decl
;
26379 /* For nested functions, make sure we have DIEs for the parents first
26380 so that all nested DIEs are generated at the proper scope in the
26382 tree context
= decl_function_context (decl
);
26383 if (context
!= NULL
)
26385 dw_die_ref context_die
= lookup_decl_die (context
);
26386 current_function_decl
= context
;
26388 /* Avoid emitting DIEs multiple times, but still process CONTEXT
26389 enough so that it lands in its own context. This avoids type
26390 pruning issues later on. */
26391 if (context_die
== NULL
|| is_declaration_die (context_die
))
26392 dwarf2out_decl (context
);
26395 /* Emit an abstract origin of a function first. This happens
26396 with C++ constructor clones for example and makes
26397 dwarf2out_abstract_function happy which requires the early
26398 DIE of the abstract instance to be present. */
26399 tree origin
= DECL_ABSTRACT_ORIGIN (decl
);
26400 dw_die_ref origin_die
;
26402 /* Do not emit the DIE multiple times but make sure to
26403 process it fully here in case we just saw a declaration. */
26404 && ((origin_die
= lookup_decl_die (origin
)) == NULL
26405 || is_declaration_die (origin_die
)))
26407 current_function_decl
= origin
;
26408 dwarf2out_decl (origin
);
26411 /* Emit the DIE for decl but avoid doing that multiple times. */
26412 dw_die_ref old_die
;
26413 if ((old_die
= lookup_decl_die (decl
)) == NULL
26414 || is_declaration_die (old_die
))
26416 current_function_decl
= decl
;
26417 dwarf2out_decl (decl
);
26420 current_function_decl
= save_fndecl
;
26423 dwarf2out_decl (decl
);
26425 symtab
->global_info_ready
= save
;
26428 /* Return whether EXPR is an expression with the following pattern:
26429 INDIRECT_REF (NOP_EXPR (INTEGER_CST)). */
26432 is_trivial_indirect_ref (tree expr
)
26434 if (expr
== NULL_TREE
|| TREE_CODE (expr
) != INDIRECT_REF
)
26437 tree nop
= TREE_OPERAND (expr
, 0);
26438 if (nop
== NULL_TREE
|| TREE_CODE (nop
) != NOP_EXPR
)
26441 tree int_cst
= TREE_OPERAND (nop
, 0);
26442 return int_cst
!= NULL_TREE
&& TREE_CODE (int_cst
) == INTEGER_CST
;
26445 /* Output debug information for global decl DECL. Called from
26446 toplev.c after compilation proper has finished. */
26449 dwarf2out_late_global_decl (tree decl
)
26451 /* Fill-in any location information we were unable to determine
26452 on the first pass. */
26455 dw_die_ref die
= lookup_decl_die (decl
);
26457 /* We may have to generate early debug late for LTO in case debug
26458 was not enabled at compile-time or the target doesn't support
26459 the LTO early debug scheme. */
26460 if (! die
&& in_lto_p
)
26462 dwarf2out_decl (decl
);
26463 die
= lookup_decl_die (decl
);
26468 /* We get called via the symtab code invoking late_global_decl
26469 for symbols that are optimized out.
26471 Do not add locations for those, except if they have a
26472 DECL_VALUE_EXPR, in which case they are relevant for debuggers.
26473 Still don't add a location if the DECL_VALUE_EXPR is not a trivial
26474 INDIRECT_REF expression, as this could generate relocations to
26475 text symbols in LTO object files, which is invalid. */
26476 varpool_node
*node
= varpool_node::get (decl
);
26477 if ((! node
|| ! node
->definition
)
26478 && ! (DECL_HAS_VALUE_EXPR_P (decl
)
26479 && is_trivial_indirect_ref (DECL_VALUE_EXPR (decl
))))
26480 tree_add_const_value_attribute_for_decl (die
, decl
);
26482 add_location_or_const_value_attribute (die
, decl
, false);
26487 /* Output debug information for type decl DECL. Called from toplev.c
26488 and from language front ends (to record built-in types). */
26490 dwarf2out_type_decl (tree decl
, int local
)
26495 dwarf2out_decl (decl
);
26499 /* Output debug information for imported module or decl DECL.
26500 NAME is non-NULL name in the lexical block if the decl has been renamed.
26501 LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
26502 that DECL belongs to.
26503 LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK. */
26505 dwarf2out_imported_module_or_decl_1 (tree decl
,
26507 tree lexical_block
,
26508 dw_die_ref lexical_block_die
)
26510 expanded_location xloc
;
26511 dw_die_ref imported_die
= NULL
;
26512 dw_die_ref at_import_die
;
26514 if (TREE_CODE (decl
) == IMPORTED_DECL
)
26516 xloc
= expand_location (DECL_SOURCE_LOCATION (decl
));
26517 decl
= IMPORTED_DECL_ASSOCIATED_DECL (decl
);
26521 xloc
= expand_location (input_location
);
26523 if (TREE_CODE (decl
) == TYPE_DECL
|| TREE_CODE (decl
) == CONST_DECL
)
26525 at_import_die
= force_type_die (TREE_TYPE (decl
));
26526 /* For namespace N { typedef void T; } using N::T; base_type_die
26527 returns NULL, but DW_TAG_imported_declaration requires
26528 the DW_AT_import tag. Force creation of DW_TAG_typedef. */
26529 if (!at_import_die
)
26531 gcc_assert (TREE_CODE (decl
) == TYPE_DECL
);
26532 gen_typedef_die (decl
, get_context_die (DECL_CONTEXT (decl
)));
26533 at_import_die
= lookup_type_die (TREE_TYPE (decl
));
26534 gcc_assert (at_import_die
);
26539 at_import_die
= lookup_decl_die (decl
);
26540 if (!at_import_die
)
26542 /* If we're trying to avoid duplicate debug info, we may not have
26543 emitted the member decl for this field. Emit it now. */
26544 if (TREE_CODE (decl
) == FIELD_DECL
)
26546 tree type
= DECL_CONTEXT (decl
);
26548 if (TYPE_CONTEXT (type
)
26549 && TYPE_P (TYPE_CONTEXT (type
))
26550 && !should_emit_struct_debug (TYPE_CONTEXT (type
),
26551 DINFO_USAGE_DIR_USE
))
26553 gen_type_die_for_member (type
, decl
,
26554 get_context_die (TYPE_CONTEXT (type
)));
26556 if (TREE_CODE (decl
) == NAMELIST_DECL
)
26557 at_import_die
= gen_namelist_decl (DECL_NAME (decl
),
26558 get_context_die (DECL_CONTEXT (decl
)),
26561 at_import_die
= force_decl_die (decl
);
26565 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
26567 if (dwarf_version
>= 3 || !dwarf_strict
)
26568 imported_die
= new_die (DW_TAG_imported_module
,
26575 imported_die
= new_die (DW_TAG_imported_declaration
,
26579 add_AT_file (imported_die
, DW_AT_decl_file
, lookup_filename (xloc
.file
));
26580 add_AT_unsigned (imported_die
, DW_AT_decl_line
, xloc
.line
);
26581 if (debug_column_info
&& xloc
.column
)
26582 add_AT_unsigned (imported_die
, DW_AT_decl_column
, xloc
.column
);
26584 add_AT_string (imported_die
, DW_AT_name
,
26585 IDENTIFIER_POINTER (name
));
26586 add_AT_die_ref (imported_die
, DW_AT_import
, at_import_die
);
26589 /* Output debug information for imported module or decl DECL.
26590 NAME is non-NULL name in context if the decl has been renamed.
26591 CHILD is true if decl is one of the renamed decls as part of
26592 importing whole module.
26593 IMPLICIT is set if this hook is called for an implicit import
26594 such as inline namespace. */
26597 dwarf2out_imported_module_or_decl (tree decl
, tree name
, tree context
,
26598 bool child
, bool implicit
)
26600 /* dw_die_ref at_import_die; */
26601 dw_die_ref scope_die
;
26603 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26608 /* For DWARF5, just DW_AT_export_symbols on the DW_TAG_namespace
26609 should be enough, for DWARF4 and older even if we emit as extension
26610 DW_AT_export_symbols add the implicit DW_TAG_imported_module anyway
26611 for the benefit of consumers unaware of DW_AT_export_symbols. */
26613 && dwarf_version
>= 5
26614 && lang_hooks
.decls
.decl_dwarf_attribute (decl
,
26615 DW_AT_export_symbols
) == 1)
26620 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
26621 We need decl DIE for reference and scope die. First, get DIE for the decl
26624 /* Get the scope die for decl context. Use comp_unit_die for global module
26625 or decl. If die is not found for non globals, force new die. */
26627 && TYPE_P (context
)
26628 && !should_emit_struct_debug (context
, DINFO_USAGE_DIR_USE
))
26631 scope_die
= get_context_die (context
);
26635 /* DW_TAG_imported_module was introduced in the DWARFv3 specification, so
26636 there is nothing we can do, here. */
26637 if (dwarf_version
< 3 && dwarf_strict
)
26640 gcc_assert (scope_die
->die_child
);
26641 gcc_assert (scope_die
->die_child
->die_tag
== DW_TAG_imported_module
);
26642 gcc_assert (TREE_CODE (decl
) != NAMESPACE_DECL
);
26643 scope_die
= scope_die
->die_child
;
26646 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
26647 dwarf2out_imported_module_or_decl_1 (decl
, name
, context
, scope_die
);
26650 /* Output debug information for namelists. */
26653 gen_namelist_decl (tree name
, dw_die_ref scope_die
, tree item_decls
)
26655 dw_die_ref nml_die
, nml_item_die
, nml_item_ref_die
;
26659 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26662 gcc_assert (scope_die
!= NULL
);
26663 nml_die
= new_die (DW_TAG_namelist
, scope_die
, NULL
);
26664 add_AT_string (nml_die
, DW_AT_name
, IDENTIFIER_POINTER (name
));
26666 /* If there are no item_decls, we have a nondefining namelist, e.g.
26667 with USE association; hence, set DW_AT_declaration. */
26668 if (item_decls
== NULL_TREE
)
26670 add_AT_flag (nml_die
, DW_AT_declaration
, 1);
26674 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (item_decls
), i
, value
)
26676 nml_item_ref_die
= lookup_decl_die (value
);
26677 if (!nml_item_ref_die
)
26678 nml_item_ref_die
= force_decl_die (value
);
26680 nml_item_die
= new_die (DW_TAG_namelist_item
, nml_die
, NULL
);
26681 add_AT_die_ref (nml_item_die
, DW_AT_namelist_items
, nml_item_ref_die
);
26687 /* Write the debugging output for DECL and return the DIE. */
26690 dwarf2out_decl (tree decl
)
26692 dw_die_ref context_die
= comp_unit_die ();
26694 switch (TREE_CODE (decl
))
26699 case FUNCTION_DECL
:
26700 /* If we're a nested function, initially use a parent of NULL; if we're
26701 a plain function, this will be fixed up in decls_for_scope. If
26702 we're a method, it will be ignored, since we already have a DIE.
26703 Avoid doing this late though since clones of class methods may
26704 otherwise end up in limbo and create type DIEs late. */
26706 && decl_function_context (decl
)
26707 /* But if we're in terse mode, we don't care about scope. */
26708 && debug_info_level
> DINFO_LEVEL_TERSE
)
26709 context_die
= NULL
;
26713 /* For local statics lookup proper context die. */
26714 if (local_function_static (decl
))
26715 context_die
= lookup_decl_die (DECL_CONTEXT (decl
));
26717 /* If we are in terse mode, don't generate any DIEs to represent any
26718 variable declarations or definitions. */
26719 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26724 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26726 if (!is_fortran () && !is_ada ())
26728 if (TREE_STATIC (decl
) && decl_function_context (decl
))
26729 context_die
= lookup_decl_die (DECL_CONTEXT (decl
));
26732 case NAMESPACE_DECL
:
26733 case IMPORTED_DECL
:
26734 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26736 if (lookup_decl_die (decl
) != NULL
)
26741 /* Don't emit stubs for types unless they are needed by other DIEs. */
26742 if (TYPE_DECL_SUPPRESS_DEBUG (decl
))
26745 /* Don't bother trying to generate any DIEs to represent any of the
26746 normal built-in types for the language we are compiling. */
26747 if (DECL_IS_BUILTIN (decl
))
26750 /* If we are in terse mode, don't generate any DIEs for types. */
26751 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
26754 /* If we're a function-scope tag, initially use a parent of NULL;
26755 this will be fixed up in decls_for_scope. */
26756 if (decl_function_context (decl
))
26757 context_die
= NULL
;
26761 case NAMELIST_DECL
:
26768 gen_decl_die (decl
, NULL
, NULL
, context_die
);
26772 dw_die_ref die
= lookup_decl_die (decl
);
26778 /* Write the debugging output for DECL. */
26781 dwarf2out_function_decl (tree decl
)
26783 dwarf2out_decl (decl
);
26784 call_arg_locations
= NULL
;
26785 call_arg_loc_last
= NULL
;
26786 call_site_count
= -1;
26787 tail_call_site_count
= -1;
26788 decl_loc_table
->empty ();
26789 cached_dw_loc_list_table
->empty ();
26792 /* Output a marker (i.e. a label) for the beginning of the generated code for
26793 a lexical block. */
26796 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED
,
26797 unsigned int blocknum
)
26799 switch_to_section (current_function_section ());
26800 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, BLOCK_BEGIN_LABEL
, blocknum
);
26803 /* Output a marker (i.e. a label) for the end of the generated code for a
26807 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED
, unsigned int blocknum
)
26809 switch_to_section (current_function_section ());
26810 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, BLOCK_END_LABEL
, blocknum
);
26813 /* Returns nonzero if it is appropriate not to emit any debugging
26814 information for BLOCK, because it doesn't contain any instructions.
26816 Don't allow this for blocks with nested functions or local classes
26817 as we would end up with orphans, and in the presence of scheduling
26818 we may end up calling them anyway. */
26821 dwarf2out_ignore_block (const_tree block
)
26826 for (decl
= BLOCK_VARS (block
); decl
; decl
= DECL_CHAIN (decl
))
26827 if (TREE_CODE (decl
) == FUNCTION_DECL
26828 || (TREE_CODE (decl
) == TYPE_DECL
&& TYPE_DECL_IS_STUB (decl
)))
26830 for (i
= 0; i
< BLOCK_NUM_NONLOCALIZED_VARS (block
); i
++)
26832 decl
= BLOCK_NONLOCALIZED_VAR (block
, i
);
26833 if (TREE_CODE (decl
) == FUNCTION_DECL
26834 || (TREE_CODE (decl
) == TYPE_DECL
&& TYPE_DECL_IS_STUB (decl
)))
26841 /* Hash table routines for file_hash. */
26844 dwarf_file_hasher::equal (dwarf_file_data
*p1
, const char *p2
)
26846 return filename_cmp (p1
->filename
, p2
) == 0;
26850 dwarf_file_hasher::hash (dwarf_file_data
*p
)
26852 return htab_hash_string (p
->filename
);
26855 /* Lookup FILE_NAME (in the list of filenames that we know about here in
26856 dwarf2out.c) and return its "index". The index of each (known) filename is
26857 just a unique number which is associated with only that one filename. We
26858 need such numbers for the sake of generating labels (in the .debug_sfnames
26859 section) and references to those files numbers (in the .debug_srcinfo
26860 and .debug_macinfo sections). If the filename given as an argument is not
26861 found in our current list, add it to the list and assign it the next
26862 available unique index number. */
26864 static struct dwarf_file_data
*
26865 lookup_filename (const char *file_name
)
26867 struct dwarf_file_data
* created
;
26872 dwarf_file_data
**slot
26873 = file_table
->find_slot_with_hash (file_name
, htab_hash_string (file_name
),
26878 created
= ggc_alloc
<dwarf_file_data
> ();
26879 created
->filename
= file_name
;
26880 created
->emitted_number
= 0;
26885 /* If the assembler will construct the file table, then translate the compiler
26886 internal file table number into the assembler file table number, and emit
26887 a .file directive if we haven't already emitted one yet. The file table
26888 numbers are different because we prune debug info for unused variables and
26889 types, which may include filenames. */
26892 maybe_emit_file (struct dwarf_file_data
* fd
)
26894 if (! fd
->emitted_number
)
26896 if (last_emitted_file
)
26897 fd
->emitted_number
= last_emitted_file
->emitted_number
+ 1;
26899 fd
->emitted_number
= 1;
26900 last_emitted_file
= fd
;
26902 if (output_asm_line_debug_info ())
26904 fprintf (asm_out_file
, "\t.file %u ", fd
->emitted_number
);
26905 output_quoted_string (asm_out_file
,
26906 remap_debug_filename (fd
->filename
));
26907 fputc ('\n', asm_out_file
);
26911 return fd
->emitted_number
;
26914 /* Schedule generation of a DW_AT_const_value attribute to DIE.
26915 That generation should happen after function debug info has been
26916 generated. The value of the attribute is the constant value of ARG. */
26919 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die
, tree arg
)
26921 die_arg_entry entry
;
26926 gcc_assert (early_dwarf
);
26928 if (!tmpl_value_parm_die_table
)
26929 vec_alloc (tmpl_value_parm_die_table
, 32);
26933 vec_safe_push (tmpl_value_parm_die_table
, entry
);
26936 /* Return TRUE if T is an instance of generic type, FALSE
26940 generic_type_p (tree t
)
26942 if (t
== NULL_TREE
|| !TYPE_P (t
))
26944 return lang_hooks
.get_innermost_generic_parms (t
) != NULL_TREE
;
26947 /* Schedule the generation of the generic parameter dies for the
26948 instance of generic type T. The proper generation itself is later
26949 done by gen_scheduled_generic_parms_dies. */
26952 schedule_generic_params_dies_gen (tree t
)
26954 if (!generic_type_p (t
))
26957 gcc_assert (early_dwarf
);
26959 if (!generic_type_instances
)
26960 vec_alloc (generic_type_instances
, 256);
26962 vec_safe_push (generic_type_instances
, t
);
26965 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
26966 by append_entry_to_tmpl_value_parm_die_table. This function must
26967 be called after function DIEs have been generated. */
26970 gen_remaining_tmpl_value_param_die_attribute (void)
26972 if (tmpl_value_parm_die_table
)
26977 /* We do this in two phases - first get the cases we can
26978 handle during early-finish, preserving those we cannot
26979 (containing symbolic constants where we don't yet know
26980 whether we are going to output the referenced symbols).
26981 For those we try again at late-finish. */
26983 FOR_EACH_VEC_ELT (*tmpl_value_parm_die_table
, i
, e
)
26985 if (!e
->die
->removed
26986 && !tree_add_const_value_attribute (e
->die
, e
->arg
))
26988 dw_loc_descr_ref loc
= NULL
;
26990 && (dwarf_version
>= 5 || !dwarf_strict
))
26991 loc
= loc_descriptor_from_tree (e
->arg
, 2, NULL
);
26993 add_AT_loc (e
->die
, DW_AT_location
, loc
);
26995 (*tmpl_value_parm_die_table
)[j
++] = *e
;
26998 tmpl_value_parm_die_table
->truncate (j
);
27002 /* Generate generic parameters DIEs for instances of generic types
27003 that have been previously scheduled by
27004 schedule_generic_params_dies_gen. This function must be called
27005 after all the types of the CU have been laid out. */
27008 gen_scheduled_generic_parms_dies (void)
27013 if (!generic_type_instances
)
27016 FOR_EACH_VEC_ELT (*generic_type_instances
, i
, t
)
27017 if (COMPLETE_TYPE_P (t
))
27018 gen_generic_params_dies (t
);
27020 generic_type_instances
= NULL
;
27024 /* Replace DW_AT_name for the decl with name. */
27027 dwarf2out_set_name (tree decl
, tree name
)
27030 dw_attr_node
*attr
;
27033 die
= TYPE_SYMTAB_DIE (decl
);
27037 dname
= dwarf2_name (name
, 0);
27041 attr
= get_AT (die
, DW_AT_name
);
27044 struct indirect_string_node
*node
;
27046 node
= find_AT_string (dname
);
27047 /* replace the string. */
27048 attr
->dw_attr_val
.v
.val_str
= node
;
27052 add_name_attribute (die
, dname
);
27055 /* True if before or during processing of the first function being emitted. */
27056 static bool in_first_function_p
= true;
27057 /* True if loc_note during dwarf2out_var_location call might still be
27058 before first real instruction at address equal to .Ltext0. */
27059 static bool maybe_at_text_label_p
= true;
27060 /* One above highest N where .LVLN label might be equal to .Ltext0 label. */
27061 static unsigned int first_loclabel_num_not_at_text_label
;
27063 /* Look ahead for a real insn, or for a begin stmt marker. */
27066 dwarf2out_next_real_insn (rtx_insn
*loc_note
)
27068 rtx_insn
*next_real
= NEXT_INSN (loc_note
);
27071 if (INSN_P (next_real
))
27074 next_real
= NEXT_INSN (next_real
);
27079 /* Called by the final INSN scan whenever we see a var location. We
27080 use it to drop labels in the right places, and throw the location in
27081 our lookup table. */
27084 dwarf2out_var_location (rtx_insn
*loc_note
)
27086 char loclabel
[MAX_ARTIFICIAL_LABEL_BYTES
+ 2];
27087 struct var_loc_node
*newloc
;
27088 rtx_insn
*next_real
, *next_note
;
27089 rtx_insn
*call_insn
= NULL
;
27090 static const char *last_label
;
27091 static const char *last_postcall_label
;
27092 static bool last_in_cold_section_p
;
27093 static rtx_insn
*expected_next_loc_note
;
27096 var_loc_view view
= 0;
27098 if (!NOTE_P (loc_note
))
27100 if (CALL_P (loc_note
))
27102 maybe_reset_location_view (loc_note
, cur_line_info_table
);
27104 if (SIBLING_CALL_P (loc_note
))
27105 tail_call_site_count
++;
27106 if (find_reg_note (loc_note
, REG_CALL_ARG_LOCATION
, NULL_RTX
))
27108 call_insn
= loc_note
;
27112 next_real
= dwarf2out_next_real_insn (call_insn
);
27114 cached_next_real_insn
= NULL
;
27117 if (optimize
== 0 && !flag_var_tracking
)
27119 /* When the var-tracking pass is not running, there is no note
27120 for indirect calls whose target is compile-time known. In this
27121 case, process such calls specifically so that we generate call
27122 sites for them anyway. */
27123 rtx x
= PATTERN (loc_note
);
27124 if (GET_CODE (x
) == PARALLEL
)
27125 x
= XVECEXP (x
, 0, 0);
27126 if (GET_CODE (x
) == SET
)
27128 if (GET_CODE (x
) == CALL
)
27131 || GET_CODE (XEXP (x
, 0)) != SYMBOL_REF
27132 || !SYMBOL_REF_DECL (XEXP (x
, 0))
27133 || (TREE_CODE (SYMBOL_REF_DECL (XEXP (x
, 0)))
27136 call_insn
= loc_note
;
27140 next_real
= dwarf2out_next_real_insn (call_insn
);
27142 cached_next_real_insn
= NULL
;
27147 else if (!debug_variable_location_views
)
27148 gcc_unreachable ();
27150 maybe_reset_location_view (loc_note
, cur_line_info_table
);
27155 var_loc_p
= NOTE_KIND (loc_note
) == NOTE_INSN_VAR_LOCATION
;
27156 if (var_loc_p
&& !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note
)))
27159 /* Optimize processing a large consecutive sequence of location
27160 notes so we don't spend too much time in next_real_insn. If the
27161 next insn is another location note, remember the next_real_insn
27162 calculation for next time. */
27163 next_real
= cached_next_real_insn
;
27166 if (expected_next_loc_note
!= loc_note
)
27170 next_note
= NEXT_INSN (loc_note
);
27172 || next_note
->deleted ()
27173 || ! NOTE_P (next_note
)
27174 || (NOTE_KIND (next_note
) != NOTE_INSN_VAR_LOCATION
27175 && NOTE_KIND (next_note
) != NOTE_INSN_BEGIN_STMT
27176 && NOTE_KIND (next_note
) != NOTE_INSN_INLINE_ENTRY
))
27180 next_real
= dwarf2out_next_real_insn (loc_note
);
27184 expected_next_loc_note
= next_note
;
27185 cached_next_real_insn
= next_real
;
27188 cached_next_real_insn
= NULL
;
27190 /* If there are no instructions which would be affected by this note,
27191 don't do anything. */
27193 && next_real
== NULL_RTX
27194 && !NOTE_DURING_CALL_P (loc_note
))
27199 if (next_real
== NULL_RTX
)
27200 next_real
= get_last_insn ();
27202 /* If there were any real insns between note we processed last time
27203 and this note (or if it is the first note), clear
27204 last_{,postcall_}label so that they are not reused this time. */
27205 if (last_var_location_insn
== NULL_RTX
27206 || last_var_location_insn
!= next_real
27207 || last_in_cold_section_p
!= in_cold_section_p
)
27210 last_postcall_label
= NULL
;
27216 = NOTE_DURING_CALL_P (loc_note
) ? last_postcall_label
: last_label
;
27217 view
= cur_line_info_table
->view
;
27218 decl
= NOTE_VAR_LOCATION_DECL (loc_note
);
27219 newloc
= add_var_loc_to_decl (decl
, loc_note
, label
, view
);
27220 if (newloc
== NULL
)
27229 /* If there were no real insns between note we processed last time
27230 and this note, use the label we emitted last time. Otherwise
27231 create a new label and emit it. */
27232 if (last_label
== NULL
)
27234 ASM_GENERATE_INTERNAL_LABEL (loclabel
, "LVL", loclabel_num
);
27235 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, "LVL", loclabel_num
);
27237 last_label
= ggc_strdup (loclabel
);
27238 /* See if loclabel might be equal to .Ltext0. If yes,
27239 bump first_loclabel_num_not_at_text_label. */
27240 if (!have_multiple_function_sections
27241 && in_first_function_p
27242 && maybe_at_text_label_p
)
27244 static rtx_insn
*last_start
;
27246 for (insn
= loc_note
; insn
; insn
= previous_insn (insn
))
27247 if (insn
== last_start
)
27249 else if (!NONDEBUG_INSN_P (insn
))
27253 rtx body
= PATTERN (insn
);
27254 if (GET_CODE (body
) == USE
|| GET_CODE (body
) == CLOBBER
)
27256 /* Inline asm could occupy zero bytes. */
27257 else if (GET_CODE (body
) == ASM_INPUT
27258 || asm_noperands (body
) >= 0)
27260 #ifdef HAVE_ATTR_length /* ??? We don't include insn-attr.h. */
27261 else if (HAVE_ATTR_length
&& get_attr_min_length (insn
) == 0)
27266 /* Assume insn has non-zero length. */
27267 maybe_at_text_label_p
= false;
27271 if (maybe_at_text_label_p
)
27273 last_start
= loc_note
;
27274 first_loclabel_num_not_at_text_label
= loclabel_num
;
27279 gcc_assert ((loc_note
== NULL_RTX
&& call_insn
!= NULL_RTX
)
27280 || (loc_note
!= NULL_RTX
&& call_insn
== NULL_RTX
));
27284 struct call_arg_loc_node
*ca_loc
27285 = ggc_cleared_alloc
<call_arg_loc_node
> ();
27286 rtx_insn
*prev
= call_insn
;
27288 ca_loc
->call_arg_loc_note
27289 = find_reg_note (call_insn
, REG_CALL_ARG_LOCATION
, NULL_RTX
);
27290 ca_loc
->next
= NULL
;
27291 ca_loc
->label
= last_label
;
27294 || (NONJUMP_INSN_P (prev
)
27295 && GET_CODE (PATTERN (prev
)) == SEQUENCE
27296 && CALL_P (XVECEXP (PATTERN (prev
), 0, 0)))));
27297 if (!CALL_P (prev
))
27298 prev
= as_a
<rtx_sequence
*> (PATTERN (prev
))->insn (0);
27299 ca_loc
->tail_call_p
= SIBLING_CALL_P (prev
);
27301 /* Look for a SYMBOL_REF in the "prev" instruction. */
27302 rtx x
= get_call_rtx_from (PATTERN (prev
));
27305 /* Try to get the call symbol, if any. */
27306 if (MEM_P (XEXP (x
, 0)))
27308 /* First, look for a memory access to a symbol_ref. */
27309 if (GET_CODE (XEXP (x
, 0)) == SYMBOL_REF
27310 && SYMBOL_REF_DECL (XEXP (x
, 0))
27311 && TREE_CODE (SYMBOL_REF_DECL (XEXP (x
, 0))) == FUNCTION_DECL
)
27312 ca_loc
->symbol_ref
= XEXP (x
, 0);
27313 /* Otherwise, look at a compile-time known user-level function
27317 && TREE_CODE (MEM_EXPR (x
)) == FUNCTION_DECL
)
27318 ca_loc
->symbol_ref
= XEXP (DECL_RTL (MEM_EXPR (x
)), 0);
27321 ca_loc
->block
= insn_scope (prev
);
27322 if (call_arg_locations
)
27323 call_arg_loc_last
->next
= ca_loc
;
27325 call_arg_locations
= ca_loc
;
27326 call_arg_loc_last
= ca_loc
;
27328 else if (loc_note
!= NULL_RTX
&& !NOTE_DURING_CALL_P (loc_note
))
27330 newloc
->label
= last_label
;
27331 newloc
->view
= view
;
27335 if (!last_postcall_label
)
27337 sprintf (loclabel
, "%s-1", last_label
);
27338 last_postcall_label
= ggc_strdup (loclabel
);
27340 newloc
->label
= last_postcall_label
;
27341 /* ??? This view is at last_label, not last_label-1, but we
27342 could only assume view at last_label-1 is zero if we could
27343 assume calls always have length greater than one. This is
27344 probably true in general, though there might be a rare
27345 exception to this rule, e.g. if a call insn is optimized out
27346 by target magic. Then, even the -1 in the label will be
27347 wrong, which might invalidate the range. Anyway, using view,
27348 though technically possibly incorrect, will work as far as
27349 ranges go: since L-1 is in the middle of the call insn,
27350 (L-1).0 and (L-1).V shouldn't make any difference, and having
27351 the loclist entry refer to the .loc entry might be useful, so
27352 leave it like this. */
27353 newloc
->view
= view
;
27356 if (var_loc_p
&& flag_debug_asm
)
27358 const char *name
, *sep
, *patstr
;
27359 if (decl
&& DECL_NAME (decl
))
27360 name
= IDENTIFIER_POINTER (DECL_NAME (decl
));
27363 if (NOTE_VAR_LOCATION_LOC (loc_note
))
27366 patstr
= str_pattern_slim (NOTE_VAR_LOCATION_LOC (loc_note
));
27373 fprintf (asm_out_file
, "\t%s DEBUG %s%s%s\n", ASM_COMMENT_START
,
27374 name
, sep
, patstr
);
27377 last_var_location_insn
= next_real
;
27378 last_in_cold_section_p
= in_cold_section_p
;
27381 /* Check whether BLOCK, a lexical block, is nested within OUTER, or is
27382 OUTER itself. If BOTHWAYS, check not only that BLOCK can reach
27383 OUTER through BLOCK_SUPERCONTEXT links, but also that there is a
27384 path from OUTER to BLOCK through BLOCK_SUBBLOCKs and
27385 BLOCK_FRAGMENT_ORIGIN links. */
27387 block_within_block_p (tree block
, tree outer
, bool bothways
)
27389 if (block
== outer
)
27392 /* Quickly check that OUTER is up BLOCK's supercontext chain. */
27393 for (tree context
= BLOCK_SUPERCONTEXT (block
);
27395 context
= BLOCK_SUPERCONTEXT (context
))
27396 if (!context
|| TREE_CODE (context
) != BLOCK
)
27402 /* Now check that each block is actually referenced by its
27404 for (tree context
= BLOCK_SUPERCONTEXT (block
); ;
27405 context
= BLOCK_SUPERCONTEXT (context
))
27407 if (BLOCK_FRAGMENT_ORIGIN (context
))
27409 gcc_assert (!BLOCK_SUBBLOCKS (context
));
27410 context
= BLOCK_FRAGMENT_ORIGIN (context
);
27412 for (tree sub
= BLOCK_SUBBLOCKS (context
);
27414 sub
= BLOCK_CHAIN (sub
))
27417 if (context
== outer
)
27424 /* Called during final while assembling the marker of the entry point
27425 for an inlined function. */
27428 dwarf2out_inline_entry (tree block
)
27430 gcc_assert (debug_inline_points
);
27432 /* If we can't represent it, don't bother. */
27433 if (!(dwarf_version
>= 3 || !dwarf_strict
))
27436 gcc_assert (DECL_P (block_ultimate_origin (block
)));
27438 /* Sanity check the block tree. This would catch a case in which
27439 BLOCK got removed from the tree reachable from the outermost
27440 lexical block, but got retained in markers. It would still link
27441 back to its parents, but some ancestor would be missing a link
27442 down the path to the sub BLOCK. If the block got removed, its
27443 BLOCK_NUMBER will not be a usable value. */
27445 gcc_assert (block_within_block_p (block
,
27446 DECL_INITIAL (current_function_decl
),
27449 gcc_assert (inlined_function_outer_scope_p (block
));
27450 gcc_assert (!lookup_block_die (block
));
27452 if (BLOCK_FRAGMENT_ORIGIN (block
))
27453 block
= BLOCK_FRAGMENT_ORIGIN (block
);
27454 /* Can the entry point ever not be at the beginning of an
27455 unfragmented lexical block? */
27456 else if (!(BLOCK_FRAGMENT_CHAIN (block
)
27457 || (cur_line_info_table
27458 && !ZERO_VIEW_P (cur_line_info_table
->view
))))
27461 if (!inline_entry_data_table
)
27462 inline_entry_data_table
27463 = hash_table
<inline_entry_data_hasher
>::create_ggc (10);
27466 inline_entry_data
**iedp
27467 = inline_entry_data_table
->find_slot_with_hash (block
,
27468 htab_hash_pointer (block
),
27471 /* ??? Ideally, we'd record all entry points for the same inlined
27472 function (some may have been duplicated by e.g. unrolling), but
27473 we have no way to represent that ATM. */
27476 inline_entry_data
*ied
= *iedp
= ggc_cleared_alloc
<inline_entry_data
> ();
27477 ied
->block
= block
;
27478 ied
->label_pfx
= BLOCK_INLINE_ENTRY_LABEL
;
27479 ied
->label_num
= BLOCK_NUMBER (block
);
27480 if (cur_line_info_table
)
27481 ied
->view
= cur_line_info_table
->view
;
27483 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
27485 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_INLINE_ENTRY_LABEL
,
27486 BLOCK_NUMBER (block
));
27487 ASM_OUTPUT_LABEL (asm_out_file
, label
);
27490 /* Called from finalize_size_functions for size functions so that their body
27491 can be encoded in the debug info to describe the layout of variable-length
27495 dwarf2out_size_function (tree decl
)
27497 function_to_dwarf_procedure (decl
);
27500 /* Note in one location list that text section has changed. */
27503 var_location_switch_text_section_1 (var_loc_list
**slot
, void *)
27505 var_loc_list
*list
= *slot
;
27507 list
->last_before_switch
27508 = list
->last
->next
? list
->last
->next
: list
->last
;
27512 /* Note in all location lists that text section has changed. */
27515 var_location_switch_text_section (void)
27517 if (decl_loc_table
== NULL
)
27520 decl_loc_table
->traverse
<void *, var_location_switch_text_section_1
> (NULL
);
27523 /* Create a new line number table. */
27525 static dw_line_info_table
*
27526 new_line_info_table (void)
27528 dw_line_info_table
*table
;
27530 table
= ggc_cleared_alloc
<dw_line_info_table
> ();
27531 table
->file_num
= 1;
27532 table
->line_num
= 1;
27533 table
->is_stmt
= DWARF_LINE_DEFAULT_IS_STMT_START
;
27534 FORCE_RESET_NEXT_VIEW (table
->view
);
27535 table
->symviews_since_reset
= 0;
27540 /* Lookup the "current" table into which we emit line info, so
27541 that we don't have to do it for every source line. */
27544 set_cur_line_info_table (section
*sec
)
27546 dw_line_info_table
*table
;
27548 if (sec
== text_section
)
27549 table
= text_section_line_info
;
27550 else if (sec
== cold_text_section
)
27552 table
= cold_text_section_line_info
;
27555 cold_text_section_line_info
= table
= new_line_info_table ();
27556 table
->end_label
= cold_end_label
;
27561 const char *end_label
;
27563 if (crtl
->has_bb_partition
)
27565 if (in_cold_section_p
)
27566 end_label
= crtl
->subsections
.cold_section_end_label
;
27568 end_label
= crtl
->subsections
.hot_section_end_label
;
27572 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
27573 ASM_GENERATE_INTERNAL_LABEL (label
, FUNC_END_LABEL
,
27574 current_function_funcdef_no
);
27575 end_label
= ggc_strdup (label
);
27578 table
= new_line_info_table ();
27579 table
->end_label
= end_label
;
27581 vec_safe_push (separate_line_info
, table
);
27584 if (output_asm_line_debug_info ())
27585 table
->is_stmt
= (cur_line_info_table
27586 ? cur_line_info_table
->is_stmt
27587 : DWARF_LINE_DEFAULT_IS_STMT_START
);
27588 cur_line_info_table
= table
;
27592 /* We need to reset the locations at the beginning of each
27593 function. We can't do this in the end_function hook, because the
27594 declarations that use the locations won't have been output when
27595 that hook is called. Also compute have_multiple_function_sections here. */
27598 dwarf2out_begin_function (tree fun
)
27600 section
*sec
= function_section (fun
);
27602 if (sec
!= text_section
)
27603 have_multiple_function_sections
= true;
27605 if (crtl
->has_bb_partition
&& !cold_text_section
)
27607 gcc_assert (current_function_decl
== fun
);
27608 cold_text_section
= unlikely_text_section ();
27609 switch_to_section (cold_text_section
);
27610 ASM_OUTPUT_LABEL (asm_out_file
, cold_text_section_label
);
27611 switch_to_section (sec
);
27614 dwarf2out_note_section_used ();
27615 call_site_count
= 0;
27616 tail_call_site_count
= 0;
27618 set_cur_line_info_table (sec
);
27619 FORCE_RESET_NEXT_VIEW (cur_line_info_table
->view
);
27622 /* Helper function of dwarf2out_end_function, called only after emitting
27623 the very first function into assembly. Check if some .debug_loc range
27624 might end with a .LVL* label that could be equal to .Ltext0.
27625 In that case we must force using absolute addresses in .debug_loc ranges,
27626 because this range could be .LVLN-.Ltext0 .. .LVLM-.Ltext0 for
27627 .LVLN == .LVLM == .Ltext0, thus 0 .. 0, which is a .debug_loc
27629 Set have_multiple_function_sections to true in that case and
27630 terminate htab traversal. */
27633 find_empty_loc_ranges_at_text_label (var_loc_list
**slot
, int)
27635 var_loc_list
*entry
= *slot
;
27636 struct var_loc_node
*node
;
27638 node
= entry
->first
;
27639 if (node
&& node
->next
&& node
->next
->label
)
27642 const char *label
= node
->next
->label
;
27643 char loclabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
27645 for (i
= 0; i
< first_loclabel_num_not_at_text_label
; i
++)
27647 ASM_GENERATE_INTERNAL_LABEL (loclabel
, "LVL", i
);
27648 if (strcmp (label
, loclabel
) == 0)
27650 have_multiple_function_sections
= true;
27658 /* Hook called after emitting a function into assembly.
27659 This does something only for the very first function emitted. */
27662 dwarf2out_end_function (unsigned int)
27664 if (in_first_function_p
27665 && !have_multiple_function_sections
27666 && first_loclabel_num_not_at_text_label
27668 decl_loc_table
->traverse
<int, find_empty_loc_ranges_at_text_label
> (0);
27669 in_first_function_p
= false;
27670 maybe_at_text_label_p
= false;
27673 /* Temporary holder for dwarf2out_register_main_translation_unit. Used to let
27674 front-ends register a translation unit even before dwarf2out_init is
27676 static tree main_translation_unit
= NULL_TREE
;
27678 /* Hook called by front-ends after they built their main translation unit.
27679 Associate comp_unit_die to UNIT. */
27682 dwarf2out_register_main_translation_unit (tree unit
)
27684 gcc_assert (TREE_CODE (unit
) == TRANSLATION_UNIT_DECL
27685 && main_translation_unit
== NULL_TREE
);
27686 main_translation_unit
= unit
;
27687 /* If dwarf2out_init has not been called yet, it will perform the association
27688 itself looking at main_translation_unit. */
27689 if (decl_die_table
!= NULL
)
27690 equate_decl_number_to_die (unit
, comp_unit_die ());
27693 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE. */
27696 push_dw_line_info_entry (dw_line_info_table
*table
,
27697 enum dw_line_info_opcode opcode
, unsigned int val
)
27699 dw_line_info_entry e
;
27702 vec_safe_push (table
->entries
, e
);
27705 /* Output a label to mark the beginning of a source code line entry
27706 and record information relating to this source line, in
27707 'line_info_table' for later output of the .debug_line section. */
27708 /* ??? The discriminator parameter ought to be unsigned. */
27711 dwarf2out_source_line (unsigned int line
, unsigned int column
,
27712 const char *filename
,
27713 int discriminator
, bool is_stmt
)
27715 unsigned int file_num
;
27716 dw_line_info_table
*table
;
27717 static var_loc_view lvugid
;
27719 if (debug_info_level
< DINFO_LEVEL_TERSE
)
27722 table
= cur_line_info_table
;
27726 if (debug_variable_location_views
27727 && output_asm_line_debug_info ()
27728 && table
&& !RESETTING_VIEW_P (table
->view
))
27730 /* If we're using the assembler to compute view numbers, we
27731 can't issue a .loc directive for line zero, so we can't
27732 get a view number at this point. We might attempt to
27733 compute it from the previous view, or equate it to a
27734 subsequent view (though it might not be there!), but
27735 since we're omitting the line number entry, we might as
27736 well omit the view number as well. That means pretending
27737 it's a view number zero, which might very well turn out
27738 to be correct. ??? Extend the assembler so that the
27739 compiler could emit e.g. ".locview .LVU#", to output a
27740 view without changing line number information. We'd then
27741 have to count it in symviews_since_reset; when it's omitted,
27742 it doesn't count. */
27744 zero_view_p
= BITMAP_GGC_ALLOC ();
27745 bitmap_set_bit (zero_view_p
, table
->view
);
27746 if (flag_debug_asm
)
27748 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
27749 ASM_GENERATE_INTERNAL_LABEL (label
, "LVU", table
->view
);
27750 fprintf (asm_out_file
, "\t%s line 0, omitted view ",
27751 ASM_COMMENT_START
);
27752 assemble_name (asm_out_file
, label
);
27753 putc ('\n', asm_out_file
);
27755 table
->view
= ++lvugid
;
27760 /* The discriminator column was added in dwarf4. Simplify the below
27761 by simply removing it if we're not supposed to output it. */
27762 if (dwarf_version
< 4 && dwarf_strict
)
27765 if (!debug_column_info
)
27768 file_num
= maybe_emit_file (lookup_filename (filename
));
27770 /* ??? TODO: Elide duplicate line number entries. Traditionally,
27771 the debugger has used the second (possibly duplicate) line number
27772 at the beginning of the function to mark the end of the prologue.
27773 We could eliminate any other duplicates within the function. For
27774 Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
27775 that second line number entry. */
27776 /* Recall that this end-of-prologue indication is *not* the same thing
27777 as the end_prologue debug hook. The NOTE_INSN_PROLOGUE_END note,
27778 to which the hook corresponds, follows the last insn that was
27779 emitted by gen_prologue. What we need is to precede the first insn
27780 that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
27781 insn that corresponds to something the user wrote. These may be
27782 very different locations once scheduling is enabled. */
27784 if (0 && file_num
== table
->file_num
27785 && line
== table
->line_num
27786 && column
== table
->column_num
27787 && discriminator
== table
->discrim_num
27788 && is_stmt
== table
->is_stmt
)
27791 switch_to_section (current_function_section ());
27793 /* If requested, emit something human-readable. */
27794 if (flag_debug_asm
)
27796 if (debug_column_info
)
27797 fprintf (asm_out_file
, "\t%s %s:%d:%d\n", ASM_COMMENT_START
,
27798 filename
, line
, column
);
27800 fprintf (asm_out_file
, "\t%s %s:%d\n", ASM_COMMENT_START
,
27804 if (output_asm_line_debug_info ())
27806 /* Emit the .loc directive understood by GNU as. */
27807 /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
27808 file_num, line, is_stmt, discriminator */
27809 fputs ("\t.loc ", asm_out_file
);
27810 fprint_ul (asm_out_file
, file_num
);
27811 putc (' ', asm_out_file
);
27812 fprint_ul (asm_out_file
, line
);
27813 putc (' ', asm_out_file
);
27814 fprint_ul (asm_out_file
, column
);
27816 if (is_stmt
!= table
->is_stmt
)
27818 #if HAVE_GAS_LOC_STMT
27819 fputs (" is_stmt ", asm_out_file
);
27820 putc (is_stmt
? '1' : '0', asm_out_file
);
27823 if (SUPPORTS_DISCRIMINATOR
&& discriminator
!= 0)
27825 gcc_assert (discriminator
> 0);
27826 fputs (" discriminator ", asm_out_file
);
27827 fprint_ul (asm_out_file
, (unsigned long) discriminator
);
27829 if (debug_variable_location_views
)
27831 if (!RESETTING_VIEW_P (table
->view
))
27833 table
->symviews_since_reset
++;
27834 if (table
->symviews_since_reset
> symview_upper_bound
)
27835 symview_upper_bound
= table
->symviews_since_reset
;
27836 /* When we're using the assembler to compute view
27837 numbers, we output symbolic labels after "view" in
27838 .loc directives, and the assembler will set them for
27839 us, so that we can refer to the view numbers in
27840 location lists. The only exceptions are when we know
27841 a view will be zero: "-0" is a forced reset, used
27842 e.g. in the beginning of functions, whereas "0" tells
27843 the assembler to check that there was a PC change
27844 since the previous view, in a way that implicitly
27845 resets the next view. */
27846 fputs (" view ", asm_out_file
);
27847 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
27848 ASM_GENERATE_INTERNAL_LABEL (label
, "LVU", table
->view
);
27849 assemble_name (asm_out_file
, label
);
27850 table
->view
= ++lvugid
;
27854 table
->symviews_since_reset
= 0;
27855 if (FORCE_RESETTING_VIEW_P (table
->view
))
27856 fputs (" view -0", asm_out_file
);
27858 fputs (" view 0", asm_out_file
);
27859 /* Mark the present view as a zero view. Earlier debug
27860 binds may have already added its id to loclists to be
27861 emitted later, so we can't reuse the id for something
27862 else. However, it's good to know whether a view is
27863 known to be zero, because then we may be able to
27864 optimize out locviews that are all zeros, so take
27865 note of it in zero_view_p. */
27867 zero_view_p
= BITMAP_GGC_ALLOC ();
27868 bitmap_set_bit (zero_view_p
, lvugid
);
27869 table
->view
= ++lvugid
;
27872 putc ('\n', asm_out_file
);
27876 unsigned int label_num
= ++line_info_label_num
;
27878 targetm
.asm_out
.internal_label (asm_out_file
, LINE_CODE_LABEL
, label_num
);
27880 if (debug_variable_location_views
&& !RESETTING_VIEW_P (table
->view
))
27881 push_dw_line_info_entry (table
, LI_adv_address
, label_num
);
27883 push_dw_line_info_entry (table
, LI_set_address
, label_num
);
27884 if (debug_variable_location_views
)
27886 bool resetting
= FORCE_RESETTING_VIEW_P (table
->view
);
27890 if (flag_debug_asm
)
27891 fprintf (asm_out_file
, "\t%s view %s%d\n",
27893 resetting
? "-" : "",
27898 if (file_num
!= table
->file_num
)
27899 push_dw_line_info_entry (table
, LI_set_file
, file_num
);
27900 if (discriminator
!= table
->discrim_num
)
27901 push_dw_line_info_entry (table
, LI_set_discriminator
, discriminator
);
27902 if (is_stmt
!= table
->is_stmt
)
27903 push_dw_line_info_entry (table
, LI_negate_stmt
, 0);
27904 push_dw_line_info_entry (table
, LI_set_line
, line
);
27905 if (debug_column_info
)
27906 push_dw_line_info_entry (table
, LI_set_column
, column
);
27909 table
->file_num
= file_num
;
27910 table
->line_num
= line
;
27911 table
->column_num
= column
;
27912 table
->discrim_num
= discriminator
;
27913 table
->is_stmt
= is_stmt
;
27914 table
->in_use
= true;
27917 /* Record the beginning of a new source file. */
27920 dwarf2out_start_source_file (unsigned int lineno
, const char *filename
)
27922 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
27925 e
.code
= DW_MACINFO_start_file
;
27927 e
.info
= ggc_strdup (filename
);
27928 vec_safe_push (macinfo_table
, e
);
27932 /* Record the end of a source file. */
27935 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED
)
27937 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
27940 e
.code
= DW_MACINFO_end_file
;
27943 vec_safe_push (macinfo_table
, e
);
27947 /* Called from debug_define in toplev.c. The `buffer' parameter contains
27948 the tail part of the directive line, i.e. the part which is past the
27949 initial whitespace, #, whitespace, directive-name, whitespace part. */
27952 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED
,
27953 const char *buffer ATTRIBUTE_UNUSED
)
27955 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
27958 /* Insert a dummy first entry to be able to optimize the whole
27959 predefined macro block using DW_MACRO_import. */
27960 if (macinfo_table
->is_empty () && lineno
<= 1)
27965 vec_safe_push (macinfo_table
, e
);
27967 e
.code
= DW_MACINFO_define
;
27969 e
.info
= ggc_strdup (buffer
);
27970 vec_safe_push (macinfo_table
, e
);
27974 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
27975 the tail part of the directive line, i.e. the part which is past the
27976 initial whitespace, #, whitespace, directive-name, whitespace part. */
27979 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED
,
27980 const char *buffer ATTRIBUTE_UNUSED
)
27982 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
27985 /* Insert a dummy first entry to be able to optimize the whole
27986 predefined macro block using DW_MACRO_import. */
27987 if (macinfo_table
->is_empty () && lineno
<= 1)
27992 vec_safe_push (macinfo_table
, e
);
27994 e
.code
= DW_MACINFO_undef
;
27996 e
.info
= ggc_strdup (buffer
);
27997 vec_safe_push (macinfo_table
, e
);
28001 /* Helpers to manipulate hash table of CUs. */
28003 struct macinfo_entry_hasher
: nofree_ptr_hash
<macinfo_entry
>
28005 static inline hashval_t
hash (const macinfo_entry
*);
28006 static inline bool equal (const macinfo_entry
*, const macinfo_entry
*);
28010 macinfo_entry_hasher::hash (const macinfo_entry
*entry
)
28012 return htab_hash_string (entry
->info
);
28016 macinfo_entry_hasher::equal (const macinfo_entry
*entry1
,
28017 const macinfo_entry
*entry2
)
28019 return !strcmp (entry1
->info
, entry2
->info
);
28022 typedef hash_table
<macinfo_entry_hasher
> macinfo_hash_type
;
28024 /* Output a single .debug_macinfo entry. */
28027 output_macinfo_op (macinfo_entry
*ref
)
28031 struct indirect_string_node
*node
;
28032 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
28033 struct dwarf_file_data
*fd
;
28037 case DW_MACINFO_start_file
:
28038 fd
= lookup_filename (ref
->info
);
28039 file_num
= maybe_emit_file (fd
);
28040 dw2_asm_output_data (1, DW_MACINFO_start_file
, "Start new file");
28041 dw2_asm_output_data_uleb128 (ref
->lineno
,
28042 "Included from line number %lu",
28043 (unsigned long) ref
->lineno
);
28044 dw2_asm_output_data_uleb128 (file_num
, "file %s", ref
->info
);
28046 case DW_MACINFO_end_file
:
28047 dw2_asm_output_data (1, DW_MACINFO_end_file
, "End file");
28049 case DW_MACINFO_define
:
28050 case DW_MACINFO_undef
:
28051 len
= strlen (ref
->info
) + 1;
28053 && len
> DWARF_OFFSET_SIZE
28054 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
28055 && (debug_str_section
->common
.flags
& SECTION_MERGE
) != 0)
28057 ref
->code
= ref
->code
== DW_MACINFO_define
28058 ? DW_MACRO_define_strp
: DW_MACRO_undef_strp
;
28059 output_macinfo_op (ref
);
28062 dw2_asm_output_data (1, ref
->code
,
28063 ref
->code
== DW_MACINFO_define
28064 ? "Define macro" : "Undefine macro");
28065 dw2_asm_output_data_uleb128 (ref
->lineno
, "At line number %lu",
28066 (unsigned long) ref
->lineno
);
28067 dw2_asm_output_nstring (ref
->info
, -1, "The macro");
28069 case DW_MACRO_define_strp
:
28070 case DW_MACRO_undef_strp
:
28071 node
= find_AT_string (ref
->info
);
28073 && (node
->form
== DW_FORM_strp
28074 || node
->form
== dwarf_FORM (DW_FORM_strx
)));
28075 dw2_asm_output_data (1, ref
->code
,
28076 ref
->code
== DW_MACRO_define_strp
28077 ? "Define macro strp"
28078 : "Undefine macro strp");
28079 dw2_asm_output_data_uleb128 (ref
->lineno
, "At line number %lu",
28080 (unsigned long) ref
->lineno
);
28081 if (node
->form
== DW_FORM_strp
)
28082 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, node
->label
,
28083 debug_str_section
, "The macro: \"%s\"",
28086 dw2_asm_output_data_uleb128 (node
->index
, "The macro: \"%s\"",
28089 case DW_MACRO_import
:
28090 dw2_asm_output_data (1, ref
->code
, "Import");
28091 ASM_GENERATE_INTERNAL_LABEL (label
,
28092 DEBUG_MACRO_SECTION_LABEL
,
28093 ref
->lineno
+ macinfo_label_base
);
28094 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, label
, NULL
, NULL
);
28097 fprintf (asm_out_file
, "%s unrecognized macinfo code %lu\n",
28098 ASM_COMMENT_START
, (unsigned long) ref
->code
);
28103 /* Attempt to make a sequence of define/undef macinfo ops shareable with
28104 other compilation unit .debug_macinfo sections. IDX is the first
28105 index of a define/undef, return the number of ops that should be
28106 emitted in a comdat .debug_macinfo section and emit
28107 a DW_MACRO_import entry referencing it.
28108 If the define/undef entry should be emitted normally, return 0. */
28111 optimize_macinfo_range (unsigned int idx
, vec
<macinfo_entry
, va_gc
> *files
,
28112 macinfo_hash_type
**macinfo_htab
)
28114 macinfo_entry
*first
, *second
, *cur
, *inc
;
28115 char linebuf
[sizeof (HOST_WIDE_INT
) * 3 + 1];
28116 unsigned char checksum
[16];
28117 struct md5_ctx ctx
;
28118 char *grp_name
, *tail
;
28120 unsigned int i
, count
, encoded_filename_len
, linebuf_len
;
28121 macinfo_entry
**slot
;
28123 first
= &(*macinfo_table
)[idx
];
28124 second
= &(*macinfo_table
)[idx
+ 1];
28126 /* Optimize only if there are at least two consecutive define/undef ops,
28127 and either all of them are before first DW_MACINFO_start_file
28128 with lineno {0,1} (i.e. predefined macro block), or all of them are
28129 in some included header file. */
28130 if (second
->code
!= DW_MACINFO_define
&& second
->code
!= DW_MACINFO_undef
)
28132 if (vec_safe_is_empty (files
))
28134 if (first
->lineno
> 1 || second
->lineno
> 1)
28137 else if (first
->lineno
== 0)
28140 /* Find the last define/undef entry that can be grouped together
28141 with first and at the same time compute md5 checksum of their
28142 codes, linenumbers and strings. */
28143 md5_init_ctx (&ctx
);
28144 for (i
= idx
; macinfo_table
->iterate (i
, &cur
); i
++)
28145 if (cur
->code
!= DW_MACINFO_define
&& cur
->code
!= DW_MACINFO_undef
)
28147 else if (vec_safe_is_empty (files
) && cur
->lineno
> 1)
28151 unsigned char code
= cur
->code
;
28152 md5_process_bytes (&code
, 1, &ctx
);
28153 checksum_uleb128 (cur
->lineno
, &ctx
);
28154 md5_process_bytes (cur
->info
, strlen (cur
->info
) + 1, &ctx
);
28156 md5_finish_ctx (&ctx
, checksum
);
28159 /* From the containing include filename (if any) pick up just
28160 usable characters from its basename. */
28161 if (vec_safe_is_empty (files
))
28164 base
= lbasename (files
->last ().info
);
28165 for (encoded_filename_len
= 0, i
= 0; base
[i
]; i
++)
28166 if (ISIDNUM (base
[i
]) || base
[i
] == '.')
28167 encoded_filename_len
++;
28168 /* Count . at the end. */
28169 if (encoded_filename_len
)
28170 encoded_filename_len
++;
28172 sprintf (linebuf
, HOST_WIDE_INT_PRINT_UNSIGNED
, first
->lineno
);
28173 linebuf_len
= strlen (linebuf
);
28175 /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum> */
28176 grp_name
= XALLOCAVEC (char, 4 + encoded_filename_len
+ linebuf_len
+ 1
28178 memcpy (grp_name
, DWARF_OFFSET_SIZE
== 4 ? "wm4." : "wm8.", 4);
28179 tail
= grp_name
+ 4;
28180 if (encoded_filename_len
)
28182 for (i
= 0; base
[i
]; i
++)
28183 if (ISIDNUM (base
[i
]) || base
[i
] == '.')
28187 memcpy (tail
, linebuf
, linebuf_len
);
28188 tail
+= linebuf_len
;
28190 for (i
= 0; i
< 16; i
++)
28191 sprintf (tail
+ i
* 2, "%02x", checksum
[i
] & 0xff);
28193 /* Construct a macinfo_entry for DW_MACRO_import
28194 in the empty vector entry before the first define/undef. */
28195 inc
= &(*macinfo_table
)[idx
- 1];
28196 inc
->code
= DW_MACRO_import
;
28198 inc
->info
= ggc_strdup (grp_name
);
28199 if (!*macinfo_htab
)
28200 *macinfo_htab
= new macinfo_hash_type (10);
28201 /* Avoid emitting duplicates. */
28202 slot
= (*macinfo_htab
)->find_slot (inc
, INSERT
);
28207 /* If such an entry has been used before, just emit
28208 a DW_MACRO_import op. */
28210 output_macinfo_op (inc
);
28211 /* And clear all macinfo_entry in the range to avoid emitting them
28212 in the second pass. */
28213 for (i
= idx
; macinfo_table
->iterate (i
, &cur
) && i
< idx
+ count
; i
++)
28222 inc
->lineno
= (*macinfo_htab
)->elements ();
28223 output_macinfo_op (inc
);
28228 /* Save any strings needed by the macinfo table in the debug str
28229 table. All strings must be collected into the table by the time
28230 index_string is called. */
28233 save_macinfo_strings (void)
28237 macinfo_entry
*ref
;
28239 for (i
= 0; macinfo_table
&& macinfo_table
->iterate (i
, &ref
); i
++)
28243 /* Match the logic in output_macinfo_op to decide on
28244 indirect strings. */
28245 case DW_MACINFO_define
:
28246 case DW_MACINFO_undef
:
28247 len
= strlen (ref
->info
) + 1;
28249 && len
> DWARF_OFFSET_SIZE
28250 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
28251 && (debug_str_section
->common
.flags
& SECTION_MERGE
) != 0)
28252 set_indirect_string (find_AT_string (ref
->info
));
28254 case DW_MACINFO_start_file
:
28255 /* -gsplit-dwarf -g3 will also output filename as indirect
28257 if (!dwarf_split_debug_info
)
28259 /* Fall through. */
28260 case DW_MACRO_define_strp
:
28261 case DW_MACRO_undef_strp
:
28262 set_indirect_string (find_AT_string (ref
->info
));
28270 /* Output macinfo section(s). */
28273 output_macinfo (const char *debug_line_label
, bool early_lto_debug
)
28276 unsigned long length
= vec_safe_length (macinfo_table
);
28277 macinfo_entry
*ref
;
28278 vec
<macinfo_entry
, va_gc
> *files
= NULL
;
28279 macinfo_hash_type
*macinfo_htab
= NULL
;
28280 char dl_section_ref
[MAX_ARTIFICIAL_LABEL_BYTES
];
28285 /* output_macinfo* uses these interchangeably. */
28286 gcc_assert ((int) DW_MACINFO_define
== (int) DW_MACRO_define
28287 && (int) DW_MACINFO_undef
== (int) DW_MACRO_undef
28288 && (int) DW_MACINFO_start_file
== (int) DW_MACRO_start_file
28289 && (int) DW_MACINFO_end_file
== (int) DW_MACRO_end_file
);
28291 /* AIX Assembler inserts the length, so adjust the reference to match the
28292 offset expected by debuggers. */
28293 strcpy (dl_section_ref
, debug_line_label
);
28294 if (XCOFF_DEBUGGING_INFO
)
28295 strcat (dl_section_ref
, DWARF_INITIAL_LENGTH_SIZE_STR
);
28297 /* For .debug_macro emit the section header. */
28298 if (!dwarf_strict
|| dwarf_version
>= 5)
28300 dw2_asm_output_data (2, dwarf_version
>= 5 ? 5 : 4,
28301 "DWARF macro version number");
28302 if (DWARF_OFFSET_SIZE
== 8)
28303 dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
28305 dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
28306 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_line_label
,
28307 debug_line_section
, NULL
);
28310 /* In the first loop, it emits the primary .debug_macinfo section
28311 and after each emitted op the macinfo_entry is cleared.
28312 If a longer range of define/undef ops can be optimized using
28313 DW_MACRO_import, the DW_MACRO_import op is emitted and kept in
28314 the vector before the first define/undef in the range and the
28315 whole range of define/undef ops is not emitted and kept. */
28316 for (i
= 0; macinfo_table
->iterate (i
, &ref
); i
++)
28320 case DW_MACINFO_start_file
:
28321 vec_safe_push (files
, *ref
);
28323 case DW_MACINFO_end_file
:
28324 if (!vec_safe_is_empty (files
))
28327 case DW_MACINFO_define
:
28328 case DW_MACINFO_undef
:
28329 if ((!dwarf_strict
|| dwarf_version
>= 5)
28330 && HAVE_COMDAT_GROUP
28331 && vec_safe_length (files
) != 1
28334 && (*macinfo_table
)[i
- 1].code
== 0)
28336 unsigned count
= optimize_macinfo_range (i
, files
, &macinfo_htab
);
28345 /* A dummy entry may be inserted at the beginning to be able
28346 to optimize the whole block of predefined macros. */
28352 output_macinfo_op (ref
);
28360 /* Save the number of transparent includes so we can adjust the
28361 label number for the fat LTO object DWARF. */
28362 unsigned macinfo_label_base_adj
= macinfo_htab
->elements ();
28364 delete macinfo_htab
;
28365 macinfo_htab
= NULL
;
28367 /* If any DW_MACRO_import were used, on those DW_MACRO_import entries
28368 terminate the current chain and switch to a new comdat .debug_macinfo
28369 section and emit the define/undef entries within it. */
28370 for (i
= 0; macinfo_table
->iterate (i
, &ref
); i
++)
28375 case DW_MACRO_import
:
28377 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
28378 tree comdat_key
= get_identifier (ref
->info
);
28379 /* Terminate the previous .debug_macinfo section. */
28380 dw2_asm_output_data (1, 0, "End compilation unit");
28381 targetm
.asm_out
.named_section (debug_macinfo_section_name
,
28385 ? SECTION_EXCLUDE
: 0),
28387 ASM_GENERATE_INTERNAL_LABEL (label
,
28388 DEBUG_MACRO_SECTION_LABEL
,
28389 ref
->lineno
+ macinfo_label_base
);
28390 ASM_OUTPUT_LABEL (asm_out_file
, label
);
28393 dw2_asm_output_data (2, dwarf_version
>= 5 ? 5 : 4,
28394 "DWARF macro version number");
28395 if (DWARF_OFFSET_SIZE
== 8)
28396 dw2_asm_output_data (1, 1, "Flags: 64-bit");
28398 dw2_asm_output_data (1, 0, "Flags: 32-bit");
28401 case DW_MACINFO_define
:
28402 case DW_MACINFO_undef
:
28403 output_macinfo_op (ref
);
28408 gcc_unreachable ();
28411 macinfo_label_base
+= macinfo_label_base_adj
;
28414 /* Initialize the various sections and labels for dwarf output and prefix
28415 them with PREFIX if non-NULL. Returns the generation (zero based
28416 number of times function was called). */
28419 init_sections_and_labels (bool early_lto_debug
)
28421 /* As we may get called multiple times have a generation count for
28423 static unsigned generation
= 0;
28425 if (early_lto_debug
)
28427 if (!dwarf_split_debug_info
)
28429 debug_info_section
= get_section (DEBUG_LTO_INFO_SECTION
,
28430 SECTION_DEBUG
| SECTION_EXCLUDE
,
28432 debug_abbrev_section
= get_section (DEBUG_LTO_ABBREV_SECTION
,
28433 SECTION_DEBUG
| SECTION_EXCLUDE
,
28435 debug_macinfo_section_name
28436 = ((dwarf_strict
&& dwarf_version
< 5)
28437 ? DEBUG_LTO_MACINFO_SECTION
: DEBUG_LTO_MACRO_SECTION
);
28438 debug_macinfo_section
= get_section (debug_macinfo_section_name
,
28440 | SECTION_EXCLUDE
, NULL
);
28444 /* ??? Which of the following do we need early? */
28445 debug_info_section
= get_section (DEBUG_LTO_DWO_INFO_SECTION
,
28446 SECTION_DEBUG
| SECTION_EXCLUDE
,
28448 debug_abbrev_section
= get_section (DEBUG_LTO_DWO_ABBREV_SECTION
,
28449 SECTION_DEBUG
| SECTION_EXCLUDE
,
28451 debug_skeleton_info_section
= get_section (DEBUG_LTO_INFO_SECTION
,
28453 | SECTION_EXCLUDE
, NULL
);
28454 debug_skeleton_abbrev_section
28455 = get_section (DEBUG_LTO_ABBREV_SECTION
,
28456 SECTION_DEBUG
| SECTION_EXCLUDE
, NULL
);
28457 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label
,
28458 DEBUG_SKELETON_ABBREV_SECTION_LABEL
,
28461 /* Somewhat confusing detail: The skeleton_[abbrev|info] sections
28462 stay in the main .o, but the skeleton_line goes into the split
28464 debug_skeleton_line_section
28465 = get_section (DEBUG_LTO_LINE_SECTION
,
28466 SECTION_DEBUG
| SECTION_EXCLUDE
, NULL
);
28467 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label
,
28468 DEBUG_SKELETON_LINE_SECTION_LABEL
,
28470 debug_str_offsets_section
28471 = get_section (DEBUG_LTO_DWO_STR_OFFSETS_SECTION
,
28472 SECTION_DEBUG
| SECTION_EXCLUDE
,
28474 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label
,
28475 DEBUG_SKELETON_INFO_SECTION_LABEL
,
28477 debug_str_dwo_section
= get_section (DEBUG_LTO_STR_DWO_SECTION
,
28478 DEBUG_STR_DWO_SECTION_FLAGS
,
28480 debug_macinfo_section_name
28481 = ((dwarf_strict
&& dwarf_version
< 5)
28482 ? DEBUG_LTO_DWO_MACINFO_SECTION
: DEBUG_LTO_DWO_MACRO_SECTION
);
28483 debug_macinfo_section
= get_section (debug_macinfo_section_name
,
28484 SECTION_DEBUG
| SECTION_EXCLUDE
,
28487 /* For macro info and the file table we have to refer to a
28488 debug_line section. */
28489 debug_line_section
= get_section (DEBUG_LTO_LINE_SECTION
,
28490 SECTION_DEBUG
| SECTION_EXCLUDE
, NULL
);
28491 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label
,
28492 DEBUG_LINE_SECTION_LABEL
, generation
);
28494 debug_str_section
= get_section (DEBUG_LTO_STR_SECTION
,
28495 DEBUG_STR_SECTION_FLAGS
28496 | SECTION_EXCLUDE
, NULL
);
28497 if (!dwarf_split_debug_info
)
28498 debug_line_str_section
28499 = get_section (DEBUG_LTO_LINE_STR_SECTION
,
28500 DEBUG_STR_SECTION_FLAGS
| SECTION_EXCLUDE
, NULL
);
28504 if (!dwarf_split_debug_info
)
28506 debug_info_section
= get_section (DEBUG_INFO_SECTION
,
28507 SECTION_DEBUG
, NULL
);
28508 debug_abbrev_section
= get_section (DEBUG_ABBREV_SECTION
,
28509 SECTION_DEBUG
, NULL
);
28510 debug_loc_section
= get_section (dwarf_version
>= 5
28511 ? DEBUG_LOCLISTS_SECTION
28512 : DEBUG_LOC_SECTION
,
28513 SECTION_DEBUG
, NULL
);
28514 debug_macinfo_section_name
28515 = ((dwarf_strict
&& dwarf_version
< 5)
28516 ? DEBUG_MACINFO_SECTION
: DEBUG_MACRO_SECTION
);
28517 debug_macinfo_section
= get_section (debug_macinfo_section_name
,
28518 SECTION_DEBUG
, NULL
);
28522 debug_info_section
= get_section (DEBUG_DWO_INFO_SECTION
,
28523 SECTION_DEBUG
| SECTION_EXCLUDE
,
28525 debug_abbrev_section
= get_section (DEBUG_DWO_ABBREV_SECTION
,
28526 SECTION_DEBUG
| SECTION_EXCLUDE
,
28528 debug_addr_section
= get_section (DEBUG_ADDR_SECTION
,
28529 SECTION_DEBUG
, NULL
);
28530 debug_skeleton_info_section
= get_section (DEBUG_INFO_SECTION
,
28531 SECTION_DEBUG
, NULL
);
28532 debug_skeleton_abbrev_section
= get_section (DEBUG_ABBREV_SECTION
,
28533 SECTION_DEBUG
, NULL
);
28534 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label
,
28535 DEBUG_SKELETON_ABBREV_SECTION_LABEL
,
28538 /* Somewhat confusing detail: The skeleton_[abbrev|info] sections
28539 stay in the main .o, but the skeleton_line goes into the
28541 debug_skeleton_line_section
28542 = get_section (DEBUG_DWO_LINE_SECTION
,
28543 SECTION_DEBUG
| SECTION_EXCLUDE
, NULL
);
28544 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label
,
28545 DEBUG_SKELETON_LINE_SECTION_LABEL
,
28547 debug_str_offsets_section
28548 = get_section (DEBUG_DWO_STR_OFFSETS_SECTION
,
28549 SECTION_DEBUG
| SECTION_EXCLUDE
, NULL
);
28550 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label
,
28551 DEBUG_SKELETON_INFO_SECTION_LABEL
,
28553 debug_loc_section
= get_section (dwarf_version
>= 5
28554 ? DEBUG_DWO_LOCLISTS_SECTION
28555 : DEBUG_DWO_LOC_SECTION
,
28556 SECTION_DEBUG
| SECTION_EXCLUDE
,
28558 debug_str_dwo_section
= get_section (DEBUG_STR_DWO_SECTION
,
28559 DEBUG_STR_DWO_SECTION_FLAGS
,
28561 debug_macinfo_section_name
28562 = ((dwarf_strict
&& dwarf_version
< 5)
28563 ? DEBUG_DWO_MACINFO_SECTION
: DEBUG_DWO_MACRO_SECTION
);
28564 debug_macinfo_section
= get_section (debug_macinfo_section_name
,
28565 SECTION_DEBUG
| SECTION_EXCLUDE
,
28568 debug_aranges_section
= get_section (DEBUG_ARANGES_SECTION
,
28569 SECTION_DEBUG
, NULL
);
28570 debug_line_section
= get_section (DEBUG_LINE_SECTION
,
28571 SECTION_DEBUG
, NULL
);
28572 debug_pubnames_section
= get_section (DEBUG_PUBNAMES_SECTION
,
28573 SECTION_DEBUG
, NULL
);
28574 debug_pubtypes_section
= get_section (DEBUG_PUBTYPES_SECTION
,
28575 SECTION_DEBUG
, NULL
);
28576 debug_str_section
= get_section (DEBUG_STR_SECTION
,
28577 DEBUG_STR_SECTION_FLAGS
, NULL
);
28578 if (!dwarf_split_debug_info
&& !output_asm_line_debug_info ())
28579 debug_line_str_section
= get_section (DEBUG_LINE_STR_SECTION
,
28580 DEBUG_STR_SECTION_FLAGS
, NULL
);
28582 debug_ranges_section
= get_section (dwarf_version
>= 5
28583 ? DEBUG_RNGLISTS_SECTION
28584 : DEBUG_RANGES_SECTION
,
28585 SECTION_DEBUG
, NULL
);
28586 debug_frame_section
= get_section (DEBUG_FRAME_SECTION
,
28587 SECTION_DEBUG
, NULL
);
28590 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label
,
28591 DEBUG_ABBREV_SECTION_LABEL
, generation
);
28592 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label
,
28593 DEBUG_INFO_SECTION_LABEL
, generation
);
28594 info_section_emitted
= false;
28595 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label
,
28596 DEBUG_LINE_SECTION_LABEL
, generation
);
28597 /* There are up to 4 unique ranges labels per generation.
28598 See also output_rnglists. */
28599 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label
,
28600 DEBUG_RANGES_SECTION_LABEL
, generation
* 4);
28601 if (dwarf_version
>= 5 && dwarf_split_debug_info
)
28602 ASM_GENERATE_INTERNAL_LABEL (ranges_base_label
,
28603 DEBUG_RANGES_SECTION_LABEL
,
28604 1 + generation
* 4);
28605 ASM_GENERATE_INTERNAL_LABEL (debug_addr_section_label
,
28606 DEBUG_ADDR_SECTION_LABEL
, generation
);
28607 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label
,
28608 (dwarf_strict
&& dwarf_version
< 5)
28609 ? DEBUG_MACINFO_SECTION_LABEL
28610 : DEBUG_MACRO_SECTION_LABEL
, generation
);
28611 ASM_GENERATE_INTERNAL_LABEL (loc_section_label
, DEBUG_LOC_SECTION_LABEL
,
28615 return generation
- 1;
28618 /* Set up for Dwarf output at the start of compilation. */
28621 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED
)
28623 /* Allocate the file_table. */
28624 file_table
= hash_table
<dwarf_file_hasher
>::create_ggc (50);
28626 #ifndef DWARF2_LINENO_DEBUGGING_INFO
28627 /* Allocate the decl_die_table. */
28628 decl_die_table
= hash_table
<decl_die_hasher
>::create_ggc (10);
28630 /* Allocate the decl_loc_table. */
28631 decl_loc_table
= hash_table
<decl_loc_hasher
>::create_ggc (10);
28633 /* Allocate the cached_dw_loc_list_table. */
28634 cached_dw_loc_list_table
= hash_table
<dw_loc_list_hasher
>::create_ggc (10);
28636 /* Allocate the initial hunk of the abbrev_die_table. */
28637 vec_alloc (abbrev_die_table
, 256);
28638 /* Zero-th entry is allocated, but unused. */
28639 abbrev_die_table
->quick_push (NULL
);
28641 /* Allocate the dwarf_proc_stack_usage_map. */
28642 dwarf_proc_stack_usage_map
= new hash_map
<dw_die_ref
, int>;
28644 /* Allocate the pubtypes and pubnames vectors. */
28645 vec_alloc (pubname_table
, 32);
28646 vec_alloc (pubtype_table
, 32);
28648 vec_alloc (incomplete_types
, 64);
28650 vec_alloc (used_rtx_array
, 32);
28652 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
28653 vec_alloc (macinfo_table
, 64);
28656 /* If front-ends already registered a main translation unit but we were not
28657 ready to perform the association, do this now. */
28658 if (main_translation_unit
!= NULL_TREE
)
28659 equate_decl_number_to_die (main_translation_unit
, comp_unit_die ());
28662 /* Called before compile () starts outputtting functions, variables
28663 and toplevel asms into assembly. */
28666 dwarf2out_assembly_start (void)
28668 if (text_section_line_info
)
28671 #ifndef DWARF2_LINENO_DEBUGGING_INFO
28672 ASM_GENERATE_INTERNAL_LABEL (text_section_label
, TEXT_SECTION_LABEL
, 0);
28673 ASM_GENERATE_INTERNAL_LABEL (text_end_label
, TEXT_END_LABEL
, 0);
28674 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label
,
28675 COLD_TEXT_SECTION_LABEL
, 0);
28676 ASM_GENERATE_INTERNAL_LABEL (cold_end_label
, COLD_END_LABEL
, 0);
28678 switch_to_section (text_section
);
28679 ASM_OUTPUT_LABEL (asm_out_file
, text_section_label
);
28682 /* Make sure the line number table for .text always exists. */
28683 text_section_line_info
= new_line_info_table ();
28684 text_section_line_info
->end_label
= text_end_label
;
28686 #ifdef DWARF2_LINENO_DEBUGGING_INFO
28687 cur_line_info_table
= text_section_line_info
;
28690 if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
28691 && dwarf2out_do_cfi_asm ()
28692 && !dwarf2out_do_eh_frame ())
28693 fprintf (asm_out_file
, "\t.cfi_sections\t.debug_frame\n");
28696 /* A helper function for dwarf2out_finish called through
28697 htab_traverse. Assign a string its index. All strings must be
28698 collected into the table by the time index_string is called,
28699 because the indexing code relies on htab_traverse to traverse nodes
28700 in the same order for each run. */
28703 index_string (indirect_string_node
**h
, unsigned int *index
)
28705 indirect_string_node
*node
= *h
;
28707 find_string_form (node
);
28708 if (node
->form
== dwarf_FORM (DW_FORM_strx
) && node
->refcount
> 0)
28710 gcc_assert (node
->index
== NO_INDEX_ASSIGNED
);
28711 node
->index
= *index
;
28717 /* A helper function for output_indirect_strings called through
28718 htab_traverse. Output the offset to a string and update the
28722 output_index_string_offset (indirect_string_node
**h
, unsigned int *offset
)
28724 indirect_string_node
*node
= *h
;
28726 if (node
->form
== dwarf_FORM (DW_FORM_strx
) && node
->refcount
> 0)
28728 /* Assert that this node has been assigned an index. */
28729 gcc_assert (node
->index
!= NO_INDEX_ASSIGNED
28730 && node
->index
!= NOT_INDEXED
);
28731 dw2_asm_output_data (DWARF_OFFSET_SIZE
, *offset
,
28732 "indexed string 0x%x: %s", node
->index
, node
->str
);
28733 *offset
+= strlen (node
->str
) + 1;
28738 /* A helper function for dwarf2out_finish called through
28739 htab_traverse. Output the indexed string. */
28742 output_index_string (indirect_string_node
**h
, unsigned int *cur_idx
)
28744 struct indirect_string_node
*node
= *h
;
28746 if (node
->form
== dwarf_FORM (DW_FORM_strx
) && node
->refcount
> 0)
28748 /* Assert that the strings are output in the same order as their
28749 indexes were assigned. */
28750 gcc_assert (*cur_idx
== node
->index
);
28751 assemble_string (node
->str
, strlen (node
->str
) + 1);
28757 /* A helper function for output_indirect_strings. Counts the number
28758 of index strings offsets. Must match the logic of the functions
28759 output_index_string[_offsets] above. */
28761 count_index_strings (indirect_string_node
**h
, unsigned int *last_idx
)
28763 struct indirect_string_node
*node
= *h
;
28765 if (node
->form
== dwarf_FORM (DW_FORM_strx
) && node
->refcount
> 0)
28770 /* A helper function for dwarf2out_finish called through
28771 htab_traverse. Emit one queued .debug_str string. */
28774 output_indirect_string (indirect_string_node
**h
, enum dwarf_form form
)
28776 struct indirect_string_node
*node
= *h
;
28778 node
->form
= find_string_form (node
);
28779 if (node
->form
== form
&& node
->refcount
> 0)
28781 ASM_OUTPUT_LABEL (asm_out_file
, node
->label
);
28782 assemble_string (node
->str
, strlen (node
->str
) + 1);
28788 /* Output the indexed string table. */
28791 output_indirect_strings (void)
28793 switch_to_section (debug_str_section
);
28794 if (!dwarf_split_debug_info
)
28795 debug_str_hash
->traverse
<enum dwarf_form
,
28796 output_indirect_string
> (DW_FORM_strp
);
28799 unsigned int offset
= 0;
28800 unsigned int cur_idx
= 0;
28802 if (skeleton_debug_str_hash
)
28803 skeleton_debug_str_hash
->traverse
<enum dwarf_form
,
28804 output_indirect_string
> (DW_FORM_strp
);
28806 switch_to_section (debug_str_offsets_section
);
28807 /* For DWARF5 the .debug_str_offsets[.dwo] section needs a unit
28808 header. Note that we don't need to generate a label to the
28809 actual index table following the header here, because this is
28810 for the split dwarf case only. In an .dwo file there is only
28811 one string offsets table (and one debug info section). But
28812 if we would start using string offset tables for the main (or
28813 skeleton) unit, then we have to add a DW_AT_str_offsets_base
28814 pointing to the actual index after the header. Split dwarf
28815 units will never have a string offsets base attribute. When
28816 a split unit is moved into a .dwp file the string offsets can
28817 be found through the .debug_cu_index section table. */
28818 if (dwarf_version
>= 5)
28820 unsigned int last_idx
= 0;
28821 unsigned long str_offsets_length
;
28823 debug_str_hash
->traverse_noresize
28824 <unsigned int *, count_index_strings
> (&last_idx
);
28825 str_offsets_length
= last_idx
* DWARF_OFFSET_SIZE
+ 4;
28826 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
28827 dw2_asm_output_data (4, 0xffffffff,
28828 "Escape value for 64-bit DWARF extension");
28829 dw2_asm_output_data (DWARF_OFFSET_SIZE
, str_offsets_length
,
28830 "Length of string offsets unit");
28831 dw2_asm_output_data (2, 5, "DWARF string offsets version");
28832 dw2_asm_output_data (2, 0, "Header zero padding");
28834 debug_str_hash
->traverse_noresize
28835 <unsigned int *, output_index_string_offset
> (&offset
);
28836 switch_to_section (debug_str_dwo_section
);
28837 debug_str_hash
->traverse_noresize
<unsigned int *, output_index_string
>
28842 /* Callback for htab_traverse to assign an index to an entry in the
28843 table, and to write that entry to the .debug_addr section. */
28846 output_addr_table_entry (addr_table_entry
**slot
, unsigned int *cur_index
)
28848 addr_table_entry
*entry
= *slot
;
28850 if (entry
->refcount
== 0)
28852 gcc_assert (entry
->index
== NO_INDEX_ASSIGNED
28853 || entry
->index
== NOT_INDEXED
);
28857 gcc_assert (entry
->index
== *cur_index
);
28860 switch (entry
->kind
)
28863 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
, entry
->addr
.rtl
,
28864 "0x%x", entry
->index
);
28866 case ate_kind_rtx_dtprel
:
28867 gcc_assert (targetm
.asm_out
.output_dwarf_dtprel
);
28868 targetm
.asm_out
.output_dwarf_dtprel (asm_out_file
,
28871 fputc ('\n', asm_out_file
);
28873 case ate_kind_label
:
28874 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, entry
->addr
.label
,
28875 "0x%x", entry
->index
);
28878 gcc_unreachable ();
28883 /* A helper function for dwarf2out_finish. Counts the number
28884 of indexed addresses. Must match the logic of the functions
28885 output_addr_table_entry above. */
28887 count_index_addrs (addr_table_entry
**slot
, unsigned int *last_idx
)
28889 addr_table_entry
*entry
= *slot
;
28891 if (entry
->refcount
> 0)
28896 /* Produce the .debug_addr section. */
28899 output_addr_table (void)
28901 unsigned int index
= 0;
28902 if (addr_index_table
== NULL
|| addr_index_table
->size () == 0)
28905 switch_to_section (debug_addr_section
);
28907 ->traverse_noresize
<unsigned int *, output_addr_table_entry
> (&index
);
28910 #if ENABLE_ASSERT_CHECKING
28911 /* Verify that all marks are clear. */
28914 verify_marks_clear (dw_die_ref die
)
28918 gcc_assert (! die
->die_mark
);
28919 FOR_EACH_CHILD (die
, c
, verify_marks_clear (c
));
28921 #endif /* ENABLE_ASSERT_CHECKING */
28923 /* Clear the marks for a die and its children.
28924 Be cool if the mark isn't set. */
28927 prune_unmark_dies (dw_die_ref die
)
28933 FOR_EACH_CHILD (die
, c
, prune_unmark_dies (c
));
28936 /* Given LOC that is referenced by a DIE we're marking as used, find all
28937 referenced DWARF procedures it references and mark them as used. */
28940 prune_unused_types_walk_loc_descr (dw_loc_descr_ref loc
)
28942 for (; loc
!= NULL
; loc
= loc
->dw_loc_next
)
28943 switch (loc
->dw_loc_opc
)
28945 case DW_OP_implicit_pointer
:
28946 case DW_OP_convert
:
28947 case DW_OP_reinterpret
:
28948 case DW_OP_GNU_implicit_pointer
:
28949 case DW_OP_GNU_convert
:
28950 case DW_OP_GNU_reinterpret
:
28951 if (loc
->dw_loc_oprnd1
.val_class
== dw_val_class_die_ref
)
28952 prune_unused_types_mark (loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
, 1);
28954 case DW_OP_GNU_variable_value
:
28955 if (loc
->dw_loc_oprnd1
.val_class
== dw_val_class_decl_ref
)
28958 = lookup_decl_die (loc
->dw_loc_oprnd1
.v
.val_decl_ref
);
28961 loc
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
28962 loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
28963 loc
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
28968 case DW_OP_call_ref
:
28969 case DW_OP_const_type
:
28970 case DW_OP_GNU_const_type
:
28971 case DW_OP_GNU_parameter_ref
:
28972 gcc_assert (loc
->dw_loc_oprnd1
.val_class
== dw_val_class_die_ref
);
28973 prune_unused_types_mark (loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
, 1);
28975 case DW_OP_regval_type
:
28976 case DW_OP_deref_type
:
28977 case DW_OP_GNU_regval_type
:
28978 case DW_OP_GNU_deref_type
:
28979 gcc_assert (loc
->dw_loc_oprnd2
.val_class
== dw_val_class_die_ref
);
28980 prune_unused_types_mark (loc
->dw_loc_oprnd2
.v
.val_die_ref
.die
, 1);
28982 case DW_OP_entry_value
:
28983 case DW_OP_GNU_entry_value
:
28984 gcc_assert (loc
->dw_loc_oprnd1
.val_class
== dw_val_class_loc
);
28985 prune_unused_types_walk_loc_descr (loc
->dw_loc_oprnd1
.v
.val_loc
);
28992 /* Given DIE that we're marking as used, find any other dies
28993 it references as attributes and mark them as used. */
28996 prune_unused_types_walk_attribs (dw_die_ref die
)
29001 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
29003 switch (AT_class (a
))
29005 /* Make sure DWARF procedures referenced by location descriptions will
29007 case dw_val_class_loc
:
29008 prune_unused_types_walk_loc_descr (AT_loc (a
));
29010 case dw_val_class_loc_list
:
29011 for (dw_loc_list_ref list
= AT_loc_list (a
);
29013 list
= list
->dw_loc_next
)
29014 prune_unused_types_walk_loc_descr (list
->expr
);
29017 case dw_val_class_view_list
:
29018 /* This points to a loc_list in another attribute, so it's
29019 already covered. */
29022 case dw_val_class_die_ref
:
29023 /* A reference to another DIE.
29024 Make sure that it will get emitted.
29025 If it was broken out into a comdat group, don't follow it. */
29026 if (! AT_ref (a
)->comdat_type_p
29027 || a
->dw_attr
== DW_AT_specification
)
29028 prune_unused_types_mark (a
->dw_attr_val
.v
.val_die_ref
.die
, 1);
29031 case dw_val_class_str
:
29032 /* Set the string's refcount to 0 so that prune_unused_types_mark
29033 accounts properly for it. */
29034 a
->dw_attr_val
.v
.val_str
->refcount
= 0;
29043 /* Mark the generic parameters and arguments children DIEs of DIE. */
29046 prune_unused_types_mark_generic_parms_dies (dw_die_ref die
)
29050 if (die
== NULL
|| die
->die_child
== NULL
)
29052 c
= die
->die_child
;
29055 if (is_template_parameter (c
))
29056 prune_unused_types_mark (c
, 1);
29058 } while (c
&& c
!= die
->die_child
);
29061 /* Mark DIE as being used. If DOKIDS is true, then walk down
29062 to DIE's children. */
29065 prune_unused_types_mark (dw_die_ref die
, int dokids
)
29069 if (die
->die_mark
== 0)
29071 /* We haven't done this node yet. Mark it as used. */
29073 /* If this is the DIE of a generic type instantiation,
29074 mark the children DIEs that describe its generic parms and
29076 prune_unused_types_mark_generic_parms_dies (die
);
29078 /* We also have to mark its parents as used.
29079 (But we don't want to mark our parent's kids due to this,
29080 unless it is a class.) */
29081 if (die
->die_parent
)
29082 prune_unused_types_mark (die
->die_parent
,
29083 class_scope_p (die
->die_parent
));
29085 /* Mark any referenced nodes. */
29086 prune_unused_types_walk_attribs (die
);
29088 /* If this node is a specification,
29089 also mark the definition, if it exists. */
29090 if (get_AT_flag (die
, DW_AT_declaration
) && die
->die_definition
)
29091 prune_unused_types_mark (die
->die_definition
, 1);
29094 if (dokids
&& die
->die_mark
!= 2)
29096 /* We need to walk the children, but haven't done so yet.
29097 Remember that we've walked the kids. */
29100 /* If this is an array type, we need to make sure our
29101 kids get marked, even if they're types. If we're
29102 breaking out types into comdat sections, do this
29103 for all type definitions. */
29104 if (die
->die_tag
== DW_TAG_array_type
29105 || (use_debug_types
29106 && is_type_die (die
) && ! is_declaration_die (die
)))
29107 FOR_EACH_CHILD (die
, c
, prune_unused_types_mark (c
, 1));
29109 FOR_EACH_CHILD (die
, c
, prune_unused_types_walk (c
));
29113 /* For local classes, look if any static member functions were emitted
29114 and if so, mark them. */
29117 prune_unused_types_walk_local_classes (dw_die_ref die
)
29121 if (die
->die_mark
== 2)
29124 switch (die
->die_tag
)
29126 case DW_TAG_structure_type
:
29127 case DW_TAG_union_type
:
29128 case DW_TAG_class_type
:
29131 case DW_TAG_subprogram
:
29132 if (!get_AT_flag (die
, DW_AT_declaration
)
29133 || die
->die_definition
!= NULL
)
29134 prune_unused_types_mark (die
, 1);
29141 /* Mark children. */
29142 FOR_EACH_CHILD (die
, c
, prune_unused_types_walk_local_classes (c
));
29145 /* Walk the tree DIE and mark types that we actually use. */
29148 prune_unused_types_walk (dw_die_ref die
)
29152 /* Don't do anything if this node is already marked and
29153 children have been marked as well. */
29154 if (die
->die_mark
== 2)
29157 switch (die
->die_tag
)
29159 case DW_TAG_structure_type
:
29160 case DW_TAG_union_type
:
29161 case DW_TAG_class_type
:
29162 if (die
->die_perennial_p
)
29165 for (c
= die
->die_parent
; c
; c
= c
->die_parent
)
29166 if (c
->die_tag
== DW_TAG_subprogram
)
29169 /* Finding used static member functions inside of classes
29170 is needed just for local classes, because for other classes
29171 static member function DIEs with DW_AT_specification
29172 are emitted outside of the DW_TAG_*_type. If we ever change
29173 it, we'd need to call this even for non-local classes. */
29175 prune_unused_types_walk_local_classes (die
);
29177 /* It's a type node --- don't mark it. */
29180 case DW_TAG_const_type
:
29181 case DW_TAG_packed_type
:
29182 case DW_TAG_pointer_type
:
29183 case DW_TAG_reference_type
:
29184 case DW_TAG_rvalue_reference_type
:
29185 case DW_TAG_volatile_type
:
29186 case DW_TAG_typedef
:
29187 case DW_TAG_array_type
:
29188 case DW_TAG_interface_type
:
29189 case DW_TAG_friend
:
29190 case DW_TAG_enumeration_type
:
29191 case DW_TAG_subroutine_type
:
29192 case DW_TAG_string_type
:
29193 case DW_TAG_set_type
:
29194 case DW_TAG_subrange_type
:
29195 case DW_TAG_ptr_to_member_type
:
29196 case DW_TAG_file_type
:
29197 /* Type nodes are useful only when other DIEs reference them --- don't
29201 case DW_TAG_dwarf_procedure
:
29202 /* Likewise for DWARF procedures. */
29204 if (die
->die_perennial_p
)
29210 /* Mark everything else. */
29214 if (die
->die_mark
== 0)
29218 /* Now, mark any dies referenced from here. */
29219 prune_unused_types_walk_attribs (die
);
29224 /* Mark children. */
29225 FOR_EACH_CHILD (die
, c
, prune_unused_types_walk (c
));
29228 /* Increment the string counts on strings referred to from DIE's
29232 prune_unused_types_update_strings (dw_die_ref die
)
29237 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
29238 if (AT_class (a
) == dw_val_class_str
)
29240 struct indirect_string_node
*s
= a
->dw_attr_val
.v
.val_str
;
29242 /* Avoid unnecessarily putting strings that are used less than
29243 twice in the hash table. */
29245 == ((DEBUG_STR_SECTION_FLAGS
& SECTION_MERGE
) ? 1 : 2))
29247 indirect_string_node
**slot
29248 = debug_str_hash
->find_slot_with_hash (s
->str
,
29249 htab_hash_string (s
->str
),
29251 gcc_assert (*slot
== NULL
);
29257 /* Mark DIE and its children as removed. */
29260 mark_removed (dw_die_ref die
)
29263 die
->removed
= true;
29264 FOR_EACH_CHILD (die
, c
, mark_removed (c
));
29267 /* Remove from the tree DIE any dies that aren't marked. */
29270 prune_unused_types_prune (dw_die_ref die
)
29274 gcc_assert (die
->die_mark
);
29275 prune_unused_types_update_strings (die
);
29277 if (! die
->die_child
)
29280 c
= die
->die_child
;
29282 dw_die_ref prev
= c
, next
;
29283 for (c
= c
->die_sib
; ! c
->die_mark
; c
= next
)
29284 if (c
== die
->die_child
)
29286 /* No marked children between 'prev' and the end of the list. */
29288 /* No marked children at all. */
29289 die
->die_child
= NULL
;
29292 prev
->die_sib
= c
->die_sib
;
29293 die
->die_child
= prev
;
29306 if (c
!= prev
->die_sib
)
29308 prune_unused_types_prune (c
);
29309 } while (c
!= die
->die_child
);
29312 /* Remove dies representing declarations that we never use. */
29315 prune_unused_types (void)
29318 limbo_die_node
*node
;
29319 comdat_type_node
*ctnode
;
29320 pubname_entry
*pub
;
29321 dw_die_ref base_type
;
29323 #if ENABLE_ASSERT_CHECKING
29324 /* All the marks should already be clear. */
29325 verify_marks_clear (comp_unit_die ());
29326 for (node
= limbo_die_list
; node
; node
= node
->next
)
29327 verify_marks_clear (node
->die
);
29328 for (ctnode
= comdat_type_list
; ctnode
; ctnode
= ctnode
->next
)
29329 verify_marks_clear (ctnode
->root_die
);
29330 #endif /* ENABLE_ASSERT_CHECKING */
29332 /* Mark types that are used in global variables. */
29333 premark_types_used_by_global_vars ();
29335 /* Set the mark on nodes that are actually used. */
29336 prune_unused_types_walk (comp_unit_die ());
29337 for (node
= limbo_die_list
; node
; node
= node
->next
)
29338 prune_unused_types_walk (node
->die
);
29339 for (ctnode
= comdat_type_list
; ctnode
; ctnode
= ctnode
->next
)
29341 prune_unused_types_walk (ctnode
->root_die
);
29342 prune_unused_types_mark (ctnode
->type_die
, 1);
29345 /* Also set the mark on nodes referenced from the pubname_table. Enumerators
29346 are unusual in that they are pubnames that are the children of pubtypes.
29347 They should only be marked via their parent DW_TAG_enumeration_type die,
29348 not as roots in themselves. */
29349 FOR_EACH_VEC_ELT (*pubname_table
, i
, pub
)
29350 if (pub
->die
->die_tag
!= DW_TAG_enumerator
)
29351 prune_unused_types_mark (pub
->die
, 1);
29352 for (i
= 0; base_types
.iterate (i
, &base_type
); i
++)
29353 prune_unused_types_mark (base_type
, 1);
29355 /* For -fvar-tracking-assignments, also set the mark on nodes that could be
29356 referenced by DW_TAG_call_site DW_AT_call_origin (i.e. direct call
29358 cgraph_node
*cnode
;
29359 FOR_EACH_FUNCTION (cnode
)
29360 if (cnode
->referred_to_p (false))
29362 dw_die_ref die
= lookup_decl_die (cnode
->decl
);
29363 if (die
== NULL
|| die
->die_mark
)
29365 for (cgraph_edge
*e
= cnode
->callers
; e
; e
= e
->next_caller
)
29366 if (e
->caller
!= cnode
29367 && opt_for_fn (e
->caller
->decl
, flag_var_tracking_assignments
))
29369 prune_unused_types_mark (die
, 1);
29374 if (debug_str_hash
)
29375 debug_str_hash
->empty ();
29376 if (skeleton_debug_str_hash
)
29377 skeleton_debug_str_hash
->empty ();
29378 prune_unused_types_prune (comp_unit_die ());
29379 for (limbo_die_node
**pnode
= &limbo_die_list
; *pnode
; )
29382 if (!node
->die
->die_mark
)
29383 *pnode
= node
->next
;
29386 prune_unused_types_prune (node
->die
);
29387 pnode
= &node
->next
;
29390 for (ctnode
= comdat_type_list
; ctnode
; ctnode
= ctnode
->next
)
29391 prune_unused_types_prune (ctnode
->root_die
);
29393 /* Leave the marks clear. */
29394 prune_unmark_dies (comp_unit_die ());
29395 for (node
= limbo_die_list
; node
; node
= node
->next
)
29396 prune_unmark_dies (node
->die
);
29397 for (ctnode
= comdat_type_list
; ctnode
; ctnode
= ctnode
->next
)
29398 prune_unmark_dies (ctnode
->root_die
);
29401 /* Helpers to manipulate hash table of comdat type units. */
29403 struct comdat_type_hasher
: nofree_ptr_hash
<comdat_type_node
>
29405 static inline hashval_t
hash (const comdat_type_node
*);
29406 static inline bool equal (const comdat_type_node
*, const comdat_type_node
*);
29410 comdat_type_hasher::hash (const comdat_type_node
*type_node
)
29413 memcpy (&h
, type_node
->signature
, sizeof (h
));
29418 comdat_type_hasher::equal (const comdat_type_node
*type_node_1
,
29419 const comdat_type_node
*type_node_2
)
29421 return (! memcmp (type_node_1
->signature
, type_node_2
->signature
,
29422 DWARF_TYPE_SIGNATURE_SIZE
));
29425 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
29426 to the location it would have been added, should we know its
29427 DECL_ASSEMBLER_NAME when we added other attributes. This will
29428 probably improve compactness of debug info, removing equivalent
29429 abbrevs, and hide any differences caused by deferring the
29430 computation of the assembler name, triggered by e.g. PCH. */
29433 move_linkage_attr (dw_die_ref die
)
29435 unsigned ix
= vec_safe_length (die
->die_attr
);
29436 dw_attr_node linkage
= (*die
->die_attr
)[ix
- 1];
29438 gcc_assert (linkage
.dw_attr
== DW_AT_linkage_name
29439 || linkage
.dw_attr
== DW_AT_MIPS_linkage_name
);
29443 dw_attr_node
*prev
= &(*die
->die_attr
)[ix
- 1];
29445 if (prev
->dw_attr
== DW_AT_decl_line
29446 || prev
->dw_attr
== DW_AT_decl_column
29447 || prev
->dw_attr
== DW_AT_name
)
29451 if (ix
!= vec_safe_length (die
->die_attr
) - 1)
29453 die
->die_attr
->pop ();
29454 die
->die_attr
->quick_insert (ix
, linkage
);
29458 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
29459 referenced from typed stack ops and count how often they are used. */
29462 mark_base_types (dw_loc_descr_ref loc
)
29464 dw_die_ref base_type
= NULL
;
29466 for (; loc
; loc
= loc
->dw_loc_next
)
29468 switch (loc
->dw_loc_opc
)
29470 case DW_OP_regval_type
:
29471 case DW_OP_deref_type
:
29472 case DW_OP_GNU_regval_type
:
29473 case DW_OP_GNU_deref_type
:
29474 base_type
= loc
->dw_loc_oprnd2
.v
.val_die_ref
.die
;
29476 case DW_OP_convert
:
29477 case DW_OP_reinterpret
:
29478 case DW_OP_GNU_convert
:
29479 case DW_OP_GNU_reinterpret
:
29480 if (loc
->dw_loc_oprnd1
.val_class
== dw_val_class_unsigned_const
)
29483 case DW_OP_const_type
:
29484 case DW_OP_GNU_const_type
:
29485 base_type
= loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
;
29487 case DW_OP_entry_value
:
29488 case DW_OP_GNU_entry_value
:
29489 mark_base_types (loc
->dw_loc_oprnd1
.v
.val_loc
);
29494 gcc_assert (base_type
->die_parent
== comp_unit_die ());
29495 if (base_type
->die_mark
)
29496 base_type
->die_mark
++;
29499 base_types
.safe_push (base_type
);
29500 base_type
->die_mark
= 1;
29505 /* Comparison function for sorting marked base types. */
29508 base_type_cmp (const void *x
, const void *y
)
29510 dw_die_ref dx
= *(const dw_die_ref
*) x
;
29511 dw_die_ref dy
= *(const dw_die_ref
*) y
;
29512 unsigned int byte_size1
, byte_size2
;
29513 unsigned int encoding1
, encoding2
;
29514 unsigned int align1
, align2
;
29515 if (dx
->die_mark
> dy
->die_mark
)
29517 if (dx
->die_mark
< dy
->die_mark
)
29519 byte_size1
= get_AT_unsigned (dx
, DW_AT_byte_size
);
29520 byte_size2
= get_AT_unsigned (dy
, DW_AT_byte_size
);
29521 if (byte_size1
< byte_size2
)
29523 if (byte_size1
> byte_size2
)
29525 encoding1
= get_AT_unsigned (dx
, DW_AT_encoding
);
29526 encoding2
= get_AT_unsigned (dy
, DW_AT_encoding
);
29527 if (encoding1
< encoding2
)
29529 if (encoding1
> encoding2
)
29531 align1
= get_AT_unsigned (dx
, DW_AT_alignment
);
29532 align2
= get_AT_unsigned (dy
, DW_AT_alignment
);
29533 if (align1
< align2
)
29535 if (align1
> align2
)
29540 /* Move base types marked by mark_base_types as early as possible
29541 in the CU, sorted by decreasing usage count both to make the
29542 uleb128 references as small as possible and to make sure they
29543 will have die_offset already computed by calc_die_sizes when
29544 sizes of typed stack loc ops is computed. */
29547 move_marked_base_types (void)
29550 dw_die_ref base_type
, die
, c
;
29552 if (base_types
.is_empty ())
29555 /* Sort by decreasing usage count, they will be added again in that
29557 base_types
.qsort (base_type_cmp
);
29558 die
= comp_unit_die ();
29559 c
= die
->die_child
;
29562 dw_die_ref prev
= c
;
29564 while (c
->die_mark
)
29566 remove_child_with_prev (c
, prev
);
29567 /* As base types got marked, there must be at least
29568 one node other than DW_TAG_base_type. */
29569 gcc_assert (die
->die_child
!= NULL
);
29573 while (c
!= die
->die_child
);
29574 gcc_assert (die
->die_child
);
29575 c
= die
->die_child
;
29576 for (i
= 0; base_types
.iterate (i
, &base_type
); i
++)
29578 base_type
->die_mark
= 0;
29579 base_type
->die_sib
= c
->die_sib
;
29580 c
->die_sib
= base_type
;
29585 /* Helper function for resolve_addr, attempt to resolve
29586 one CONST_STRING, return true if successful. Similarly verify that
29587 SYMBOL_REFs refer to variables emitted in the current CU. */
29590 resolve_one_addr (rtx
*addr
)
29594 if (GET_CODE (rtl
) == CONST_STRING
)
29596 size_t len
= strlen (XSTR (rtl
, 0)) + 1;
29597 tree t
= build_string (len
, XSTR (rtl
, 0));
29598 tree tlen
= size_int (len
- 1);
29600 = build_array_type (char_type_node
, build_index_type (tlen
));
29601 rtl
= lookup_constant_def (t
);
29602 if (!rtl
|| !MEM_P (rtl
))
29604 rtl
= XEXP (rtl
, 0);
29605 if (GET_CODE (rtl
) == SYMBOL_REF
29606 && SYMBOL_REF_DECL (rtl
)
29607 && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl
)))
29609 vec_safe_push (used_rtx_array
, rtl
);
29614 if (GET_CODE (rtl
) == SYMBOL_REF
29615 && SYMBOL_REF_DECL (rtl
))
29617 if (TREE_CONSTANT_POOL_ADDRESS_P (rtl
))
29619 if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl
))))
29622 else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl
)))
29626 if (GET_CODE (rtl
) == CONST
)
29628 subrtx_ptr_iterator::array_type array
;
29629 FOR_EACH_SUBRTX_PTR (iter
, array
, &XEXP (rtl
, 0), ALL
)
29630 if (!resolve_one_addr (*iter
))
29637 /* For STRING_CST, return SYMBOL_REF of its constant pool entry,
29638 if possible, and create DW_TAG_dwarf_procedure that can be referenced
29639 from DW_OP_implicit_pointer if the string hasn't been seen yet. */
29642 string_cst_pool_decl (tree t
)
29644 rtx rtl
= output_constant_def (t
, 1);
29645 unsigned char *array
;
29646 dw_loc_descr_ref l
;
29651 if (!rtl
|| !MEM_P (rtl
))
29653 rtl
= XEXP (rtl
, 0);
29654 if (GET_CODE (rtl
) != SYMBOL_REF
29655 || SYMBOL_REF_DECL (rtl
) == NULL_TREE
)
29658 decl
= SYMBOL_REF_DECL (rtl
);
29659 if (!lookup_decl_die (decl
))
29661 len
= TREE_STRING_LENGTH (t
);
29662 vec_safe_push (used_rtx_array
, rtl
);
29663 ref
= new_die (DW_TAG_dwarf_procedure
, comp_unit_die (), decl
);
29664 array
= ggc_vec_alloc
<unsigned char> (len
);
29665 memcpy (array
, TREE_STRING_POINTER (t
), len
);
29666 l
= new_loc_descr (DW_OP_implicit_value
, len
, 0);
29667 l
->dw_loc_oprnd2
.val_class
= dw_val_class_vec
;
29668 l
->dw_loc_oprnd2
.v
.val_vec
.length
= len
;
29669 l
->dw_loc_oprnd2
.v
.val_vec
.elt_size
= 1;
29670 l
->dw_loc_oprnd2
.v
.val_vec
.array
= array
;
29671 add_AT_loc (ref
, DW_AT_location
, l
);
29672 equate_decl_number_to_die (decl
, ref
);
29677 /* Helper function of resolve_addr_in_expr. LOC is
29678 a DW_OP_addr followed by DW_OP_stack_value, either at the start
29679 of exprloc or after DW_OP_{,bit_}piece, and val_addr can't be
29680 resolved. Replace it (both DW_OP_addr and DW_OP_stack_value)
29681 with DW_OP_implicit_pointer if possible
29682 and return true, if unsuccessful, return false. */
29685 optimize_one_addr_into_implicit_ptr (dw_loc_descr_ref loc
)
29687 rtx rtl
= loc
->dw_loc_oprnd1
.v
.val_addr
;
29688 HOST_WIDE_INT offset
= 0;
29689 dw_die_ref ref
= NULL
;
29692 if (GET_CODE (rtl
) == CONST
29693 && GET_CODE (XEXP (rtl
, 0)) == PLUS
29694 && CONST_INT_P (XEXP (XEXP (rtl
, 0), 1)))
29696 offset
= INTVAL (XEXP (XEXP (rtl
, 0), 1));
29697 rtl
= XEXP (XEXP (rtl
, 0), 0);
29699 if (GET_CODE (rtl
) == CONST_STRING
)
29701 size_t len
= strlen (XSTR (rtl
, 0)) + 1;
29702 tree t
= build_string (len
, XSTR (rtl
, 0));
29703 tree tlen
= size_int (len
- 1);
29706 = build_array_type (char_type_node
, build_index_type (tlen
));
29707 rtl
= string_cst_pool_decl (t
);
29711 if (GET_CODE (rtl
) == SYMBOL_REF
&& SYMBOL_REF_DECL (rtl
))
29713 decl
= SYMBOL_REF_DECL (rtl
);
29714 if (VAR_P (decl
) && !DECL_EXTERNAL (decl
))
29716 ref
= lookup_decl_die (decl
);
29717 if (ref
&& (get_AT (ref
, DW_AT_location
)
29718 || get_AT (ref
, DW_AT_const_value
)))
29720 loc
->dw_loc_opc
= dwarf_OP (DW_OP_implicit_pointer
);
29721 loc
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
29722 loc
->dw_loc_oprnd1
.val_entry
= NULL
;
29723 loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
29724 loc
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
29725 loc
->dw_loc_next
= loc
->dw_loc_next
->dw_loc_next
;
29726 loc
->dw_loc_oprnd2
.v
.val_int
= offset
;
29734 /* Helper function for resolve_addr, handle one location
29735 expression, return false if at least one CONST_STRING or SYMBOL_REF in
29736 the location list couldn't be resolved. */
29739 resolve_addr_in_expr (dw_attr_node
*a
, dw_loc_descr_ref loc
)
29741 dw_loc_descr_ref keep
= NULL
;
29742 for (dw_loc_descr_ref prev
= NULL
; loc
; prev
= loc
, loc
= loc
->dw_loc_next
)
29743 switch (loc
->dw_loc_opc
)
29746 if (!resolve_one_addr (&loc
->dw_loc_oprnd1
.v
.val_addr
))
29749 || prev
->dw_loc_opc
== DW_OP_piece
29750 || prev
->dw_loc_opc
== DW_OP_bit_piece
)
29751 && loc
->dw_loc_next
29752 && loc
->dw_loc_next
->dw_loc_opc
== DW_OP_stack_value
29753 && (!dwarf_strict
|| dwarf_version
>= 5)
29754 && optimize_one_addr_into_implicit_ptr (loc
))
29759 case DW_OP_GNU_addr_index
:
29761 case DW_OP_GNU_const_index
:
29763 if ((loc
->dw_loc_opc
== DW_OP_GNU_addr_index
29764 || loc
->dw_loc_opc
== DW_OP_addrx
)
29765 || ((loc
->dw_loc_opc
== DW_OP_GNU_const_index
29766 || loc
->dw_loc_opc
== DW_OP_constx
)
29769 rtx rtl
= loc
->dw_loc_oprnd1
.val_entry
->addr
.rtl
;
29770 if (!resolve_one_addr (&rtl
))
29772 remove_addr_table_entry (loc
->dw_loc_oprnd1
.val_entry
);
29773 loc
->dw_loc_oprnd1
.val_entry
29774 = add_addr_table_entry (rtl
, ate_kind_rtx
);
29777 case DW_OP_const4u
:
29778 case DW_OP_const8u
:
29780 && !resolve_one_addr (&loc
->dw_loc_oprnd1
.v
.val_addr
))
29783 case DW_OP_plus_uconst
:
29784 if (size_of_loc_descr (loc
)
29785 > size_of_int_loc_descriptor (loc
->dw_loc_oprnd1
.v
.val_unsigned
)
29787 && loc
->dw_loc_oprnd1
.v
.val_unsigned
> 0)
29789 dw_loc_descr_ref repl
29790 = int_loc_descriptor (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
29791 add_loc_descr (&repl
, new_loc_descr (DW_OP_plus
, 0, 0));
29792 add_loc_descr (&repl
, loc
->dw_loc_next
);
29796 case DW_OP_implicit_value
:
29797 if (loc
->dw_loc_oprnd2
.val_class
== dw_val_class_addr
29798 && !resolve_one_addr (&loc
->dw_loc_oprnd2
.v
.val_addr
))
29801 case DW_OP_implicit_pointer
:
29802 case DW_OP_GNU_implicit_pointer
:
29803 case DW_OP_GNU_parameter_ref
:
29804 case DW_OP_GNU_variable_value
:
29805 if (loc
->dw_loc_oprnd1
.val_class
== dw_val_class_decl_ref
)
29808 = lookup_decl_die (loc
->dw_loc_oprnd1
.v
.val_decl_ref
);
29811 loc
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
29812 loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
29813 loc
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
29815 if (loc
->dw_loc_opc
== DW_OP_GNU_variable_value
)
29818 && loc
->dw_loc_next
== NULL
29819 && AT_class (a
) == dw_val_class_loc
)
29820 switch (a
->dw_attr
)
29822 /* Following attributes allow both exprloc and reference,
29823 so if the whole expression is DW_OP_GNU_variable_value
29824 alone we could transform it into reference. */
29825 case DW_AT_byte_size
:
29826 case DW_AT_bit_size
:
29827 case DW_AT_lower_bound
:
29828 case DW_AT_upper_bound
:
29829 case DW_AT_bit_stride
:
29831 case DW_AT_allocated
:
29832 case DW_AT_associated
:
29833 case DW_AT_byte_stride
:
29834 a
->dw_attr_val
.val_class
= dw_val_class_die_ref
;
29835 a
->dw_attr_val
.val_entry
= NULL
;
29836 a
->dw_attr_val
.v
.val_die_ref
.die
29837 = loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
;
29838 a
->dw_attr_val
.v
.val_die_ref
.external
= 0;
29847 case DW_OP_const_type
:
29848 case DW_OP_regval_type
:
29849 case DW_OP_deref_type
:
29850 case DW_OP_convert
:
29851 case DW_OP_reinterpret
:
29852 case DW_OP_GNU_const_type
:
29853 case DW_OP_GNU_regval_type
:
29854 case DW_OP_GNU_deref_type
:
29855 case DW_OP_GNU_convert
:
29856 case DW_OP_GNU_reinterpret
:
29857 while (loc
->dw_loc_next
29858 && (loc
->dw_loc_next
->dw_loc_opc
== DW_OP_convert
29859 || loc
->dw_loc_next
->dw_loc_opc
== DW_OP_GNU_convert
))
29861 dw_die_ref base1
, base2
;
29862 unsigned enc1
, enc2
, size1
, size2
;
29863 if (loc
->dw_loc_opc
== DW_OP_regval_type
29864 || loc
->dw_loc_opc
== DW_OP_deref_type
29865 || loc
->dw_loc_opc
== DW_OP_GNU_regval_type
29866 || loc
->dw_loc_opc
== DW_OP_GNU_deref_type
)
29867 base1
= loc
->dw_loc_oprnd2
.v
.val_die_ref
.die
;
29868 else if (loc
->dw_loc_oprnd1
.val_class
29869 == dw_val_class_unsigned_const
)
29872 base1
= loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
;
29873 if (loc
->dw_loc_next
->dw_loc_oprnd1
.val_class
29874 == dw_val_class_unsigned_const
)
29876 base2
= loc
->dw_loc_next
->dw_loc_oprnd1
.v
.val_die_ref
.die
;
29877 gcc_assert (base1
->die_tag
== DW_TAG_base_type
29878 && base2
->die_tag
== DW_TAG_base_type
);
29879 enc1
= get_AT_unsigned (base1
, DW_AT_encoding
);
29880 enc2
= get_AT_unsigned (base2
, DW_AT_encoding
);
29881 size1
= get_AT_unsigned (base1
, DW_AT_byte_size
);
29882 size2
= get_AT_unsigned (base2
, DW_AT_byte_size
);
29884 && (((enc1
== DW_ATE_unsigned
|| enc1
== DW_ATE_signed
)
29885 && (enc2
== DW_ATE_unsigned
|| enc2
== DW_ATE_signed
)
29889 /* Optimize away next DW_OP_convert after
29890 adjusting LOC's base type die reference. */
29891 if (loc
->dw_loc_opc
== DW_OP_regval_type
29892 || loc
->dw_loc_opc
== DW_OP_deref_type
29893 || loc
->dw_loc_opc
== DW_OP_GNU_regval_type
29894 || loc
->dw_loc_opc
== DW_OP_GNU_deref_type
)
29895 loc
->dw_loc_oprnd2
.v
.val_die_ref
.die
= base2
;
29897 loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
= base2
;
29898 loc
->dw_loc_next
= loc
->dw_loc_next
->dw_loc_next
;
29901 /* Don't change integer DW_OP_convert after e.g. floating
29902 point typed stack entry. */
29903 else if (enc1
!= DW_ATE_unsigned
&& enc1
!= DW_ATE_signed
)
29904 keep
= loc
->dw_loc_next
;
29914 /* Helper function of resolve_addr. DIE had DW_AT_location of
29915 DW_OP_addr alone, which referred to DECL in DW_OP_addr's operand
29916 and DW_OP_addr couldn't be resolved. resolve_addr has already
29917 removed the DW_AT_location attribute. This function attempts to
29918 add a new DW_AT_location attribute with DW_OP_implicit_pointer
29919 to it or DW_AT_const_value attribute, if possible. */
29922 optimize_location_into_implicit_ptr (dw_die_ref die
, tree decl
)
29925 || lookup_decl_die (decl
) != die
29926 || DECL_EXTERNAL (decl
)
29927 || !TREE_STATIC (decl
)
29928 || DECL_INITIAL (decl
) == NULL_TREE
29929 || DECL_P (DECL_INITIAL (decl
))
29930 || get_AT (die
, DW_AT_const_value
))
29933 tree init
= DECL_INITIAL (decl
);
29934 HOST_WIDE_INT offset
= 0;
29935 /* For variables that have been optimized away and thus
29936 don't have a memory location, see if we can emit
29937 DW_AT_const_value instead. */
29938 if (tree_add_const_value_attribute (die
, init
))
29940 if (dwarf_strict
&& dwarf_version
< 5)
29942 /* If init is ADDR_EXPR or POINTER_PLUS_EXPR of ADDR_EXPR,
29943 and ADDR_EXPR refers to a decl that has DW_AT_location or
29944 DW_AT_const_value (but isn't addressable, otherwise
29945 resolving the original DW_OP_addr wouldn't fail), see if
29946 we can add DW_OP_implicit_pointer. */
29948 if (TREE_CODE (init
) == POINTER_PLUS_EXPR
29949 && tree_fits_shwi_p (TREE_OPERAND (init
, 1)))
29951 offset
= tree_to_shwi (TREE_OPERAND (init
, 1));
29952 init
= TREE_OPERAND (init
, 0);
29955 if (TREE_CODE (init
) != ADDR_EXPR
)
29957 if ((TREE_CODE (TREE_OPERAND (init
, 0)) == STRING_CST
29958 && !TREE_ASM_WRITTEN (TREE_OPERAND (init
, 0)))
29959 || (TREE_CODE (TREE_OPERAND (init
, 0)) == VAR_DECL
29960 && !DECL_EXTERNAL (TREE_OPERAND (init
, 0))
29961 && TREE_OPERAND (init
, 0) != decl
))
29964 dw_loc_descr_ref l
;
29966 if (TREE_CODE (TREE_OPERAND (init
, 0)) == STRING_CST
)
29968 rtx rtl
= string_cst_pool_decl (TREE_OPERAND (init
, 0));
29971 decl
= SYMBOL_REF_DECL (rtl
);
29974 decl
= TREE_OPERAND (init
, 0);
29975 ref
= lookup_decl_die (decl
);
29977 || (!get_AT (ref
, DW_AT_location
)
29978 && !get_AT (ref
, DW_AT_const_value
)))
29980 l
= new_loc_descr (dwarf_OP (DW_OP_implicit_pointer
), 0, offset
);
29981 l
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
29982 l
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
29983 l
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
29984 add_AT_loc (die
, DW_AT_location
, l
);
29988 /* Return NULL if l is a DWARF expression, or first op that is not
29989 valid DWARF expression. */
29991 static dw_loc_descr_ref
29992 non_dwarf_expression (dw_loc_descr_ref l
)
29996 if (l
->dw_loc_opc
>= DW_OP_reg0
&& l
->dw_loc_opc
<= DW_OP_reg31
)
29998 switch (l
->dw_loc_opc
)
30001 case DW_OP_implicit_value
:
30002 case DW_OP_stack_value
:
30003 case DW_OP_implicit_pointer
:
30004 case DW_OP_GNU_implicit_pointer
:
30005 case DW_OP_GNU_parameter_ref
:
30007 case DW_OP_bit_piece
:
30012 l
= l
->dw_loc_next
;
30017 /* Return adjusted copy of EXPR:
30018 If it is empty DWARF expression, return it.
30019 If it is valid non-empty DWARF expression,
30020 return copy of EXPR with DW_OP_deref appended to it.
30021 If it is DWARF expression followed by DW_OP_reg{N,x}, return
30022 copy of the DWARF expression with DW_OP_breg{N,x} <0> appended.
30023 If it is DWARF expression followed by DW_OP_stack_value, return
30024 copy of the DWARF expression without anything appended.
30025 Otherwise, return NULL. */
30027 static dw_loc_descr_ref
30028 copy_deref_exprloc (dw_loc_descr_ref expr
)
30030 dw_loc_descr_ref tail
= NULL
;
30035 dw_loc_descr_ref l
= non_dwarf_expression (expr
);
30036 if (l
&& l
->dw_loc_next
)
30041 if (l
->dw_loc_opc
>= DW_OP_reg0
&& l
->dw_loc_opc
<= DW_OP_reg31
)
30042 tail
= new_loc_descr ((enum dwarf_location_atom
)
30043 (DW_OP_breg0
+ (l
->dw_loc_opc
- DW_OP_reg0
)),
30046 switch (l
->dw_loc_opc
)
30049 tail
= new_loc_descr (DW_OP_bregx
,
30050 l
->dw_loc_oprnd1
.v
.val_unsigned
, 0);
30052 case DW_OP_stack_value
:
30059 tail
= new_loc_descr (DW_OP_deref
, 0, 0);
30061 dw_loc_descr_ref ret
= NULL
, *p
= &ret
;
30064 *p
= new_loc_descr (expr
->dw_loc_opc
, 0, 0);
30065 (*p
)->dw_loc_oprnd1
= expr
->dw_loc_oprnd1
;
30066 (*p
)->dw_loc_oprnd2
= expr
->dw_loc_oprnd2
;
30067 p
= &(*p
)->dw_loc_next
;
30068 expr
= expr
->dw_loc_next
;
30074 /* For DW_AT_string_length attribute with DW_OP_GNU_variable_value
30075 reference to a variable or argument, adjust it if needed and return:
30076 -1 if the DW_AT_string_length attribute and DW_AT_{string_length_,}byte_size
30077 attribute if present should be removed
30078 0 keep the attribute perhaps with minor modifications, no need to rescan
30079 1 if the attribute has been successfully adjusted. */
30082 optimize_string_length (dw_attr_node
*a
)
30084 dw_loc_descr_ref l
= AT_loc (a
), lv
;
30086 if (l
->dw_loc_oprnd1
.val_class
== dw_val_class_decl_ref
)
30088 tree decl
= l
->dw_loc_oprnd1
.v
.val_decl_ref
;
30089 die
= lookup_decl_die (decl
);
30092 l
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
30093 l
->dw_loc_oprnd1
.v
.val_die_ref
.die
= die
;
30094 l
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
30100 die
= l
->dw_loc_oprnd1
.v
.val_die_ref
.die
;
30102 /* DWARF5 allows reference class, so we can then reference the DIE.
30103 Only do this for DW_OP_GNU_variable_value DW_OP_stack_value. */
30104 if (l
->dw_loc_next
!= NULL
&& dwarf_version
>= 5)
30106 a
->dw_attr_val
.val_class
= dw_val_class_die_ref
;
30107 a
->dw_attr_val
.val_entry
= NULL
;
30108 a
->dw_attr_val
.v
.val_die_ref
.die
= die
;
30109 a
->dw_attr_val
.v
.val_die_ref
.external
= 0;
30113 dw_attr_node
*av
= get_AT (die
, DW_AT_location
);
30115 bool non_dwarf_expr
= false;
30118 return dwarf_strict
? -1 : 0;
30119 switch (AT_class (av
))
30121 case dw_val_class_loc_list
:
30122 for (d
= AT_loc_list (av
); d
!= NULL
; d
= d
->dw_loc_next
)
30123 if (d
->expr
&& non_dwarf_expression (d
->expr
))
30124 non_dwarf_expr
= true;
30126 case dw_val_class_view_list
:
30127 gcc_unreachable ();
30128 case dw_val_class_loc
:
30131 return dwarf_strict
? -1 : 0;
30132 if (non_dwarf_expression (lv
))
30133 non_dwarf_expr
= true;
30136 return dwarf_strict
? -1 : 0;
30139 /* If it is safe to transform DW_OP_GNU_variable_value DW_OP_stack_value
30140 into DW_OP_call4 or DW_OP_GNU_variable_value into
30141 DW_OP_call4 DW_OP_deref, do so. */
30142 if (!non_dwarf_expr
30143 && (l
->dw_loc_next
!= NULL
|| AT_class (av
) == dw_val_class_loc
))
30145 l
->dw_loc_opc
= DW_OP_call4
;
30146 if (l
->dw_loc_next
)
30147 l
->dw_loc_next
= NULL
;
30149 l
->dw_loc_next
= new_loc_descr (DW_OP_deref
, 0, 0);
30153 /* For DW_OP_GNU_variable_value DW_OP_stack_value, we can just
30154 copy over the DW_AT_location attribute from die to a. */
30155 if (l
->dw_loc_next
!= NULL
)
30157 a
->dw_attr_val
= av
->dw_attr_val
;
30161 dw_loc_list_ref list
, *p
;
30162 switch (AT_class (av
))
30164 case dw_val_class_loc_list
:
30167 for (d
= AT_loc_list (av
); d
!= NULL
; d
= d
->dw_loc_next
)
30169 lv
= copy_deref_exprloc (d
->expr
);
30172 *p
= new_loc_list (lv
, d
->begin
, d
->vbegin
, d
->end
, d
->vend
, d
->section
);
30173 p
= &(*p
)->dw_loc_next
;
30175 else if (!dwarf_strict
&& d
->expr
)
30179 return dwarf_strict
? -1 : 0;
30180 a
->dw_attr_val
.val_class
= dw_val_class_loc_list
;
30182 *AT_loc_list_ptr (a
) = list
;
30184 case dw_val_class_loc
:
30185 lv
= copy_deref_exprloc (AT_loc (av
));
30187 return dwarf_strict
? -1 : 0;
30188 a
->dw_attr_val
.v
.val_loc
= lv
;
30191 gcc_unreachable ();
30195 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
30196 an address in .rodata section if the string literal is emitted there,
30197 or remove the containing location list or replace DW_AT_const_value
30198 with DW_AT_location and empty location expression, if it isn't found
30199 in .rodata. Similarly for SYMBOL_REFs, keep only those that refer
30200 to something that has been emitted in the current CU. */
30203 resolve_addr (dw_die_ref die
)
30207 dw_loc_list_ref
*curr
, *start
, loc
;
30209 bool remove_AT_byte_size
= false;
30211 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
30212 switch (AT_class (a
))
30214 case dw_val_class_loc_list
:
30215 start
= curr
= AT_loc_list_ptr (a
);
30218 /* The same list can be referenced more than once. See if we have
30219 already recorded the result from a previous pass. */
30221 *curr
= loc
->dw_loc_next
;
30222 else if (!loc
->resolved_addr
)
30224 /* As things stand, we do not expect or allow one die to
30225 reference a suffix of another die's location list chain.
30226 References must be identical or completely separate.
30227 There is therefore no need to cache the result of this
30228 pass on any list other than the first; doing so
30229 would lead to unnecessary writes. */
30232 gcc_assert (!(*curr
)->replaced
&& !(*curr
)->resolved_addr
);
30233 if (!resolve_addr_in_expr (a
, (*curr
)->expr
))
30235 dw_loc_list_ref next
= (*curr
)->dw_loc_next
;
30236 dw_loc_descr_ref l
= (*curr
)->expr
;
30238 if (next
&& (*curr
)->ll_symbol
)
30240 gcc_assert (!next
->ll_symbol
);
30241 next
->ll_symbol
= (*curr
)->ll_symbol
;
30242 next
->vl_symbol
= (*curr
)->vl_symbol
;
30244 if (dwarf_split_debug_info
)
30245 remove_loc_list_addr_table_entries (l
);
30250 mark_base_types ((*curr
)->expr
);
30251 curr
= &(*curr
)->dw_loc_next
;
30255 loc
->resolved_addr
= 1;
30259 loc
->dw_loc_next
= *start
;
30264 remove_AT (die
, a
->dw_attr
);
30268 case dw_val_class_view_list
:
30270 gcc_checking_assert (a
->dw_attr
== DW_AT_GNU_locviews
);
30271 gcc_checking_assert (dwarf2out_locviews_in_attribute ());
30272 dw_val_node
*llnode
30273 = view_list_to_loc_list_val_node (&a
->dw_attr_val
);
30274 /* If we no longer have a loclist, or it no longer needs
30275 views, drop this attribute. */
30276 if (!llnode
|| !llnode
->v
.val_loc_list
->vl_symbol
)
30278 remove_AT (die
, a
->dw_attr
);
30283 case dw_val_class_loc
:
30285 dw_loc_descr_ref l
= AT_loc (a
);
30286 /* DW_OP_GNU_variable_value DW_OP_stack_value or
30287 DW_OP_GNU_variable_value in DW_AT_string_length can be converted
30288 into DW_OP_call4 or DW_OP_call4 DW_OP_deref, which is standard
30289 DWARF4 unlike DW_OP_GNU_variable_value. Or for DWARF5
30290 DW_OP_GNU_variable_value DW_OP_stack_value can be replaced
30291 with DW_FORM_ref referencing the same DIE as
30292 DW_OP_GNU_variable_value used to reference. */
30293 if (a
->dw_attr
== DW_AT_string_length
30295 && l
->dw_loc_opc
== DW_OP_GNU_variable_value
30296 && (l
->dw_loc_next
== NULL
30297 || (l
->dw_loc_next
->dw_loc_next
== NULL
30298 && l
->dw_loc_next
->dw_loc_opc
== DW_OP_stack_value
)))
30300 switch (optimize_string_length (a
))
30303 remove_AT (die
, a
->dw_attr
);
30305 /* If we drop DW_AT_string_length, we need to drop also
30306 DW_AT_{string_length_,}byte_size. */
30307 remove_AT_byte_size
= true;
30312 /* Even if we keep the optimized DW_AT_string_length,
30313 it might have changed AT_class, so process it again. */
30318 /* For -gdwarf-2 don't attempt to optimize
30319 DW_AT_data_member_location containing
30320 DW_OP_plus_uconst - older consumers might
30321 rely on it being that op instead of a more complex,
30322 but shorter, location description. */
30323 if ((dwarf_version
> 2
30324 || a
->dw_attr
!= DW_AT_data_member_location
30326 || l
->dw_loc_opc
!= DW_OP_plus_uconst
30327 || l
->dw_loc_next
!= NULL
)
30328 && !resolve_addr_in_expr (a
, l
))
30330 if (dwarf_split_debug_info
)
30331 remove_loc_list_addr_table_entries (l
);
30333 && l
->dw_loc_next
== NULL
30334 && l
->dw_loc_opc
== DW_OP_addr
30335 && GET_CODE (l
->dw_loc_oprnd1
.v
.val_addr
) == SYMBOL_REF
30336 && SYMBOL_REF_DECL (l
->dw_loc_oprnd1
.v
.val_addr
)
30337 && a
->dw_attr
== DW_AT_location
)
30339 tree decl
= SYMBOL_REF_DECL (l
->dw_loc_oprnd1
.v
.val_addr
);
30340 remove_AT (die
, a
->dw_attr
);
30342 optimize_location_into_implicit_ptr (die
, decl
);
30345 if (a
->dw_attr
== DW_AT_string_length
)
30346 /* If we drop DW_AT_string_length, we need to drop also
30347 DW_AT_{string_length_,}byte_size. */
30348 remove_AT_byte_size
= true;
30349 remove_AT (die
, a
->dw_attr
);
30353 mark_base_types (l
);
30356 case dw_val_class_addr
:
30357 if (a
->dw_attr
== DW_AT_const_value
30358 && !resolve_one_addr (&a
->dw_attr_val
.v
.val_addr
))
30360 if (AT_index (a
) != NOT_INDEXED
)
30361 remove_addr_table_entry (a
->dw_attr_val
.val_entry
);
30362 remove_AT (die
, a
->dw_attr
);
30365 if ((die
->die_tag
== DW_TAG_call_site
30366 && a
->dw_attr
== DW_AT_call_origin
)
30367 || (die
->die_tag
== DW_TAG_GNU_call_site
30368 && a
->dw_attr
== DW_AT_abstract_origin
))
30370 tree tdecl
= SYMBOL_REF_DECL (a
->dw_attr_val
.v
.val_addr
);
30371 dw_die_ref tdie
= lookup_decl_die (tdecl
);
30374 && DECL_EXTERNAL (tdecl
)
30375 && DECL_ABSTRACT_ORIGIN (tdecl
) == NULL_TREE
30376 && (cdie
= lookup_context_die (DECL_CONTEXT (tdecl
))))
30378 dw_die_ref pdie
= cdie
;
30379 /* Make sure we don't add these DIEs into type units.
30380 We could emit skeleton DIEs for context (namespaces,
30381 outer structs/classes) and a skeleton DIE for the
30382 innermost context with DW_AT_signature pointing to the
30383 type unit. See PR78835. */
30384 while (pdie
&& pdie
->die_tag
!= DW_TAG_type_unit
)
30385 pdie
= pdie
->die_parent
;
30388 /* Creating a full DIE for tdecl is overly expensive and
30389 at this point even wrong when in the LTO phase
30390 as it can end up generating new type DIEs we didn't
30391 output and thus optimize_external_refs will crash. */
30392 tdie
= new_die (DW_TAG_subprogram
, cdie
, NULL_TREE
);
30393 add_AT_flag (tdie
, DW_AT_external
, 1);
30394 add_AT_flag (tdie
, DW_AT_declaration
, 1);
30395 add_linkage_attr (tdie
, tdecl
);
30396 add_name_and_src_coords_attributes (tdie
, tdecl
, true);
30397 equate_decl_number_to_die (tdecl
, tdie
);
30402 a
->dw_attr_val
.val_class
= dw_val_class_die_ref
;
30403 a
->dw_attr_val
.v
.val_die_ref
.die
= tdie
;
30404 a
->dw_attr_val
.v
.val_die_ref
.external
= 0;
30408 if (AT_index (a
) != NOT_INDEXED
)
30409 remove_addr_table_entry (a
->dw_attr_val
.val_entry
);
30410 remove_AT (die
, a
->dw_attr
);
30419 if (remove_AT_byte_size
)
30420 remove_AT (die
, dwarf_version
>= 5
30421 ? DW_AT_string_length_byte_size
30422 : DW_AT_byte_size
);
30424 FOR_EACH_CHILD (die
, c
, resolve_addr (c
));
30427 /* Helper routines for optimize_location_lists.
30428 This pass tries to share identical local lists in .debug_loc
30431 /* Iteratively hash operands of LOC opcode into HSTATE. */
30434 hash_loc_operands (dw_loc_descr_ref loc
, inchash::hash
&hstate
)
30436 dw_val_ref val1
= &loc
->dw_loc_oprnd1
;
30437 dw_val_ref val2
= &loc
->dw_loc_oprnd2
;
30439 switch (loc
->dw_loc_opc
)
30441 case DW_OP_const4u
:
30442 case DW_OP_const8u
:
30446 case DW_OP_const1u
:
30447 case DW_OP_const1s
:
30448 case DW_OP_const2u
:
30449 case DW_OP_const2s
:
30450 case DW_OP_const4s
:
30451 case DW_OP_const8s
:
30455 case DW_OP_plus_uconst
:
30491 case DW_OP_deref_size
:
30492 case DW_OP_xderef_size
:
30493 hstate
.add_object (val1
->v
.val_int
);
30500 gcc_assert (val1
->val_class
== dw_val_class_loc
);
30501 offset
= val1
->v
.val_loc
->dw_loc_addr
- (loc
->dw_loc_addr
+ 3);
30502 hstate
.add_object (offset
);
30505 case DW_OP_implicit_value
:
30506 hstate
.add_object (val1
->v
.val_unsigned
);
30507 switch (val2
->val_class
)
30509 case dw_val_class_const
:
30510 hstate
.add_object (val2
->v
.val_int
);
30512 case dw_val_class_vec
:
30514 unsigned int elt_size
= val2
->v
.val_vec
.elt_size
;
30515 unsigned int len
= val2
->v
.val_vec
.length
;
30517 hstate
.add_int (elt_size
);
30518 hstate
.add_int (len
);
30519 hstate
.add (val2
->v
.val_vec
.array
, len
* elt_size
);
30522 case dw_val_class_const_double
:
30523 hstate
.add_object (val2
->v
.val_double
.low
);
30524 hstate
.add_object (val2
->v
.val_double
.high
);
30526 case dw_val_class_wide_int
:
30527 hstate
.add (val2
->v
.val_wide
->get_val (),
30528 get_full_len (*val2
->v
.val_wide
)
30529 * HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
);
30531 case dw_val_class_addr
:
30532 inchash::add_rtx (val2
->v
.val_addr
, hstate
);
30535 gcc_unreachable ();
30539 case DW_OP_bit_piece
:
30540 hstate
.add_object (val1
->v
.val_int
);
30541 hstate
.add_object (val2
->v
.val_int
);
30547 unsigned char dtprel
= 0xd1;
30548 hstate
.add_object (dtprel
);
30550 inchash::add_rtx (val1
->v
.val_addr
, hstate
);
30552 case DW_OP_GNU_addr_index
:
30554 case DW_OP_GNU_const_index
:
30559 unsigned char dtprel
= 0xd1;
30560 hstate
.add_object (dtprel
);
30562 inchash::add_rtx (val1
->val_entry
->addr
.rtl
, hstate
);
30565 case DW_OP_implicit_pointer
:
30566 case DW_OP_GNU_implicit_pointer
:
30567 hstate
.add_int (val2
->v
.val_int
);
30569 case DW_OP_entry_value
:
30570 case DW_OP_GNU_entry_value
:
30571 hstate
.add_object (val1
->v
.val_loc
);
30573 case DW_OP_regval_type
:
30574 case DW_OP_deref_type
:
30575 case DW_OP_GNU_regval_type
:
30576 case DW_OP_GNU_deref_type
:
30578 unsigned int byte_size
30579 = get_AT_unsigned (val2
->v
.val_die_ref
.die
, DW_AT_byte_size
);
30580 unsigned int encoding
30581 = get_AT_unsigned (val2
->v
.val_die_ref
.die
, DW_AT_encoding
);
30582 hstate
.add_object (val1
->v
.val_int
);
30583 hstate
.add_object (byte_size
);
30584 hstate
.add_object (encoding
);
30587 case DW_OP_convert
:
30588 case DW_OP_reinterpret
:
30589 case DW_OP_GNU_convert
:
30590 case DW_OP_GNU_reinterpret
:
30591 if (val1
->val_class
== dw_val_class_unsigned_const
)
30593 hstate
.add_object (val1
->v
.val_unsigned
);
30597 case DW_OP_const_type
:
30598 case DW_OP_GNU_const_type
:
30600 unsigned int byte_size
30601 = get_AT_unsigned (val1
->v
.val_die_ref
.die
, DW_AT_byte_size
);
30602 unsigned int encoding
30603 = get_AT_unsigned (val1
->v
.val_die_ref
.die
, DW_AT_encoding
);
30604 hstate
.add_object (byte_size
);
30605 hstate
.add_object (encoding
);
30606 if (loc
->dw_loc_opc
!= DW_OP_const_type
30607 && loc
->dw_loc_opc
!= DW_OP_GNU_const_type
)
30609 hstate
.add_object (val2
->val_class
);
30610 switch (val2
->val_class
)
30612 case dw_val_class_const
:
30613 hstate
.add_object (val2
->v
.val_int
);
30615 case dw_val_class_vec
:
30617 unsigned int elt_size
= val2
->v
.val_vec
.elt_size
;
30618 unsigned int len
= val2
->v
.val_vec
.length
;
30620 hstate
.add_object (elt_size
);
30621 hstate
.add_object (len
);
30622 hstate
.add (val2
->v
.val_vec
.array
, len
* elt_size
);
30625 case dw_val_class_const_double
:
30626 hstate
.add_object (val2
->v
.val_double
.low
);
30627 hstate
.add_object (val2
->v
.val_double
.high
);
30629 case dw_val_class_wide_int
:
30630 hstate
.add (val2
->v
.val_wide
->get_val (),
30631 get_full_len (*val2
->v
.val_wide
)
30632 * HOST_BITS_PER_WIDE_INT
/ HOST_BITS_PER_CHAR
);
30635 gcc_unreachable ();
30641 /* Other codes have no operands. */
30646 /* Iteratively hash the whole DWARF location expression LOC into HSTATE. */
30649 hash_locs (dw_loc_descr_ref loc
, inchash::hash
&hstate
)
30651 dw_loc_descr_ref l
;
30652 bool sizes_computed
= false;
30653 /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed. */
30654 size_of_locs (loc
);
30656 for (l
= loc
; l
!= NULL
; l
= l
->dw_loc_next
)
30658 enum dwarf_location_atom opc
= l
->dw_loc_opc
;
30659 hstate
.add_object (opc
);
30660 if ((opc
== DW_OP_skip
|| opc
== DW_OP_bra
) && !sizes_computed
)
30662 size_of_locs (loc
);
30663 sizes_computed
= true;
30665 hash_loc_operands (l
, hstate
);
30669 /* Compute hash of the whole location list LIST_HEAD. */
30672 hash_loc_list (dw_loc_list_ref list_head
)
30674 dw_loc_list_ref curr
= list_head
;
30675 inchash::hash hstate
;
30677 for (curr
= list_head
; curr
!= NULL
; curr
= curr
->dw_loc_next
)
30679 hstate
.add (curr
->begin
, strlen (curr
->begin
) + 1);
30680 hstate
.add (curr
->end
, strlen (curr
->end
) + 1);
30681 hstate
.add_object (curr
->vbegin
);
30682 hstate
.add_object (curr
->vend
);
30684 hstate
.add (curr
->section
, strlen (curr
->section
) + 1);
30685 hash_locs (curr
->expr
, hstate
);
30687 list_head
->hash
= hstate
.end ();
30690 /* Return true if X and Y opcodes have the same operands. */
30693 compare_loc_operands (dw_loc_descr_ref x
, dw_loc_descr_ref y
)
30695 dw_val_ref valx1
= &x
->dw_loc_oprnd1
;
30696 dw_val_ref valx2
= &x
->dw_loc_oprnd2
;
30697 dw_val_ref valy1
= &y
->dw_loc_oprnd1
;
30698 dw_val_ref valy2
= &y
->dw_loc_oprnd2
;
30700 switch (x
->dw_loc_opc
)
30702 case DW_OP_const4u
:
30703 case DW_OP_const8u
:
30707 case DW_OP_const1u
:
30708 case DW_OP_const1s
:
30709 case DW_OP_const2u
:
30710 case DW_OP_const2s
:
30711 case DW_OP_const4s
:
30712 case DW_OP_const8s
:
30716 case DW_OP_plus_uconst
:
30752 case DW_OP_deref_size
:
30753 case DW_OP_xderef_size
:
30754 return valx1
->v
.val_int
== valy1
->v
.val_int
;
30757 /* If splitting debug info, the use of DW_OP_GNU_addr_index
30758 can cause irrelevant differences in dw_loc_addr. */
30759 gcc_assert (valx1
->val_class
== dw_val_class_loc
30760 && valy1
->val_class
== dw_val_class_loc
30761 && (dwarf_split_debug_info
30762 || x
->dw_loc_addr
== y
->dw_loc_addr
));
30763 return valx1
->v
.val_loc
->dw_loc_addr
== valy1
->v
.val_loc
->dw_loc_addr
;
30764 case DW_OP_implicit_value
:
30765 if (valx1
->v
.val_unsigned
!= valy1
->v
.val_unsigned
30766 || valx2
->val_class
!= valy2
->val_class
)
30768 switch (valx2
->val_class
)
30770 case dw_val_class_const
:
30771 return valx2
->v
.val_int
== valy2
->v
.val_int
;
30772 case dw_val_class_vec
:
30773 return valx2
->v
.val_vec
.elt_size
== valy2
->v
.val_vec
.elt_size
30774 && valx2
->v
.val_vec
.length
== valy2
->v
.val_vec
.length
30775 && memcmp (valx2
->v
.val_vec
.array
, valy2
->v
.val_vec
.array
,
30776 valx2
->v
.val_vec
.elt_size
30777 * valx2
->v
.val_vec
.length
) == 0;
30778 case dw_val_class_const_double
:
30779 return valx2
->v
.val_double
.low
== valy2
->v
.val_double
.low
30780 && valx2
->v
.val_double
.high
== valy2
->v
.val_double
.high
;
30781 case dw_val_class_wide_int
:
30782 return *valx2
->v
.val_wide
== *valy2
->v
.val_wide
;
30783 case dw_val_class_addr
:
30784 return rtx_equal_p (valx2
->v
.val_addr
, valy2
->v
.val_addr
);
30786 gcc_unreachable ();
30789 case DW_OP_bit_piece
:
30790 return valx1
->v
.val_int
== valy1
->v
.val_int
30791 && valx2
->v
.val_int
== valy2
->v
.val_int
;
30794 return rtx_equal_p (valx1
->v
.val_addr
, valy1
->v
.val_addr
);
30795 case DW_OP_GNU_addr_index
:
30797 case DW_OP_GNU_const_index
:
30800 rtx ax1
= valx1
->val_entry
->addr
.rtl
;
30801 rtx ay1
= valy1
->val_entry
->addr
.rtl
;
30802 return rtx_equal_p (ax1
, ay1
);
30804 case DW_OP_implicit_pointer
:
30805 case DW_OP_GNU_implicit_pointer
:
30806 return valx1
->val_class
== dw_val_class_die_ref
30807 && valx1
->val_class
== valy1
->val_class
30808 && valx1
->v
.val_die_ref
.die
== valy1
->v
.val_die_ref
.die
30809 && valx2
->v
.val_int
== valy2
->v
.val_int
;
30810 case DW_OP_entry_value
:
30811 case DW_OP_GNU_entry_value
:
30812 return compare_loc_operands (valx1
->v
.val_loc
, valy1
->v
.val_loc
);
30813 case DW_OP_const_type
:
30814 case DW_OP_GNU_const_type
:
30815 if (valx1
->v
.val_die_ref
.die
!= valy1
->v
.val_die_ref
.die
30816 || valx2
->val_class
!= valy2
->val_class
)
30818 switch (valx2
->val_class
)
30820 case dw_val_class_const
:
30821 return valx2
->v
.val_int
== valy2
->v
.val_int
;
30822 case dw_val_class_vec
:
30823 return valx2
->v
.val_vec
.elt_size
== valy2
->v
.val_vec
.elt_size
30824 && valx2
->v
.val_vec
.length
== valy2
->v
.val_vec
.length
30825 && memcmp (valx2
->v
.val_vec
.array
, valy2
->v
.val_vec
.array
,
30826 valx2
->v
.val_vec
.elt_size
30827 * valx2
->v
.val_vec
.length
) == 0;
30828 case dw_val_class_const_double
:
30829 return valx2
->v
.val_double
.low
== valy2
->v
.val_double
.low
30830 && valx2
->v
.val_double
.high
== valy2
->v
.val_double
.high
;
30831 case dw_val_class_wide_int
:
30832 return *valx2
->v
.val_wide
== *valy2
->v
.val_wide
;
30834 gcc_unreachable ();
30836 case DW_OP_regval_type
:
30837 case DW_OP_deref_type
:
30838 case DW_OP_GNU_regval_type
:
30839 case DW_OP_GNU_deref_type
:
30840 return valx1
->v
.val_int
== valy1
->v
.val_int
30841 && valx2
->v
.val_die_ref
.die
== valy2
->v
.val_die_ref
.die
;
30842 case DW_OP_convert
:
30843 case DW_OP_reinterpret
:
30844 case DW_OP_GNU_convert
:
30845 case DW_OP_GNU_reinterpret
:
30846 if (valx1
->val_class
!= valy1
->val_class
)
30848 if (valx1
->val_class
== dw_val_class_unsigned_const
)
30849 return valx1
->v
.val_unsigned
== valy1
->v
.val_unsigned
;
30850 return valx1
->v
.val_die_ref
.die
== valy1
->v
.val_die_ref
.die
;
30851 case DW_OP_GNU_parameter_ref
:
30852 return valx1
->val_class
== dw_val_class_die_ref
30853 && valx1
->val_class
== valy1
->val_class
30854 && valx1
->v
.val_die_ref
.die
== valy1
->v
.val_die_ref
.die
;
30856 /* Other codes have no operands. */
30861 /* Return true if DWARF location expressions X and Y are the same. */
30864 compare_locs (dw_loc_descr_ref x
, dw_loc_descr_ref y
)
30866 for (; x
!= NULL
&& y
!= NULL
; x
= x
->dw_loc_next
, y
= y
->dw_loc_next
)
30867 if (x
->dw_loc_opc
!= y
->dw_loc_opc
30868 || x
->dtprel
!= y
->dtprel
30869 || !compare_loc_operands (x
, y
))
30871 return x
== NULL
&& y
== NULL
;
30874 /* Hashtable helpers. */
30876 struct loc_list_hasher
: nofree_ptr_hash
<dw_loc_list_struct
>
30878 static inline hashval_t
hash (const dw_loc_list_struct
*);
30879 static inline bool equal (const dw_loc_list_struct
*,
30880 const dw_loc_list_struct
*);
30883 /* Return precomputed hash of location list X. */
30886 loc_list_hasher::hash (const dw_loc_list_struct
*x
)
30891 /* Return true if location lists A and B are the same. */
30894 loc_list_hasher::equal (const dw_loc_list_struct
*a
,
30895 const dw_loc_list_struct
*b
)
30899 if (a
->hash
!= b
->hash
)
30901 for (; a
!= NULL
&& b
!= NULL
; a
= a
->dw_loc_next
, b
= b
->dw_loc_next
)
30902 if (strcmp (a
->begin
, b
->begin
) != 0
30903 || strcmp (a
->end
, b
->end
) != 0
30904 || (a
->section
== NULL
) != (b
->section
== NULL
)
30905 || (a
->section
&& strcmp (a
->section
, b
->section
) != 0)
30906 || a
->vbegin
!= b
->vbegin
|| a
->vend
!= b
->vend
30907 || !compare_locs (a
->expr
, b
->expr
))
30909 return a
== NULL
&& b
== NULL
;
30912 typedef hash_table
<loc_list_hasher
> loc_list_hash_type
;
30915 /* Recursively optimize location lists referenced from DIE
30916 children and share them whenever possible. */
30919 optimize_location_lists_1 (dw_die_ref die
, loc_list_hash_type
*htab
)
30924 dw_loc_list_struct
**slot
;
30925 bool drop_locviews
= false;
30926 bool has_locviews
= false;
30928 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
30929 if (AT_class (a
) == dw_val_class_loc_list
)
30931 dw_loc_list_ref list
= AT_loc_list (a
);
30932 /* TODO: perform some optimizations here, before hashing
30933 it and storing into the hash table. */
30934 hash_loc_list (list
);
30935 slot
= htab
->find_slot_with_hash (list
, list
->hash
, INSERT
);
30939 if (loc_list_has_views (list
))
30940 gcc_assert (list
->vl_symbol
);
30941 else if (list
->vl_symbol
)
30943 drop_locviews
= true;
30944 list
->vl_symbol
= NULL
;
30949 if (list
->vl_symbol
&& !(*slot
)->vl_symbol
)
30950 drop_locviews
= true;
30951 a
->dw_attr_val
.v
.val_loc_list
= *slot
;
30954 else if (AT_class (a
) == dw_val_class_view_list
)
30956 gcc_checking_assert (a
->dw_attr
== DW_AT_GNU_locviews
);
30957 has_locviews
= true;
30961 if (drop_locviews
&& has_locviews
)
30962 remove_AT (die
, DW_AT_GNU_locviews
);
30964 FOR_EACH_CHILD (die
, c
, optimize_location_lists_1 (c
, htab
));
30968 /* Recursively assign each location list a unique index into the debug_addr
30972 index_location_lists (dw_die_ref die
)
30978 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
30979 if (AT_class (a
) == dw_val_class_loc_list
)
30981 dw_loc_list_ref list
= AT_loc_list (a
);
30982 dw_loc_list_ref curr
;
30983 for (curr
= list
; curr
!= NULL
; curr
= curr
->dw_loc_next
)
30985 /* Don't index an entry that has already been indexed
30986 or won't be output. Make sure skip_loc_list_entry doesn't
30987 call size_of_locs, because that might cause circular dependency,
30988 index_location_lists requiring address table indexes to be
30989 computed, but adding new indexes through add_addr_table_entry
30990 and address table index computation requiring no new additions
30991 to the hash table. In the rare case of DWARF[234] >= 64KB
30992 location expression, we'll just waste unused address table entry
30994 if (curr
->begin_entry
!= NULL
30995 || skip_loc_list_entry (curr
))
30999 = add_addr_table_entry (xstrdup (curr
->begin
), ate_kind_label
);
31003 FOR_EACH_CHILD (die
, c
, index_location_lists (c
));
31006 /* Optimize location lists referenced from DIE
31007 children and share them whenever possible. */
31010 optimize_location_lists (dw_die_ref die
)
31012 loc_list_hash_type
htab (500);
31013 optimize_location_lists_1 (die
, &htab
);
31016 /* Traverse the limbo die list, and add parent/child links. The only
31017 dies without parents that should be here are concrete instances of
31018 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
31019 For concrete instances, we can get the parent die from the abstract
31023 flush_limbo_die_list (void)
31025 limbo_die_node
*node
;
31027 /* get_context_die calls force_decl_die, which can put new DIEs on the
31028 limbo list in LTO mode when nested functions are put in a different
31029 partition than that of their parent function. */
31030 while ((node
= limbo_die_list
))
31032 dw_die_ref die
= node
->die
;
31033 limbo_die_list
= node
->next
;
31035 if (die
->die_parent
== NULL
)
31037 dw_die_ref origin
= get_AT_ref (die
, DW_AT_abstract_origin
);
31039 if (origin
&& origin
->die_parent
)
31040 add_child_die (origin
->die_parent
, die
);
31041 else if (is_cu_die (die
))
31043 else if (seen_error ())
31044 /* It's OK to be confused by errors in the input. */
31045 add_child_die (comp_unit_die (), die
);
31048 /* In certain situations, the lexical block containing a
31049 nested function can be optimized away, which results
31050 in the nested function die being orphaned. Likewise
31051 with the return type of that nested function. Force
31052 this to be a child of the containing function.
31054 It may happen that even the containing function got fully
31055 inlined and optimized out. In that case we are lost and
31056 assign the empty child. This should not be big issue as
31057 the function is likely unreachable too. */
31058 gcc_assert (node
->created_for
);
31060 if (DECL_P (node
->created_for
))
31061 origin
= get_context_die (DECL_CONTEXT (node
->created_for
));
31062 else if (TYPE_P (node
->created_for
))
31063 origin
= scope_die_for (node
->created_for
, comp_unit_die ());
31065 origin
= comp_unit_die ();
31067 add_child_die (origin
, die
);
31073 /* Reset DIEs so we can output them again. */
31076 reset_dies (dw_die_ref die
)
31080 /* Remove stuff we re-generate. */
31082 die
->die_offset
= 0;
31083 die
->die_abbrev
= 0;
31084 remove_AT (die
, DW_AT_sibling
);
31086 FOR_EACH_CHILD (die
, c
, reset_dies (c
));
31089 /* Output stuff that dwarf requires at the end of every file,
31090 and generate the DWARF-2 debugging info. */
31093 dwarf2out_finish (const char *filename
)
31095 comdat_type_node
*ctnode
;
31096 dw_die_ref main_comp_unit_die
;
31097 unsigned char checksum
[16];
31098 char dl_section_ref
[MAX_ARTIFICIAL_LABEL_BYTES
];
31100 /* Flush out any latecomers to the limbo party. */
31101 flush_limbo_die_list ();
31103 if (inline_entry_data_table
)
31104 gcc_assert (inline_entry_data_table
->elements () == 0);
31108 verify_die (comp_unit_die ());
31109 for (limbo_die_node
*node
= cu_die_list
; node
; node
= node
->next
)
31110 verify_die (node
->die
);
31113 /* We shouldn't have any symbols with delayed asm names for
31114 DIEs generated after early finish. */
31115 gcc_assert (deferred_asm_name
== NULL
);
31117 gen_remaining_tmpl_value_param_die_attribute ();
31119 if (flag_generate_lto
|| flag_generate_offload
)
31121 gcc_assert (flag_fat_lto_objects
|| flag_generate_offload
);
31123 /* Prune stuff so that dwarf2out_finish runs successfully
31124 for the fat part of the object. */
31125 reset_dies (comp_unit_die ());
31126 for (limbo_die_node
*node
= cu_die_list
; node
; node
= node
->next
)
31127 reset_dies (node
->die
);
31129 hash_table
<comdat_type_hasher
> comdat_type_table (100);
31130 for (ctnode
= comdat_type_list
; ctnode
!= NULL
; ctnode
= ctnode
->next
)
31132 comdat_type_node
**slot
31133 = comdat_type_table
.find_slot (ctnode
, INSERT
);
31135 /* Don't reset types twice. */
31136 if (*slot
!= HTAB_EMPTY_ENTRY
)
31139 /* Remove the pointer to the line table. */
31140 remove_AT (ctnode
->root_die
, DW_AT_stmt_list
);
31142 if (debug_info_level
>= DINFO_LEVEL_TERSE
)
31143 reset_dies (ctnode
->root_die
);
31148 /* Reset die CU symbol so we don't output it twice. */
31149 comp_unit_die ()->die_id
.die_symbol
= NULL
;
31151 /* Remove DW_AT_macro and DW_AT_stmt_list from the early output. */
31152 remove_AT (comp_unit_die (), DW_AT_stmt_list
);
31154 remove_AT (comp_unit_die (), DEBUG_MACRO_ATTRIBUTE
);
31156 /* Remove indirect string decisions. */
31157 debug_str_hash
->traverse
<void *, reset_indirect_string
> (NULL
);
31158 if (debug_line_str_hash
)
31160 debug_line_str_hash
->traverse
<void *, reset_indirect_string
> (NULL
);
31161 debug_line_str_hash
= NULL
;
31165 #if ENABLE_ASSERT_CHECKING
31167 dw_die_ref die
= comp_unit_die (), c
;
31168 FOR_EACH_CHILD (die
, c
, gcc_assert (! c
->die_mark
));
31171 resolve_addr (comp_unit_die ());
31172 move_marked_base_types ();
31176 fprintf (dump_file
, "DWARF for %s\n", filename
);
31177 print_die (comp_unit_die (), dump_file
);
31180 /* Initialize sections and labels used for actual assembler output. */
31181 unsigned generation
= init_sections_and_labels (false);
31183 /* Traverse the DIE's and add sibling attributes to those DIE's that
31185 add_sibling_attributes (comp_unit_die ());
31186 limbo_die_node
*node
;
31187 for (node
= cu_die_list
; node
; node
= node
->next
)
31188 add_sibling_attributes (node
->die
);
31189 for (ctnode
= comdat_type_list
; ctnode
!= NULL
; ctnode
= ctnode
->next
)
31190 add_sibling_attributes (ctnode
->root_die
);
31192 /* When splitting DWARF info, we put some attributes in the
31193 skeleton compile_unit DIE that remains in the .o, while
31194 most attributes go in the DWO compile_unit_die. */
31195 if (dwarf_split_debug_info
)
31197 limbo_die_node
*cu
;
31198 main_comp_unit_die
= gen_compile_unit_die (NULL
);
31199 if (dwarf_version
>= 5)
31200 main_comp_unit_die
->die_tag
= DW_TAG_skeleton_unit
;
31201 cu
= limbo_die_list
;
31202 gcc_assert (cu
->die
== main_comp_unit_die
);
31203 limbo_die_list
= limbo_die_list
->next
;
31204 cu
->next
= cu_die_list
;
31208 main_comp_unit_die
= comp_unit_die ();
31210 /* Output a terminator label for the .text section. */
31211 switch_to_section (text_section
);
31212 targetm
.asm_out
.internal_label (asm_out_file
, TEXT_END_LABEL
, 0);
31213 if (cold_text_section
)
31215 switch_to_section (cold_text_section
);
31216 targetm
.asm_out
.internal_label (asm_out_file
, COLD_END_LABEL
, 0);
31219 /* We can only use the low/high_pc attributes if all of the code was
31221 if (!have_multiple_function_sections
31222 || (dwarf_version
< 3 && dwarf_strict
))
31224 /* Don't add if the CU has no associated code. */
31225 if (text_section_used
)
31226 add_AT_low_high_pc (main_comp_unit_die
, text_section_label
,
31227 text_end_label
, true);
31233 bool range_list_added
= false;
31235 if (text_section_used
)
31236 add_ranges_by_labels (main_comp_unit_die
, text_section_label
,
31237 text_end_label
, &range_list_added
, true);
31238 if (cold_text_section_used
)
31239 add_ranges_by_labels (main_comp_unit_die
, cold_text_section_label
,
31240 cold_end_label
, &range_list_added
, true);
31242 FOR_EACH_VEC_ELT (*fde_vec
, fde_idx
, fde
)
31244 if (DECL_IGNORED_P (fde
->decl
))
31246 if (!fde
->in_std_section
)
31247 add_ranges_by_labels (main_comp_unit_die
, fde
->dw_fde_begin
,
31248 fde
->dw_fde_end
, &range_list_added
,
31250 if (fde
->dw_fde_second_begin
&& !fde
->second_in_std_section
)
31251 add_ranges_by_labels (main_comp_unit_die
, fde
->dw_fde_second_begin
,
31252 fde
->dw_fde_second_end
, &range_list_added
,
31256 if (range_list_added
)
31258 /* We need to give .debug_loc and .debug_ranges an appropriate
31259 "base address". Use zero so that these addresses become
31260 absolute. Historically, we've emitted the unexpected
31261 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
31262 Emit both to give time for other tools to adapt. */
31263 add_AT_addr (main_comp_unit_die
, DW_AT_low_pc
, const0_rtx
, true);
31264 if (! dwarf_strict
&& dwarf_version
< 4)
31265 add_AT_addr (main_comp_unit_die
, DW_AT_entry_pc
, const0_rtx
, true);
31271 /* AIX Assembler inserts the length, so adjust the reference to match the
31272 offset expected by debuggers. */
31273 strcpy (dl_section_ref
, debug_line_section_label
);
31274 if (XCOFF_DEBUGGING_INFO
)
31275 strcat (dl_section_ref
, DWARF_INITIAL_LENGTH_SIZE_STR
);
31277 if (debug_info_level
>= DINFO_LEVEL_TERSE
)
31278 add_AT_lineptr (main_comp_unit_die
, DW_AT_stmt_list
,
31282 add_AT_macptr (comp_unit_die (), DEBUG_MACRO_ATTRIBUTE
,
31283 macinfo_section_label
);
31285 if (dwarf_split_debug_info
)
31287 if (have_location_lists
)
31289 /* Since we generate the loclists in the split DWARF .dwo
31290 file itself, we don't need to generate a loclists_base
31291 attribute for the split compile unit DIE. That attribute
31292 (and using relocatable sec_offset FORMs) isn't allowed
31293 for a split compile unit. Only if the .debug_loclists
31294 section was in the main file, would we need to generate a
31295 loclists_base attribute here (for the full or skeleton
31298 /* optimize_location_lists calculates the size of the lists,
31299 so index them first, and assign indices to the entries.
31300 Although optimize_location_lists will remove entries from
31301 the table, it only does so for duplicates, and therefore
31302 only reduces ref_counts to 1. */
31303 index_location_lists (comp_unit_die ());
31306 if (addr_index_table
!= NULL
)
31308 unsigned int index
= 0;
31310 ->traverse_noresize
<unsigned int *, index_addr_table_entry
>
31316 if (have_location_lists
)
31318 optimize_location_lists (comp_unit_die ());
31319 /* And finally assign indexes to the entries for -gsplit-dwarf. */
31320 if (dwarf_version
>= 5 && dwarf_split_debug_info
)
31321 assign_location_list_indexes (comp_unit_die ());
31324 save_macinfo_strings ();
31326 if (dwarf_split_debug_info
)
31328 unsigned int index
= 0;
31330 /* Add attributes common to skeleton compile_units and
31331 type_units. Because these attributes include strings, it
31332 must be done before freezing the string table. Top-level
31333 skeleton die attrs are added when the skeleton type unit is
31334 created, so ensure it is created by this point. */
31335 add_top_level_skeleton_die_attrs (main_comp_unit_die
);
31336 debug_str_hash
->traverse_noresize
<unsigned int *, index_string
> (&index
);
31339 /* Output all of the compilation units. We put the main one last so that
31340 the offsets are available to output_pubnames. */
31341 for (node
= cu_die_list
; node
; node
= node
->next
)
31342 output_comp_unit (node
->die
, 0, NULL
);
31344 hash_table
<comdat_type_hasher
> comdat_type_table (100);
31345 for (ctnode
= comdat_type_list
; ctnode
!= NULL
; ctnode
= ctnode
->next
)
31347 comdat_type_node
**slot
= comdat_type_table
.find_slot (ctnode
, INSERT
);
31349 /* Don't output duplicate types. */
31350 if (*slot
!= HTAB_EMPTY_ENTRY
)
31353 /* Add a pointer to the line table for the main compilation unit
31354 so that the debugger can make sense of DW_AT_decl_file
31356 if (debug_info_level
>= DINFO_LEVEL_TERSE
)
31357 add_AT_lineptr (ctnode
->root_die
, DW_AT_stmt_list
,
31358 (!dwarf_split_debug_info
31360 : debug_skeleton_line_section_label
));
31362 output_comdat_type_unit (ctnode
);
31366 if (dwarf_split_debug_info
)
31369 struct md5_ctx ctx
;
31371 if (dwarf_version
>= 5 && !vec_safe_is_empty (ranges_table
))
31374 /* Compute a checksum of the comp_unit to use as the dwo_id. */
31375 md5_init_ctx (&ctx
);
31377 die_checksum (comp_unit_die (), &ctx
, &mark
);
31378 unmark_all_dies (comp_unit_die ());
31379 md5_finish_ctx (&ctx
, checksum
);
31381 if (dwarf_version
< 5)
31383 /* Use the first 8 bytes of the checksum as the dwo_id,
31384 and add it to both comp-unit DIEs. */
31385 add_AT_data8 (main_comp_unit_die
, DW_AT_GNU_dwo_id
, checksum
);
31386 add_AT_data8 (comp_unit_die (), DW_AT_GNU_dwo_id
, checksum
);
31389 /* Add the base offset of the ranges table to the skeleton
31391 if (!vec_safe_is_empty (ranges_table
))
31393 if (dwarf_version
>= 5)
31394 add_AT_lineptr (main_comp_unit_die
, DW_AT_rnglists_base
,
31395 ranges_base_label
);
31397 add_AT_lineptr (main_comp_unit_die
, DW_AT_GNU_ranges_base
,
31398 ranges_section_label
);
31401 switch_to_section (debug_addr_section
);
31402 /* GNU DebugFission https://gcc.gnu.org/wiki/DebugFission
31403 which GCC uses to implement -gsplit-dwarf as DWARF GNU extension
31404 before DWARF5, didn't have a header for .debug_addr units.
31405 DWARF5 specifies a small header when address tables are used. */
31406 if (dwarf_version
>= 5)
31408 unsigned int last_idx
= 0;
31409 unsigned long addrs_length
;
31411 addr_index_table
->traverse_noresize
31412 <unsigned int *, count_index_addrs
> (&last_idx
);
31413 addrs_length
= last_idx
* DWARF2_ADDR_SIZE
+ 4;
31415 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
31416 dw2_asm_output_data (4, 0xffffffff,
31417 "Escape value for 64-bit DWARF extension");
31418 dw2_asm_output_data (DWARF_OFFSET_SIZE
, addrs_length
,
31419 "Length of Address Unit");
31420 dw2_asm_output_data (2, 5, "DWARF addr version");
31421 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Size of Address");
31422 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
31424 ASM_OUTPUT_LABEL (asm_out_file
, debug_addr_section_label
);
31425 output_addr_table ();
31428 /* Output the main compilation unit if non-empty or if .debug_macinfo
31429 or .debug_macro will be emitted. */
31430 output_comp_unit (comp_unit_die (), have_macinfo
,
31431 dwarf_split_debug_info
? checksum
: NULL
);
31433 if (dwarf_split_debug_info
&& info_section_emitted
)
31434 output_skeleton_debug_sections (main_comp_unit_die
, checksum
);
31436 /* Output the abbreviation table. */
31437 if (vec_safe_length (abbrev_die_table
) != 1)
31439 switch_to_section (debug_abbrev_section
);
31440 ASM_OUTPUT_LABEL (asm_out_file
, abbrev_section_label
);
31441 output_abbrev_section ();
31444 /* Output location list section if necessary. */
31445 if (have_location_lists
)
31447 char l1
[MAX_ARTIFICIAL_LABEL_BYTES
];
31448 char l2
[MAX_ARTIFICIAL_LABEL_BYTES
];
31449 /* Output the location lists info. */
31450 switch_to_section (debug_loc_section
);
31451 if (dwarf_version
>= 5)
31453 ASM_GENERATE_INTERNAL_LABEL (l1
, DEBUG_LOC_SECTION_LABEL
, 2);
31454 ASM_GENERATE_INTERNAL_LABEL (l2
, DEBUG_LOC_SECTION_LABEL
, 3);
31455 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
31456 dw2_asm_output_data (4, 0xffffffff,
31457 "Initial length escape value indicating "
31458 "64-bit DWARF extension");
31459 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, l2
, l1
,
31460 "Length of Location Lists");
31461 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
31462 output_dwarf_version ();
31463 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Address Size");
31464 dw2_asm_output_data (1, 0, "Segment Size");
31465 dw2_asm_output_data (4, dwarf_split_debug_info
? loc_list_idx
: 0,
31466 "Offset Entry Count");
31468 ASM_OUTPUT_LABEL (asm_out_file
, loc_section_label
);
31469 if (dwarf_version
>= 5 && dwarf_split_debug_info
)
31471 unsigned int save_loc_list_idx
= loc_list_idx
;
31473 output_loclists_offsets (comp_unit_die ());
31474 gcc_assert (save_loc_list_idx
== loc_list_idx
);
31476 output_location_lists (comp_unit_die ());
31477 if (dwarf_version
>= 5)
31478 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
31481 output_pubtables ();
31483 /* Output the address range information if a CU (.debug_info section)
31484 was emitted. We output an empty table even if we had no functions
31485 to put in it. This because the consumer has no way to tell the
31486 difference between an empty table that we omitted and failure to
31487 generate a table that would have contained data. */
31488 if (info_section_emitted
)
31490 switch_to_section (debug_aranges_section
);
31494 /* Output ranges section if necessary. */
31495 if (!vec_safe_is_empty (ranges_table
))
31497 if (dwarf_version
>= 5)
31498 output_rnglists (generation
);
31503 /* Have to end the macro section. */
31506 switch_to_section (debug_macinfo_section
);
31507 ASM_OUTPUT_LABEL (asm_out_file
, macinfo_section_label
);
31508 output_macinfo (!dwarf_split_debug_info
? debug_line_section_label
31509 : debug_skeleton_line_section_label
, false);
31510 dw2_asm_output_data (1, 0, "End compilation unit");
31513 /* Output the source line correspondence table. We must do this
31514 even if there is no line information. Otherwise, on an empty
31515 translation unit, we will generate a present, but empty,
31516 .debug_info section. IRIX 6.5 `nm' will then complain when
31517 examining the file. This is done late so that any filenames
31518 used by the debug_info section are marked as 'used'. */
31519 switch_to_section (debug_line_section
);
31520 ASM_OUTPUT_LABEL (asm_out_file
, debug_line_section_label
);
31521 if (! output_asm_line_debug_info ())
31522 output_line_info (false);
31524 if (dwarf_split_debug_info
&& info_section_emitted
)
31526 switch_to_section (debug_skeleton_line_section
);
31527 ASM_OUTPUT_LABEL (asm_out_file
, debug_skeleton_line_section_label
);
31528 output_line_info (true);
31531 /* If we emitted any indirect strings, output the string table too. */
31532 if (debug_str_hash
|| skeleton_debug_str_hash
)
31533 output_indirect_strings ();
31534 if (debug_line_str_hash
)
31536 switch_to_section (debug_line_str_section
);
31537 const enum dwarf_form form
= DW_FORM_line_strp
;
31538 debug_line_str_hash
->traverse
<enum dwarf_form
,
31539 output_indirect_string
> (form
);
31542 /* ??? Move lvugid out of dwarf2out_source_line and reset it too? */
31543 symview_upper_bound
= 0;
31545 bitmap_clear (zero_view_p
);
31548 /* Returns a hash value for X (which really is a variable_value_struct). */
31551 variable_value_hasher::hash (variable_value_struct
*x
)
31553 return (hashval_t
) x
->decl_id
;
31556 /* Return nonzero if decl_id of variable_value_struct X is the same as
31560 variable_value_hasher::equal (variable_value_struct
*x
, tree y
)
31562 return x
->decl_id
== DECL_UID (y
);
31565 /* Helper function for resolve_variable_value, handle
31566 DW_OP_GNU_variable_value in one location expression.
31567 Return true if exprloc has been changed into loclist. */
31570 resolve_variable_value_in_expr (dw_attr_node
*a
, dw_loc_descr_ref loc
)
31572 dw_loc_descr_ref next
;
31573 for (dw_loc_descr_ref prev
= NULL
; loc
; prev
= loc
, loc
= next
)
31575 next
= loc
->dw_loc_next
;
31576 if (loc
->dw_loc_opc
!= DW_OP_GNU_variable_value
31577 || loc
->dw_loc_oprnd1
.val_class
!= dw_val_class_decl_ref
)
31580 tree decl
= loc
->dw_loc_oprnd1
.v
.val_decl_ref
;
31581 if (DECL_CONTEXT (decl
) != current_function_decl
)
31584 dw_die_ref ref
= lookup_decl_die (decl
);
31587 loc
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
31588 loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
31589 loc
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
31592 dw_loc_list_ref l
= loc_list_from_tree (decl
, 0, NULL
);
31595 if (l
->dw_loc_next
)
31597 if (AT_class (a
) != dw_val_class_loc
)
31599 switch (a
->dw_attr
)
31601 /* Following attributes allow both exprloc and loclist
31602 classes, so we can change them into a loclist. */
31603 case DW_AT_location
:
31604 case DW_AT_string_length
:
31605 case DW_AT_return_addr
:
31606 case DW_AT_data_member_location
:
31607 case DW_AT_frame_base
:
31608 case DW_AT_segment
:
31609 case DW_AT_static_link
:
31610 case DW_AT_use_location
:
31611 case DW_AT_vtable_elem_location
:
31614 prev
->dw_loc_next
= NULL
;
31615 prepend_loc_descr_to_each (l
, AT_loc (a
));
31618 add_loc_descr_to_each (l
, next
);
31619 a
->dw_attr_val
.val_class
= dw_val_class_loc_list
;
31620 a
->dw_attr_val
.val_entry
= NULL
;
31621 a
->dw_attr_val
.v
.val_loc_list
= l
;
31622 have_location_lists
= true;
31624 /* Following attributes allow both exprloc and reference,
31625 so if the whole expression is DW_OP_GNU_variable_value alone
31626 we could transform it into reference. */
31627 case DW_AT_byte_size
:
31628 case DW_AT_bit_size
:
31629 case DW_AT_lower_bound
:
31630 case DW_AT_upper_bound
:
31631 case DW_AT_bit_stride
:
31633 case DW_AT_allocated
:
31634 case DW_AT_associated
:
31635 case DW_AT_byte_stride
:
31636 if (prev
== NULL
&& next
== NULL
)
31644 /* Create DW_TAG_variable that we can refer to. */
31645 gen_decl_die (decl
, NULL_TREE
, NULL
,
31646 lookup_decl_die (current_function_decl
));
31647 ref
= lookup_decl_die (decl
);
31650 loc
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
31651 loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
31652 loc
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
31658 prev
->dw_loc_next
= l
->expr
;
31659 add_loc_descr (&prev
->dw_loc_next
, next
);
31660 free_loc_descr (loc
, NULL
);
31661 next
= prev
->dw_loc_next
;
31665 memcpy (loc
, l
->expr
, sizeof (dw_loc_descr_node
));
31666 add_loc_descr (&loc
, next
);
31674 /* Attempt to resolve DW_OP_GNU_variable_value using loc_list_from_tree. */
31677 resolve_variable_value (dw_die_ref die
)
31680 dw_loc_list_ref loc
;
31683 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
31684 switch (AT_class (a
))
31686 case dw_val_class_loc
:
31687 if (!resolve_variable_value_in_expr (a
, AT_loc (a
)))
31690 case dw_val_class_loc_list
:
31691 loc
= AT_loc_list (a
);
31693 for (; loc
; loc
= loc
->dw_loc_next
)
31694 resolve_variable_value_in_expr (a
, loc
->expr
);
31701 /* Attempt to optimize DW_OP_GNU_variable_value refering to
31702 temporaries in the current function. */
31705 resolve_variable_values (void)
31707 if (!variable_value_hash
|| !current_function_decl
)
31710 struct variable_value_struct
*node
31711 = variable_value_hash
->find_with_hash (current_function_decl
,
31712 DECL_UID (current_function_decl
));
31719 FOR_EACH_VEC_SAFE_ELT (node
->dies
, i
, die
)
31720 resolve_variable_value (die
);
31723 /* Helper function for note_variable_value, handle one location
31727 note_variable_value_in_expr (dw_die_ref die
, dw_loc_descr_ref loc
)
31729 for (; loc
; loc
= loc
->dw_loc_next
)
31730 if (loc
->dw_loc_opc
== DW_OP_GNU_variable_value
31731 && loc
->dw_loc_oprnd1
.val_class
== dw_val_class_decl_ref
)
31733 tree decl
= loc
->dw_loc_oprnd1
.v
.val_decl_ref
;
31734 dw_die_ref ref
= lookup_decl_die (decl
);
31735 if (! ref
&& (flag_generate_lto
|| flag_generate_offload
))
31737 /* ??? This is somewhat a hack because we do not create DIEs
31738 for variables not in BLOCK trees early but when generating
31739 early LTO output we need the dw_val_class_decl_ref to be
31740 fully resolved. For fat LTO objects we'd also like to
31741 undo this after LTO dwarf output. */
31742 gcc_assert (DECL_CONTEXT (decl
));
31743 dw_die_ref ctx
= lookup_decl_die (DECL_CONTEXT (decl
));
31744 gcc_assert (ctx
!= NULL
);
31745 gen_decl_die (decl
, NULL_TREE
, NULL
, ctx
);
31746 ref
= lookup_decl_die (decl
);
31747 gcc_assert (ref
!= NULL
);
31751 loc
->dw_loc_oprnd1
.val_class
= dw_val_class_die_ref
;
31752 loc
->dw_loc_oprnd1
.v
.val_die_ref
.die
= ref
;
31753 loc
->dw_loc_oprnd1
.v
.val_die_ref
.external
= 0;
31757 && DECL_CONTEXT (decl
)
31758 && TREE_CODE (DECL_CONTEXT (decl
)) == FUNCTION_DECL
31759 && lookup_decl_die (DECL_CONTEXT (decl
)))
31761 if (!variable_value_hash
)
31762 variable_value_hash
31763 = hash_table
<variable_value_hasher
>::create_ggc (10);
31765 tree fndecl
= DECL_CONTEXT (decl
);
31766 struct variable_value_struct
*node
;
31767 struct variable_value_struct
**slot
31768 = variable_value_hash
->find_slot_with_hash (fndecl
,
31773 node
= ggc_cleared_alloc
<variable_value_struct
> ();
31774 node
->decl_id
= DECL_UID (fndecl
);
31780 vec_safe_push (node
->dies
, die
);
31785 /* Walk the tree DIE and note DIEs with DW_OP_GNU_variable_value still
31786 with dw_val_class_decl_ref operand. */
31789 note_variable_value (dw_die_ref die
)
31793 dw_loc_list_ref loc
;
31796 FOR_EACH_VEC_SAFE_ELT (die
->die_attr
, ix
, a
)
31797 switch (AT_class (a
))
31799 case dw_val_class_loc_list
:
31800 loc
= AT_loc_list (a
);
31802 if (!loc
->noted_variable_value
)
31804 loc
->noted_variable_value
= 1;
31805 for (; loc
; loc
= loc
->dw_loc_next
)
31806 note_variable_value_in_expr (die
, loc
->expr
);
31809 case dw_val_class_loc
:
31810 note_variable_value_in_expr (die
, AT_loc (a
));
31816 /* Mark children. */
31817 FOR_EACH_CHILD (die
, c
, note_variable_value (c
));
31820 /* Perform any cleanups needed after the early debug generation pass
31824 dwarf2out_early_finish (const char *filename
)
31827 char dl_section_ref
[MAX_ARTIFICIAL_LABEL_BYTES
];
31829 /* PCH might result in DW_AT_producer string being restored from the
31830 header compilation, so always fill it with empty string initially
31831 and overwrite only here. */
31832 dw_attr_node
*producer
= get_AT (comp_unit_die (), DW_AT_producer
);
31833 producer_string
= gen_producer_string ();
31834 producer
->dw_attr_val
.v
.val_str
->refcount
--;
31835 producer
->dw_attr_val
.v
.val_str
= find_AT_string (producer_string
);
31837 /* Add the name for the main input file now. We delayed this from
31838 dwarf2out_init to avoid complications with PCH. */
31839 add_name_attribute (comp_unit_die (), remap_debug_filename (filename
));
31840 add_comp_dir_attribute (comp_unit_die ());
31842 /* When emitting DWARF5 .debug_line_str, move DW_AT_name and
31843 DW_AT_comp_dir into .debug_line_str section. */
31844 if (!output_asm_line_debug_info ()
31845 && dwarf_version
>= 5
31846 && DWARF5_USE_DEBUG_LINE_STR
)
31848 for (int i
= 0; i
< 2; i
++)
31850 dw_attr_node
*a
= get_AT (comp_unit_die (),
31851 i
? DW_AT_comp_dir
: DW_AT_name
);
31853 || AT_class (a
) != dw_val_class_str
31854 || strlen (AT_string (a
)) + 1 <= DWARF_OFFSET_SIZE
)
31857 if (! debug_line_str_hash
)
31858 debug_line_str_hash
31859 = hash_table
<indirect_string_hasher
>::create_ggc (10);
31861 struct indirect_string_node
*node
31862 = find_AT_string_in_table (AT_string (a
), debug_line_str_hash
);
31863 set_indirect_string (node
);
31864 node
->form
= DW_FORM_line_strp
;
31865 a
->dw_attr_val
.v
.val_str
->refcount
--;
31866 a
->dw_attr_val
.v
.val_str
= node
;
31870 /* With LTO early dwarf was really finished at compile-time, so make
31871 sure to adjust the phase after annotating the LTRANS CU DIE. */
31874 /* Force DW_TAG_imported_unit to be created now, otherwise
31875 we might end up without it or ordered after DW_TAG_inlined_subroutine
31876 referencing DIEs from it. */
31877 if (! flag_wpa
&& flag_incremental_link
!= INCREMENTAL_LINK_LTO
)
31881 if (external_die_map
)
31882 FOR_EACH_VEC_SAFE_ELT (all_translation_units
, i
, tu
)
31883 if (sym_off_pair
*desc
= external_die_map
->get (tu
))
31885 dw_die_ref import
= new_die (DW_TAG_imported_unit
,
31886 comp_unit_die (), NULL_TREE
);
31887 add_AT_external_die_ref (import
, DW_AT_import
,
31888 desc
->sym
, desc
->off
);
31892 early_dwarf_finished
= true;
31895 fprintf (dump_file
, "LTO EARLY DWARF for %s\n", filename
);
31896 print_die (comp_unit_die (), dump_file
);
31901 /* Walk through the list of incomplete types again, trying once more to
31902 emit full debugging info for them. */
31903 retry_incomplete_types ();
31905 /* The point here is to flush out the limbo list so that it is empty
31906 and we don't need to stream it for LTO. */
31907 flush_limbo_die_list ();
31909 gen_scheduled_generic_parms_dies ();
31910 gen_remaining_tmpl_value_param_die_attribute ();
31912 /* Add DW_AT_linkage_name for all deferred DIEs. */
31913 for (limbo_die_node
*node
= deferred_asm_name
; node
; node
= node
->next
)
31915 tree decl
= node
->created_for
;
31916 if (DECL_ASSEMBLER_NAME (decl
) != DECL_NAME (decl
)
31917 /* A missing DECL_ASSEMBLER_NAME can be a constant DIE that
31918 ended up in deferred_asm_name before we knew it was
31919 constant and never written to disk. */
31920 && DECL_ASSEMBLER_NAME (decl
))
31922 add_linkage_attr (node
->die
, decl
);
31923 move_linkage_attr (node
->die
);
31926 deferred_asm_name
= NULL
;
31928 if (flag_eliminate_unused_debug_types
)
31929 prune_unused_types ();
31931 /* Generate separate COMDAT sections for type DIEs. */
31932 if (use_debug_types
)
31934 break_out_comdat_types (comp_unit_die ());
31936 /* Each new type_unit DIE was added to the limbo die list when created.
31937 Since these have all been added to comdat_type_list, clear the
31939 limbo_die_list
= NULL
;
31941 /* For each new comdat type unit, copy declarations for incomplete
31942 types to make the new unit self-contained (i.e., no direct
31943 references to the main compile unit). */
31944 for (comdat_type_node
*ctnode
= comdat_type_list
;
31945 ctnode
!= NULL
; ctnode
= ctnode
->next
)
31946 copy_decls_for_unworthy_types (ctnode
->root_die
);
31947 copy_decls_for_unworthy_types (comp_unit_die ());
31949 /* In the process of copying declarations from one unit to another,
31950 we may have left some declarations behind that are no longer
31951 referenced. Prune them. */
31952 prune_unused_types ();
31955 /* Traverse the DIE's and note DIEs with DW_OP_GNU_variable_value still
31956 with dw_val_class_decl_ref operand. */
31957 note_variable_value (comp_unit_die ());
31958 for (limbo_die_node
*node
= cu_die_list
; node
; node
= node
->next
)
31959 note_variable_value (node
->die
);
31960 for (comdat_type_node
*ctnode
= comdat_type_list
; ctnode
!= NULL
;
31961 ctnode
= ctnode
->next
)
31962 note_variable_value (ctnode
->root_die
);
31963 for (limbo_die_node
*node
= limbo_die_list
; node
; node
= node
->next
)
31964 note_variable_value (node
->die
);
31966 /* The AT_pubnames attribute needs to go in all skeleton dies, including
31967 both the main_cu and all skeleton TUs. Making this call unconditional
31968 would end up either adding a second copy of the AT_pubnames attribute, or
31969 requiring a special case in add_top_level_skeleton_die_attrs. */
31970 if (!dwarf_split_debug_info
)
31971 add_AT_pubnames (comp_unit_die ());
31973 /* The early debug phase is now finished. */
31974 early_dwarf_finished
= true;
31977 fprintf (dump_file
, "EARLY DWARF for %s\n", filename
);
31978 print_die (comp_unit_die (), dump_file
);
31981 /* Do not generate DWARF assembler now when not producing LTO bytecode. */
31982 if ((!flag_generate_lto
&& !flag_generate_offload
)
31983 /* FIXME: Disable debug info generation for (PE-)COFF targets since the
31984 copy_lto_debug_sections operation of the simple object support in
31985 libiberty is not implemented for them yet. */
31986 || TARGET_PECOFF
|| TARGET_COFF
)
31989 /* Now as we are going to output for LTO initialize sections and labels
31990 to the LTO variants. We don't need a random-seed postfix as other
31991 LTO sections as linking the LTO debug sections into one in a partial
31993 init_sections_and_labels (true);
31995 /* The output below is modeled after dwarf2out_finish with all
31996 location related output removed and some LTO specific changes.
31997 Some refactoring might make both smaller and easier to match up. */
31999 /* Traverse the DIE's and add add sibling attributes to those DIE's
32000 that have children. */
32001 add_sibling_attributes (comp_unit_die ());
32002 for (limbo_die_node
*node
= limbo_die_list
; node
; node
= node
->next
)
32003 add_sibling_attributes (node
->die
);
32004 for (comdat_type_node
*ctnode
= comdat_type_list
;
32005 ctnode
!= NULL
; ctnode
= ctnode
->next
)
32006 add_sibling_attributes (ctnode
->root_die
);
32008 /* AIX Assembler inserts the length, so adjust the reference to match the
32009 offset expected by debuggers. */
32010 strcpy (dl_section_ref
, debug_line_section_label
);
32011 if (XCOFF_DEBUGGING_INFO
)
32012 strcat (dl_section_ref
, DWARF_INITIAL_LENGTH_SIZE_STR
);
32014 if (debug_info_level
>= DINFO_LEVEL_TERSE
)
32015 add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list
, dl_section_ref
);
32018 add_AT_macptr (comp_unit_die (), DEBUG_MACRO_ATTRIBUTE
,
32019 macinfo_section_label
);
32021 save_macinfo_strings ();
32023 if (dwarf_split_debug_info
)
32025 unsigned int index
= 0;
32026 debug_str_hash
->traverse_noresize
<unsigned int *, index_string
> (&index
);
32029 /* Output all of the compilation units. We put the main one last so that
32030 the offsets are available to output_pubnames. */
32031 for (limbo_die_node
*node
= limbo_die_list
; node
; node
= node
->next
)
32032 output_comp_unit (node
->die
, 0, NULL
);
32034 hash_table
<comdat_type_hasher
> comdat_type_table (100);
32035 for (comdat_type_node
*ctnode
= comdat_type_list
;
32036 ctnode
!= NULL
; ctnode
= ctnode
->next
)
32038 comdat_type_node
**slot
= comdat_type_table
.find_slot (ctnode
, INSERT
);
32040 /* Don't output duplicate types. */
32041 if (*slot
!= HTAB_EMPTY_ENTRY
)
32044 /* Add a pointer to the line table for the main compilation unit
32045 so that the debugger can make sense of DW_AT_decl_file
32047 if (debug_info_level
>= DINFO_LEVEL_TERSE
)
32048 add_AT_lineptr (ctnode
->root_die
, DW_AT_stmt_list
,
32049 (!dwarf_split_debug_info
32050 ? debug_line_section_label
32051 : debug_skeleton_line_section_label
));
32053 output_comdat_type_unit (ctnode
);
32057 /* Stick a unique symbol to the main debuginfo section. */
32058 compute_comp_unit_symbol (comp_unit_die ());
32060 /* Output the main compilation unit. We always need it if only for
32062 output_comp_unit (comp_unit_die (), true, NULL
);
32064 /* Output the abbreviation table. */
32065 if (vec_safe_length (abbrev_die_table
) != 1)
32067 switch_to_section (debug_abbrev_section
);
32068 ASM_OUTPUT_LABEL (asm_out_file
, abbrev_section_label
);
32069 output_abbrev_section ();
32072 /* Have to end the macro section. */
32075 /* We have to save macinfo state if we need to output it again
32076 for the FAT part of the object. */
32077 vec
<macinfo_entry
, va_gc
> *saved_macinfo_table
= macinfo_table
;
32078 if (flag_fat_lto_objects
)
32079 macinfo_table
= macinfo_table
->copy ();
32081 switch_to_section (debug_macinfo_section
);
32082 ASM_OUTPUT_LABEL (asm_out_file
, macinfo_section_label
);
32083 output_macinfo (debug_line_section_label
, true);
32084 dw2_asm_output_data (1, 0, "End compilation unit");
32086 if (flag_fat_lto_objects
)
32088 vec_free (macinfo_table
);
32089 macinfo_table
= saved_macinfo_table
;
32093 /* Emit a skeleton debug_line section. */
32094 switch_to_section (debug_line_section
);
32095 ASM_OUTPUT_LABEL (asm_out_file
, debug_line_section_label
);
32096 output_line_info (true);
32098 /* If we emitted any indirect strings, output the string table too. */
32099 if (debug_str_hash
|| skeleton_debug_str_hash
)
32100 output_indirect_strings ();
32101 if (debug_line_str_hash
)
32103 switch_to_section (debug_line_str_section
);
32104 const enum dwarf_form form
= DW_FORM_line_strp
;
32105 debug_line_str_hash
->traverse
<enum dwarf_form
,
32106 output_indirect_string
> (form
);
32109 /* Switch back to the text section. */
32110 switch_to_section (text_section
);
32113 /* Reset all state within dwarf2out.c so that we can rerun the compiler
32114 within the same process. For use by toplev::finalize. */
32117 dwarf2out_c_finalize (void)
32119 last_var_location_insn
= NULL
;
32120 cached_next_real_insn
= NULL
;
32121 used_rtx_array
= NULL
;
32122 incomplete_types
= NULL
;
32123 debug_info_section
= NULL
;
32124 debug_skeleton_info_section
= NULL
;
32125 debug_abbrev_section
= NULL
;
32126 debug_skeleton_abbrev_section
= NULL
;
32127 debug_aranges_section
= NULL
;
32128 debug_addr_section
= NULL
;
32129 debug_macinfo_section
= NULL
;
32130 debug_line_section
= NULL
;
32131 debug_skeleton_line_section
= NULL
;
32132 debug_loc_section
= NULL
;
32133 debug_pubnames_section
= NULL
;
32134 debug_pubtypes_section
= NULL
;
32135 debug_str_section
= NULL
;
32136 debug_line_str_section
= NULL
;
32137 debug_str_dwo_section
= NULL
;
32138 debug_str_offsets_section
= NULL
;
32139 debug_ranges_section
= NULL
;
32140 debug_frame_section
= NULL
;
32142 debug_str_hash
= NULL
;
32143 debug_line_str_hash
= NULL
;
32144 skeleton_debug_str_hash
= NULL
;
32145 dw2_string_counter
= 0;
32146 have_multiple_function_sections
= false;
32147 text_section_used
= false;
32148 cold_text_section_used
= false;
32149 cold_text_section
= NULL
;
32150 current_unit_personality
= NULL
;
32152 early_dwarf
= false;
32153 early_dwarf_finished
= false;
32155 next_die_offset
= 0;
32156 single_comp_unit_die
= NULL
;
32157 comdat_type_list
= NULL
;
32158 limbo_die_list
= NULL
;
32160 decl_die_table
= NULL
;
32161 common_block_die_table
= NULL
;
32162 decl_loc_table
= NULL
;
32163 call_arg_locations
= NULL
;
32164 call_arg_loc_last
= NULL
;
32165 call_site_count
= -1;
32166 tail_call_site_count
= -1;
32167 cached_dw_loc_list_table
= NULL
;
32168 abbrev_die_table
= NULL
;
32169 delete dwarf_proc_stack_usage_map
;
32170 dwarf_proc_stack_usage_map
= NULL
;
32171 line_info_label_num
= 0;
32172 cur_line_info_table
= NULL
;
32173 text_section_line_info
= NULL
;
32174 cold_text_section_line_info
= NULL
;
32175 separate_line_info
= NULL
;
32176 info_section_emitted
= false;
32177 pubname_table
= NULL
;
32178 pubtype_table
= NULL
;
32179 macinfo_table
= NULL
;
32180 ranges_table
= NULL
;
32181 ranges_by_label
= NULL
;
32183 have_location_lists
= false;
32186 last_emitted_file
= NULL
;
32188 tmpl_value_parm_die_table
= NULL
;
32189 generic_type_instances
= NULL
;
32190 frame_pointer_fb_offset
= 0;
32191 frame_pointer_fb_offset_valid
= false;
32192 base_types
.release ();
32193 XDELETEVEC (producer_string
);
32194 producer_string
= NULL
;
32197 #include "gt-dwarf2out.h"