GCC Middle and Back End API Reference
dwarf2out.cc File Reference
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "target.h"
#include "function.h"
#include "rtl.h"
#include "tree.h"
#include "memmodel.h"
#include "tm_p.h"
#include "stringpool.h"
#include "insn-config.h"
#include "ira.h"
#include "cgraph.h"
#include "diagnostic.h"
#include "fold-const.h"
#include "stor-layout.h"
#include "varasm.h"
#include "version.h"
#include "flags.h"
#include "rtlhash.h"
#include "reload.h"
#include "output.h"
#include "expr.h"
#include "dwarf2out.h"
#include "dwarf2ctf.h"
#include "dwarf2asm.h"
#include "toplev.h"
#include "md5.h"
#include "tree-pretty-print.h"
#include "print-rtl.h"
#include "debug.h"
#include "common/common-target.h"
#include "langhooks.h"
#include "lra.h"
#include "dumpfile.h"
#include "opts.h"
#include "tree-dfa.h"
#include "gdb/gdb-index.h"
#include "rtl-iter.h"
#include "attribs.h"
#include "file-prefix-map.h"
#include "gt-dwarf2out.h"
Include dependency graph for dwarf2out.cc:

Data Structures

struct  indirect_string_node
struct  indirect_string_hasher
struct  addr_table_entry
union  addr_table_entry::addr_table_entry_struct_union
struct  dw_loc_list_struct
struct  dw_line_info_struct
struct  dw_line_info_table
struct  die_struct
union  die_struct::die_symbol_or_type_node
class  set_early_dwarf
struct  pubname_struct
struct  dw_ranges
struct  macinfo_struct
struct  dw_ranges_by_label
struct  comdat_type_node
struct  limbo_die_struct
struct  skeleton_chain_struct
struct  dwarf_file_hasher
struct  decl_die_hasher
struct  variable_value_struct
struct  variable_value_hasher
struct  block_die_hasher
struct  die_arg_entry_struct
struct  var_loc_node
struct  var_loc_list_def
struct  call_arg_loc_node
struct  decl_loc_hasher
struct  cached_dw_loc_list_def
struct  dw_loc_list_hasher
struct  addr_hasher
struct  sym_off_pair
struct  checksum_attributes
struct  decl_table_entry
struct  decl_table_entry_hasher
struct  external_ref
struct  external_ref_hasher
struct  file_info
struct  dir_info
struct  file_name_acquire_data
struct  dwarf_qual_info_t
struct  loc_descr_context
struct  dwarf_procedure_info
struct  vlr_context
struct  inline_entry_data
struct  inline_entry_data_hasher
struct  macinfo_entry_hasher
struct  comdat_type_hasher
struct  loc_list_hasher


#define DWARF_INITIAL_LENGTH_SIZE   (dwarf_offset_size == 4 ? 4 : 12)
#define DWARF_INITIAL_LENGTH_SIZE_STR   (dwarf_offset_size == 4 ? "-4" : "-12")
#define DWARF_CIE_ID    (unsigned HOST_WIDE_INT) (dwarf_offset_size == 4 ? DW_CIE_ID : DW64_CIE_ID)
#define NOT_INDEXED   (-1U)
#define NO_INDEX_ASSIGNED   (-2U)
#define DW_FORM_data   (dwarf_offset_size == 8 ? DW_FORM_data8 : DW_FORM_data4)
#define DW_FORM_ref   (dwarf_offset_size == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
#define DEBUG_FRAME_SECTION   ".debug_frame"
#define FUNC_END_LABEL   "LFE"
#define FRAME_BEGIN_LABEL   "Lframe"
#define FDE_LABEL   "LSFDE"
#define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result)    (result)
#define DWARF_REF_SIZE    (dwarf_version == 2 ? DWARF2_ADDR_SIZE : dwarf_offset_size)
#define DWARF_LARGEST_DATA_FORM_BITS    (dwarf_version >= 5 ? 128 : 64)
#define use_debug_types
#define FORCE_RESET_NEXT_VIEW(x)   ((x) = (var_loc_view)-1)
#define RESET_NEXT_VIEW(x)   ((x) = (var_loc_view)0)
#define FORCE_RESETTING_VIEW_P(x)   ((x) == (var_loc_view)-1)
#define RESETTING_VIEW_P(x)   ((x) == (var_loc_view)0 || FORCE_RESETTING_VIEW_P (x))
#define FOR_EACH_CHILD(die, c, expr)
#define DW_RANGES_IDX_SKELETON   ((1U << 31) - 1)
#define TYPE_DECL_IS_STUB(decl)
#define DWARF_PUBNAMES_HEADER_SIZE   (2 * dwarf_offset_size + 2)
#define ZERO_VIEW_P(N)
#define DWARF_LINE_BASE   -10
#define DWARF_LINE_OPCODE_BASE   ((int)DW_LNS_set_isa + 1)
#define have_macinfo
#define DEBUG_INFO_SECTION   ".debug_info"
#define DEBUG_DWO_INFO_SECTION   ".debug_info.dwo"
#define DEBUG_LTO_INFO_SECTION   ".gnu.debuglto_.debug_info"
#define DEBUG_LTO_DWO_INFO_SECTION   ".gnu.debuglto_.debug_info.dwo"
#define DEBUG_ABBREV_SECTION   ".debug_abbrev"
#define DEBUG_LTO_ABBREV_SECTION   ".gnu.debuglto_.debug_abbrev"
#define DEBUG_DWO_ABBREV_SECTION   ".debug_abbrev.dwo"
#define DEBUG_LTO_DWO_ABBREV_SECTION   ".gnu.debuglto_.debug_abbrev.dwo"
#define DEBUG_ARANGES_SECTION   ".debug_aranges"
#define DEBUG_ADDR_SECTION   ".debug_addr"
#define DEBUG_MACINFO_SECTION   ".debug_macinfo"
#define DEBUG_LTO_MACINFO_SECTION   ".gnu.debuglto_.debug_macinfo"
#define DEBUG_DWO_MACINFO_SECTION   ".debug_macinfo.dwo"
#define DEBUG_LTO_DWO_MACINFO_SECTION   ".gnu.debuglto_.debug_macinfo.dwo"
#define DEBUG_MACRO_SECTION   ".debug_macro"
#define DEBUG_LTO_MACRO_SECTION   ".gnu.debuglto_.debug_macro"
#define DEBUG_DWO_MACRO_SECTION   ".debug_macro.dwo"
#define DEBUG_LTO_DWO_MACRO_SECTION   ".gnu.debuglto_.debug_macro.dwo"
#define DEBUG_LINE_SECTION   ".debug_line"
#define DEBUG_LTO_LINE_SECTION   ".gnu.debuglto_.debug_line"
#define DEBUG_DWO_LINE_SECTION   ".debug_line.dwo"
#define DEBUG_LTO_DWO_LINE_SECTION   ".gnu.debuglto_.debug_line.dwo"
#define DEBUG_LOC_SECTION   ".debug_loc"
#define DEBUG_DWO_LOC_SECTION   ".debug_loc.dwo"
#define DEBUG_LOCLISTS_SECTION   ".debug_loclists"
#define DEBUG_DWO_LOCLISTS_SECTION   ".debug_loclists.dwo"
#define DEBUG_STR_OFFSETS_SECTION   ".debug_str_offsets"
#define DEBUG_DWO_STR_OFFSETS_SECTION   ".debug_str_offsets.dwo"
#define DEBUG_LTO_DWO_STR_OFFSETS_SECTION   ".gnu.debuglto_.debug_str_offsets.dwo"
#define DEBUG_STR_SECTION   ".debug_str"
#define DEBUG_LTO_STR_SECTION   ".gnu.debuglto_.debug_str"
#define DEBUG_STR_DWO_SECTION   ".debug_str.dwo"
#define DEBUG_LTO_STR_DWO_SECTION   ".gnu.debuglto_.debug_str.dwo"
#define DEBUG_RANGES_SECTION   ".debug_ranges"
#define DEBUG_RNGLISTS_SECTION   ".debug_rnglists"
#define DEBUG_DWO_RNGLISTS_SECTION   ".debug_rnglists.dwo"
#define DEBUG_LINE_STR_SECTION   ".debug_line_str"
#define DEBUG_LTO_LINE_STR_SECTION   ".gnu.debuglto_.debug_line_str"
#define TEXT_SECTION_LABEL   "Ltext"
#define COLD_TEXT_SECTION_LABEL   "Ltext_cold"
#define DEBUG_LINE_SECTION_LABEL   "Ldebug_line"
#define DEBUG_SKELETON_LINE_SECTION_LABEL   "Lskeleton_debug_line"
#define DEBUG_INFO_SECTION_LABEL   "Ldebug_info"
#define DEBUG_SKELETON_INFO_SECTION_LABEL   "Lskeleton_debug_info"
#define DEBUG_ABBREV_SECTION_LABEL   "Ldebug_abbrev"
#define DEBUG_SKELETON_ABBREV_SECTION_LABEL   "Lskeleton_debug_abbrev"
#define DEBUG_ADDR_SECTION_LABEL   "Ldebug_addr"
#define DEBUG_LOC_SECTION_LABEL   "Ldebug_loc"
#define DEBUG_RANGES_SECTION_LABEL   "Ldebug_ranges"
#define DEBUG_MACINFO_SECTION_LABEL   "Ldebug_macinfo"
#define DEBUG_MACRO_SECTION_LABEL   "Ldebug_macro"
#define TEXT_END_LABEL   "Letext"
#define COLD_END_LABEL   "Letext_cold"
#define LINE_CODE_LABEL   "LM"
#define UNRELOCATED_OFFSET   ((addr_table_entry *) 1)
#define CHECKSUM(FOO)   md5_process_bytes (&(FOO), sizeof (FOO), ctx)
#define CHECKSUM_BLOCK(FOO, SIZE)   md5_process_bytes ((FOO), (SIZE), ctx)
#define CHECKSUM_STRING(FOO)   md5_process_bytes ((FOO), strlen (FOO), ctx)
#define CHECKSUM(FOO)   md5_process_bytes (&(FOO), sizeof (FOO), ctx)
#define CHECKSUM_BLOCK(FOO, SIZE)   md5_process_bytes ((FOO), (SIZE), ctx)
#define CHECKSUM_STRING(FOO)   md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
#define CHECKSUM_SLEB128(FOO)   checksum_sleb128 ((FOO), ctx)
#define CHECKSUM_ULEB128(FOO)   checksum_uleb128 ((FOO), ctx)
#define CHECKSUM_ATTR(FOO)    if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)


typedef unsigned int var_loc_view
typedef struct dw_loc_list_struct dw_loc_list_node
typedef long int dw_offset
typedef struct dw_line_info_struct dw_line_info_entry
typedef struct die_struct die_node
typedef struct pubname_struct pubname_entry
typedef struct macinfo_struct macinfo_entry
typedef struct limbo_die_struct limbo_die_node
typedef struct skeleton_chain_struct skeleton_chain_node
typedef struct die_arg_entry_struct die_arg_entry
typedef struct var_loc_list_def var_loc_list
typedef struct cached_dw_loc_list_def cached_dw_loc_list
typedef hash_table< decl_table_entry_hasherdecl_hash_type
typedef hash_table< external_ref_hasherexternal_ref_hash_type
typedef hash_table< macinfo_entry_hashermacinfo_hash_type
typedef hash_table< loc_list_hasherloc_list_hash_type


enum  ate_kind { ate_kind_rtx , ate_kind_rtx_dtprel , ate_kind_label }
enum  dw_line_info_opcode {
  LI_set_address , LI_set_line , LI_set_file , LI_set_column ,
  LI_negate_stmt , LI_set_prologue_end , LI_set_epilogue_begin , LI_set_discriminator ,
enum  dw_scalar_form { dw_scalar_form_constant = 0x01 , dw_scalar_form_exprloc = 0x02 , dw_scalar_form_reference = 0x04 }
enum  dtprel_bool { dtprel_false = 0 , dtprel_true = 1 }


static void dwarf2out_source_line (unsigned int, unsigned int, const char *, int, bool)
static void dwarf2out_decl (tree)
static bool is_redundant_typedef (const_tree)
static void output_call_frame_info (int)
static bool matches_main_base (const char *path)
static unsigned int get_full_len (const dw_wide_int &op)
static bool should_emit_struct_debug (tree type, enum debug_info_usage usage)
static void switch_to_eh_frame_section (bool back)
static void switch_to_frame_table_section (int for_eh, bool back)
enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
static void output_fde (dw_fde_ref fde, bool for_eh, bool second, char *section_start_label, int fde_encoding, char *augmentation, bool any_lsda_needed, int lsda_encoding)
static bool fde_needed_for_eh_p (dw_fde_ref fde)
static void dwarf2out_do_cfi_startproc (bool second)
dw_fde_ref dwarf2out_alloc_current_fde (void)
void dwarf2out_begin_prologue (unsigned int line, unsigned int column, const char *file)
void dwarf2out_vms_end_prologue (unsigned int line, const char *file)
void dwarf2out_vms_begin_epilogue (unsigned int line, const char *file)
static void mark_ignored_debug_section (dw_fde_ref fde, bool second)
void dwarf2out_end_epilogue (unsigned int line, const char *file)
void dwarf2out_frame_finish (void)
static void var_location_switch_text_section (void)
static void set_cur_line_info_table (section *)
void dwarf2out_switch_text_section (void)
static dw_loc_descr_ref int_loc_descriptor (poly_int64)
static dw_loc_descr_ref uint_loc_descriptor (unsigned HOST_WIDE_INT)
static const chardwarf_stack_op_name (unsigned int op)
static bool dwarf2out_locviews_in_attribute ()
static bool dwarf2out_locviews_in_loclist ()
static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1, unsigned HOST_WIDE_INT oprnd2)
static void add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
static bool dw_val_equal_p (dw_val_node *a, dw_val_node *b)
static bool loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
bool loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
static void loc_descr_plus_const (dw_loc_descr_ref *list_head, poly_int64 poly_offset)
static dw_loc_descr_ref new_reg_loc_descr (unsigned int reg, poly_int64 offset)
static void loc_list_plus_const (dw_loc_list_ref list_head, poly_int64 offset)
static enum dwarf_location_atom dwarf_OP (enum dwarf_location_atom op)
static enum dwarf_attribute dwarf_AT (enum dwarf_attribute at)
static enum dwarf_tag dwarf_TAG (enum dwarf_tag tag)
static enum dwarf_form dwarf_FORM (enum dwarf_form form)
static unsigned long int get_base_type_offset (dw_die_ref)
static unsigned long size_of_loc_descr (dw_loc_descr_ref loc)
unsigned long size_of_locs (dw_loc_descr_ref loc)
static int size_of_discr_value (dw_discr_value *discr_value)
static int size_of_discr_list (dw_discr_list_ref discr_list)
static HOST_WIDE_INT extract_int (const unsigned char *, unsigned)
static void get_ref_die_offset_label (char *, dw_die_ref)
static unsigned long int get_ref_die_offset (dw_die_ref)
static void output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
void output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
static void output_loc_operands_raw (dw_loc_descr_ref loc)
void output_loc_sequence_raw (dw_loc_descr_ref loc)
static void build_breg_loc (struct dw_loc_descr_node **head, unsigned int regno)
struct dw_loc_descr_nodebuild_span_loc (struct cfa_reg reg)
struct dw_loc_descr_nodebuild_cfa_loc (dw_cfa_location *cfa, poly_int64 offset)
struct dw_loc_descr_nodebuild_cfa_aligned_loc (dw_cfa_location *cfa, poly_int64 offset, HOST_WIDE_INT alignment)
static void dwarf2out_init (const char *)
static void dwarf2out_finish (const char *)
static void dwarf2out_early_finish (const char *)
static void dwarf2out_assembly_start (void)
static void dwarf2out_define (unsigned int, const char *)
static void dwarf2out_undef (unsigned int, const char *)
static void dwarf2out_start_source_file (unsigned, const char *)
static void dwarf2out_end_source_file (unsigned)
static void dwarf2out_function_decl (tree)
static void dwarf2out_begin_block (unsigned, unsigned)
static void dwarf2out_end_block (unsigned, unsigned)
static bool dwarf2out_ignore_block (const_tree)
static void dwarf2out_set_ignored_loc (unsigned, unsigned, const char *)
static void dwarf2out_early_global_decl (tree)
static void dwarf2out_late_global_decl (tree)
static void dwarf2out_type_decl (tree, int)
static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool, bool)
static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree, dw_die_ref)
static void dwarf2out_abstract_function (tree)
static void dwarf2out_var_location (rtx_insn *)
static void dwarf2out_inline_entry (tree)
static void dwarf2out_size_function (tree)
static void dwarf2out_begin_function (tree)
static void dwarf2out_end_function (unsigned int)
static void dwarf2out_register_main_translation_unit (tree unit)
static void dwarf2out_set_name (tree, tree)
static void dwarf2out_register_external_die (tree decl, const char *sym, unsigned HOST_WIDE_INT off)
static bool dwarf2out_die_ref_for_decl (tree decl, const char **sym, unsigned HOST_WIDE_INT *off)
static void maybe_reset_location_view (rtx_insn *insn, dw_line_info_table *table)
bool dwarf2out_default_as_loc_support (void)
bool dwarf2out_default_as_locview_support (void)
static bool output_asm_line_debug_info (void)
static bool asm_outputs_debug_line_str (void)
static bool is_pseudo_reg (const_rtx)
static tree type_main_variant (tree)
static bool is_tagged_type (const_tree)
static const chardwarf_tag_name (unsigned)
static const chardwarf_attr_name (unsigned)
static const chardwarf_form_name (unsigned)
static tree decl_ultimate_origin (const_tree)
static tree decl_class_context (tree)
static void add_dwarf_attr (dw_die_ref, dw_attr_node *)
static unsigned int AT_index (dw_attr_node *)
static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned)
static unsigned AT_flag (dw_attr_node *)
static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT)
static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT)
static void add_AT_double (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT, unsigned HOST_WIDE_INT)
static void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int, unsigned int, unsigned char *)
static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *)
static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *)
static const charAT_string (dw_attr_node *)
static enum dwarf_form AT_string_form (dw_attr_node *)
static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref)
static void add_AT_specification (dw_die_ref, dw_die_ref)
static dw_die_ref AT_ref (dw_attr_node *)
static int AT_ref_external (dw_attr_node *)
static void set_AT_ref_external (dw_attr_node *, int)
static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref)
static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute, dw_loc_list_ref)
static dw_loc_list_ref AT_loc_list (dw_attr_node *)
static void add_AT_view_list (dw_die_ref, enum dwarf_attribute)
static addr_table_entryadd_addr_table_entry (void *, enum ate_kind)
static void remove_addr_table_entry (addr_table_entry *)
static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx, bool)
static rtx AT_addr (dw_attr_node *)
static void add_AT_symview (dw_die_ref, enum dwarf_attribute, const char *)
static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *)
static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *)
static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *)
static void add_AT_range_list (dw_die_ref, enum dwarf_attribute, unsigned long, bool)
static const charAT_lbl (dw_attr_node *)
static const charget_AT_low_pc (dw_die_ref)
static bool is_c (void)
static bool is_cxx (void)
static bool is_cxx (const_tree)
static bool is_fortran (void)
static bool is_ada (void)
static bool remove_AT (dw_die_ref, enum dwarf_attribute)
static void remove_child_TAG (dw_die_ref, enum dwarf_tag)
static void add_child_die (dw_die_ref, dw_die_ref)
static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree)
static dw_die_ref strip_naming_typedef (tree, dw_die_ref)
static dw_die_ref lookup_type_die_strip_naming_typedef (tree)
static void equate_type_number_to_die (tree, dw_die_ref)
static var_loc_listlookup_decl_loc (const_tree)
static void equate_decl_number_to_die (tree, dw_die_ref)
static struct var_loc_nodeadd_var_loc_to_decl (tree, rtx, const char *, var_loc_view)
static void print_spaces (FILE *)
static void print_die (dw_die_ref, FILE *)
static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *)
static void attr_checksum (dw_attr_node *, struct md5_ctx *, int *)
static void die_checksum (dw_die_ref, struct md5_ctx *, int *)
static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *)
static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *)
static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *)
static void attr_checksum_ordered (enum dwarf_tag, dw_attr_node *, struct md5_ctx *, int *)
static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref)
static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *)
static void checksum_die_context (dw_die_ref, struct md5_ctx *)
static void generate_type_signature (dw_die_ref, comdat_type_node *)
static bool same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *)
static bool same_dw_val_p (const dw_val_node *, const dw_val_node *, int *)
static bool same_attr_p (dw_attr_node *, dw_attr_node *, int *)
static bool same_die_p (dw_die_ref, dw_die_ref, int *)
static bool is_type_die (dw_die_ref)
static bool is_template_instantiation (dw_die_ref)
static bool is_declaration_die (dw_die_ref)
static bool should_move_die_to_comdat (dw_die_ref)
static dw_die_ref clone_as_declaration (dw_die_ref)
static dw_die_ref clone_die (dw_die_ref)
static dw_die_ref clone_tree (dw_die_ref)
static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref)
static void generate_skeleton_ancestor_tree (skeleton_chain_node *)
static void generate_skeleton_bottom_up (skeleton_chain_node *)
static dw_die_ref generate_skeleton (dw_die_ref)
static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref, dw_die_ref, dw_die_ref)
static void break_out_comdat_types (dw_die_ref)
static void copy_decls_for_unworthy_types (dw_die_ref)
static void add_sibling_attributes (dw_die_ref)
static void output_location_lists (dw_die_ref)
static int constant_size (unsigned HOST_WIDE_INT)
static unsigned long size_of_die (dw_die_ref)
static void calc_die_sizes (dw_die_ref)
static void calc_base_type_die_sizes (void)
static void mark_dies (dw_die_ref)
static void unmark_dies (dw_die_ref)
static void unmark_all_dies (dw_die_ref)
static unsigned long size_of_pubnames (vec< pubname_entry, va_gc > *)
static unsigned long size_of_aranges (void)
static enum dwarf_form value_format (dw_attr_node *)
static void output_value_format (dw_attr_node *)
static void output_abbrev_section (void)
static void output_die_abbrevs (unsigned long, dw_die_ref)
static void output_die (dw_die_ref)
static void output_compilation_unit_header (enum dwarf_unit_type)
static void output_comp_unit (dw_die_ref, int, const unsigned char *)
static void output_comdat_type_unit (comdat_type_node *, bool)
static const chardwarf2_name (tree, int)
static void add_pubname (tree, dw_die_ref)
static void add_enumerator_pubname (const char *, dw_die_ref)
static void add_pubname_string (const char *, dw_die_ref)
static void add_pubtype (tree, dw_die_ref)
static void output_pubnames (vec< pubname_entry, va_gc > *)
static void output_aranges (void)
static unsigned int add_ranges (const_tree, bool=false)
static void add_ranges_by_labels (dw_die_ref, const char *, const char *, bool *, bool)
static void output_ranges (void)
static dw_line_info_tablenew_line_info_table (void)
static void output_line_info (bool)
static void output_file_names (void)
static bool is_base_type (tree)
static dw_die_ref subrange_type_die (tree, tree, tree, tree, dw_die_ref)
static int decl_quals (const_tree)
static dw_die_ref modified_type_die (tree, int, bool, dw_die_ref)
static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref)
static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref)
static unsigned int debugger_reg_number (const_rtx)
static void add_loc_descr_op_piece (dw_loc_descr_ref *, int)
static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status)
static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int, enum var_init_status)
static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx, enum var_init_status)
static dw_loc_descr_ref based_loc_descr (rtx, poly_int64, enum var_init_status)
static bool is_based_loc (const_rtx)
static bool resolve_one_addr (rtx *)
static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx, enum var_init_status)
static dw_loc_descr_ref loc_descriptor (rtx, machine_mode mode, enum var_init_status)
static void add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
static void add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
static dw_loc_list_ref loc_list_from_tree (tree, int, struct loc_descr_context *)
static dw_loc_descr_ref loc_descriptor_from_tree (tree, int, struct loc_descr_context *)
static tree field_type (const_tree)
static unsigned int simple_type_align_in_bits (const_tree)
static unsigned int simple_decl_align_in_bits (const_tree)
static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree)
static dw_loc_descr_ref field_byte_offset (const_tree, struct vlr_context *, HOST_WIDE_INT *)
static void add_AT_location_description (dw_die_ref, enum dwarf_attribute, dw_loc_list_ref)
static void add_data_member_location_attribute (dw_die_ref, tree, struct vlr_context *)
static bool add_const_value_attribute (dw_die_ref, machine_mode, rtx)
static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *)
static void insert_wide_int (const wide_int_ref &, unsigned char *, int)
static unsigned insert_float (const_rtx, unsigned char *)
static rtx rtl_for_decl_location (tree)
static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool)
static bool tree_add_const_value_attribute (dw_die_ref, tree)
static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree)
static void add_desc_attribute (dw_die_ref, tree)
static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref)
static void add_comp_dir_attribute (dw_die_ref)
static void add_scalar_info (dw_die_ref, enum dwarf_attribute, tree, int, struct loc_descr_context *)
static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree, struct loc_descr_context *)
static void add_subscript_info (dw_die_ref, tree, bool)
static void add_byte_size_attribute (dw_die_ref, tree)
static void add_alignment_attribute (dw_die_ref, tree)
static void add_bit_offset_attribute (dw_die_ref, tree)
static void add_bit_size_attribute (dw_die_ref, tree)
static void add_prototyped_attribute (dw_die_ref, tree)
static void add_abstract_origin_attribute (dw_die_ref, tree)
static void add_pure_or_virtual_attribute (dw_die_ref, tree)
static void add_src_coords_attributes (dw_die_ref, tree)
static void add_name_and_src_coords_attributes (dw_die_ref, tree, bool=false)
static void add_discr_value (dw_die_ref, dw_discr_value *)
static void add_discr_list (dw_die_ref, dw_discr_list_ref)
static dw_discr_list_ref AT_discr_list (dw_attr_node *)
static dw_die_ref scope_die_for (tree, dw_die_ref)
static bool local_scope_p (dw_die_ref)
static bool class_scope_p (dw_die_ref)
static bool class_or_namespace_scope_p (dw_die_ref)
static void add_type_attribute (dw_die_ref, tree, int, bool, dw_die_ref)
static void add_calling_convention_attribute (dw_die_ref, tree)
static const chartype_tag (const_tree)
static tree member_declared_type (const_tree)
static void gen_array_type_die (tree, dw_die_ref)
static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref)
static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref, bool)
static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref)
static dw_die_ref gen_formal_parameter_pack_die (tree, tree, dw_die_ref, tree *)
static void gen_unspecified_parameters_die (tree, dw_die_ref)
static void gen_formal_types_die (tree, dw_die_ref)
static void gen_subprogram_die (tree, dw_die_ref)
static void gen_variable_die (tree, tree, dw_die_ref)
static void gen_const_die (tree, dw_die_ref)
static void gen_label_die (tree, dw_die_ref)
static void gen_lexical_block_die (tree, dw_die_ref)
static void gen_inlined_subroutine_die (tree, dw_die_ref)
static void gen_field_die (tree, struct vlr_context *, dw_die_ref)
static void gen_ptr_to_mbr_type_die (tree, dw_die_ref)
static dw_die_ref gen_compile_unit_die (const char *)
static void gen_inheritance_die (tree, tree, tree, dw_die_ref)
static void gen_member_die (tree, dw_die_ref)
static void gen_struct_or_union_type_die (tree, dw_die_ref, enum debug_info_usage)
static void gen_subroutine_type_die (tree, dw_die_ref)
static void gen_typedef_die (tree, dw_die_ref)
static void gen_type_die (tree, dw_die_ref, bool=false)
static void gen_block_die (tree, dw_die_ref)
static void decls_for_scope (tree, dw_die_ref, bool=true)
static bool is_naming_typedef_decl (const_tree)
static dw_die_ref get_context_die (tree)
static void gen_namespace_die (tree, dw_die_ref)
static dw_die_ref gen_namelist_decl (tree, dw_die_ref, tree)
static dw_die_ref gen_decl_die (tree, tree, struct vlr_context *, dw_die_ref)
static dw_die_ref force_decl_die (tree)
static dw_die_ref force_type_die (tree)
static dw_die_ref setup_namespace_context (tree, dw_die_ref)
static dw_die_ref declare_in_namespace (tree, dw_die_ref)
static struct dwarf_file_datalookup_filename (const char *)
static void retry_incomplete_types (void)
static void gen_type_die_for_member (tree, tree, dw_die_ref)
static void gen_generic_params_dies (tree)
static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage, bool=false)
static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage, bool=false)
static void splice_child_die (dw_die_ref, dw_die_ref)
static int file_info_cmp (const void *, const void *)
static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *, var_loc_view, const char *, var_loc_view, const char *)
static void output_loc_list (dw_loc_list_ref)
static chargen_internal_sym (const char *)
static bool want_pubnames (void)
static void prune_unmark_dies (dw_die_ref)
static void prune_unused_types_mark_generic_parms_dies (dw_die_ref)
static void prune_unused_types_mark (dw_die_ref, int)
static void prune_unused_types_walk (dw_die_ref)
static void prune_unused_types_walk_attribs (dw_die_ref)
static void prune_unused_types_prune (dw_die_ref)
static void prune_unused_types (void)
static int maybe_emit_file (struct dwarf_file_data *fd)
static const charAT_vms_delta1 (dw_attr_node *)
static const charAT_vms_delta2 (dw_attr_node *)
static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree)
static void gen_remaining_tmpl_value_param_die_attribute (void)
static bool generic_type_p (tree)
static void schedule_generic_params_dies_gen (tree t)
static void gen_scheduled_generic_parms_dies (void)
static void resolve_variable_values (void)
static const charcomp_dir_string (void)
static void hash_loc_operands (dw_loc_descr_ref, inchash::hash &)
static enum dwarf_location_atom dw_addr_op (enum dtprel_bool dtprel)
static dw_loc_descr_ref new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel)
static dw_die_ref comp_unit_die (void)
void dwarf2out_set_demangle_name_func (const char *(*func)(const char *))
static const chardwarf_tag_name (unsigned int tag)
static const chardwarf_attr_name (unsigned int attr)
static const chardwarf_form_name (unsigned int form)
enum dw_val_class AT_class (dw_attr_node *a)
static void add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
HOST_WIDE_INT AT_int (dw_attr_node *a)
unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *a)
dw_wide_intalloc_dw_wide_int (const wide_int_ref &w)
static void add_AT_wide (dw_die_ref die, enum dwarf_attribute attr_kind, const wide_int_ref &w)
static void add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned char data8[8])
static void add_AT_low_high_pc (dw_die_ref die, const char *lbl_low, const char *lbl_high, bool force_direct)
static struct indirect_string_nodefind_AT_string_in_table (const char *str, hash_table< indirect_string_hasher > *table, enum insert_option insert=INSERT)
static struct indirect_string_nodefind_AT_string (const char *str, enum insert_option insert=INSERT)
static void set_indirect_string (struct indirect_string_node *node)
int reset_indirect_string (indirect_string_node **h, void *)
static void add_filepath_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
static enum dwarf_form find_string_form (struct indirect_string_node *node)
static void change_AT_die_ref (dw_attr_node *ref, dw_die_ref new_die)
dw_loc_descr_ref AT_loc (dw_attr_node *a)
static dw_loc_list_refAT_loc_list_ptr (dw_attr_node *a)
static dw_val_nodeview_list_to_loc_list_val_node (dw_val_node *val)
void init_addr_table_entry (addr_table_entry *e, enum ate_kind kind, void *addr)
static void remove_loc_list_addr_table_entries (dw_loc_descr_ref descr)
int index_addr_table_entry (addr_table_entry **h, unsigned int *index)
enum dwarf_tag dw_get_die_tag (dw_die_ref die)
dw_die_ref dw_get_die_child (dw_die_ref die)
dw_die_ref dw_get_die_sib (dw_die_ref die)
static void add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind, struct dwarf_file_data *fd)
static struct dwarf_file_dataAT_file (dw_attr_node *a)
static void add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind, long unsigned int offset, bool force_direct)
dw_attr_nodeget_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
static dw_die_ref get_die_parent (dw_die_ref die)
const charget_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
int get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
unsigned get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
dw_die_ref get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
struct dwarf_file_dataget_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
static bool is_fortran (const_tree decl)
static bool is_rust (void)
static bool is_dlang (void)
static void remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
static void replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
static void move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
static void add_child_die_after (dw_die_ref die, dw_die_ref child_die, dw_die_ref after_die)
static void reparent_child (dw_die_ref child, dw_die_ref new_parent)
dw_die_ref new_die_raw (enum dwarf_tag tag_value)
dw_die_ref lookup_type_die (tree type)
static dw_die_ref maybe_create_die_with_external_ref (tree)
dw_die_ref lookup_decl_die (tree decl)
static dw_die_ref lookup_block_die (tree block)
static void equate_block_to_die (tree block, dw_die_ref die)
static void add_AT_external_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, const char *symbol, HOST_WIDE_INT offset)
static HOST_WIDE_INT decl_piece_bitsize (rtx piece)
static rtxdecl_piece_varloc_ptr (rtx piece)
static rtx_expr_listdecl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
static rtx construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos, HOST_WIDE_INT bitsize)
static void adjust_piece_list (rtx *dest, rtx *src, rtx *inner, HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos, HOST_WIDE_INT bitsize, rtx loc_note)
static void print_signature (FILE *outfile, char *sig)
static void print_discr_value (FILE *outfile, dw_discr_value *discr_value)
static void print_loc_descr (dw_loc_descr_ref, FILE *)
static void print_dw_val (dw_val_node *val, bool recurse, FILE *outfile)
static void print_attribute (dw_attr_node *a, bool recurse, FILE *outfile)
DEBUG_FUNCTION void debug_dwarf_loc_descr (dw_loc_descr_ref loc)
DEBUG_FUNCTION void debug_dwarf_die (dw_die_ref die)
DEBUG_FUNCTION void debug (die_struct &ref)
DEBUG_FUNCTION void debug (die_struct *ptr)
DEBUG_FUNCTION void debug_dwarf (void)
DEBUG_FUNCTION void verify_die (dw_die_ref die)
static void check_die (dw_die_ref die)
static void die_odr_checksum (int tag, const char *name, md5_ctx *ctx)
static void compute_comp_unit_symbol (dw_die_ref unit_die)
static bool is_cu_die (dw_die_ref c)
static bool is_unit_die (dw_die_ref c)
static bool is_namespace_die (dw_die_ref c)
static bool is_template_parameter (dw_die_ref die)
static bool is_nested_in_subprogram (dw_die_ref die)
static bool contains_subprogram_definition (dw_die_ref die)
static dw_die_ref copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, decl_hash_type *decl_table)
static void copy_dwarf_procs_ref_in_attrs (dw_die_ref die, comdat_type_node *type_node, hash_map< dw_die_ref, dw_die_ref > &copied_dwarf_procs)
static dw_die_ref copy_dwarf_procedure (dw_die_ref die, comdat_type_node *type_node, hash_map< dw_die_ref, dw_die_ref > &copied_dwarf_procs)
static void copy_dwarf_procs_ref_in_dies (dw_die_ref die, comdat_type_node *type_node, hash_map< dw_die_ref, dw_die_ref > &copied_dwarf_procs)
static dw_die_ref clone_tree_partial (dw_die_ref die, decl_hash_type *decl_table)
static void copy_decls_walk (dw_die_ref unit, dw_die_ref die, decl_hash_type *decl_table)
static void collect_skeleton_dies (dw_die_ref die, decl_hash_type *decl_table)
static void output_loclists_offsets (dw_die_ref die)
static void assign_location_list_indexes (dw_die_ref die)
static struct external_reflookup_external_ref (external_ref_hash_type *map, dw_die_ref die)
static void optimize_external_refs_1 (dw_die_ref die, external_ref_hash_type *map)
int dwarf2_build_local_stub (external_ref **slot, dw_die_ref data)
static external_ref_hash_typeoptimize_external_refs (dw_die_ref die)
static void build_abbrev_table (dw_die_ref die, external_ref_hash_type *extern_map)
static int die_abbrev_cmp (const void *p1, const void *p2)
static void optimize_implicit_const (unsigned int first_id, unsigned int end, vec< bool > &implicit_consts)
static void optimize_abbrev_table (void)
static bool include_pubname_in_output (vec< pubname_entry, va_gc > *table, pubname_entry *p)
static bool loc_list_has_views (dw_loc_list_ref list)
static void gen_llsym (dw_loc_list_ref list)
static void maybe_gen_llsym (dw_loc_list_ref list)
static bool skip_loc_list_entry (dw_loc_list_ref curr, unsigned long *sizep=NULL)
static void dwarf2out_maybe_output_loclist_view_pair (dw_loc_list_ref curr)
static void output_range_list_offset (dw_attr_node *a)
static void output_loc_list_offset (dw_attr_node *a)
static void output_view_list_offset (dw_attr_node *a)
static void output_attr_index_or_value (dw_attr_node *a)
static void output_signature (const char *sig, const char *name)
static void output_discr_value (dw_discr_value *discr_value, const char *name)
static void output_dwarf_version ()
static void add_AT_pubnames (dw_die_ref die)
static void add_skeleton_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
static void add_top_level_skeleton_die_attrs (dw_die_ref die)
static void output_skeleton_debug_sections (dw_die_ref comp_unit, const unsigned char *dwo_id)
static void output_pubname (dw_offset die_offset, pubname_entry *entry)
static void output_pubtables (void)
static unsigned int add_ranges_num (int num, bool maybe_new_sec)
static void note_rnglist_head (unsigned int offset)
static bool use_distinct_base_address_for_range (unsigned int i)
static void index_rnglists (void)
static bool output_rnglists (unsigned generation, bool dwo)
int file_name_acquire (dwarf_file_data **slot, file_name_acquire_data *fnad)
static void output_line_string (enum dwarf_form form, const char *str, const char *entry_kind, unsigned int idx)
static void output_one_line_info_table (dw_line_info_table *table)
static bool need_endianity_attribute_p (bool reverse)
dw_die_ref base_type_die (tree type, bool reverse)
static bool is_cxx_auto (tree type)
static offset_int offset_int_type_size_in_bits (const_tree type)
static int get_nearest_type_subqualifiers (tree type, int type_quals, int qual_mask)
static dw_die_ref qualified_die_p (dw_die_ref die, int *mask, unsigned int depth)
static tree long_double_as_float128 (tree type)
static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT)
static dw_loc_descr_ref int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
static dw_loc_descr_ref uint_comparison_loc_list (enum tree_code kind)
static dw_loc_list_ref loc_list_from_uint_comparison (dw_loc_list_ref left, dw_loc_list_ref right, enum tree_code kind)
static unsigned long size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
static dw_loc_descr_ref address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
static dw_loc_descr_ref tls_mem_loc_descriptor (rtx mem)
static void expansion_failed (tree expr, rtx rtl, char const *reason)
static bool const_ok_for_output_1 (rtx rtl)
static bool const_ok_for_output (rtx rtl)
static dw_die_ref base_type_for_mode (machine_mode mode, bool unsignedp)
static dw_loc_descr_ref convert_descriptor_to_mode (scalar_int_mode mode, dw_loc_descr_ref op)
static dw_loc_descr_ref compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0, dw_loc_descr_ref op1)
static dw_loc_descr_ref scompare_loc_descriptor_wide (enum dwarf_location_atom op, scalar_int_mode op_mode, dw_loc_descr_ref op0, dw_loc_descr_ref op1)
static dw_loc_descr_ref scompare_loc_descriptor_narrow (enum dwarf_location_atom op, rtx rtl, scalar_int_mode op_mode, dw_loc_descr_ref op0, dw_loc_descr_ref op1)
static dw_loc_descr_ref scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl, machine_mode mem_mode)
static dw_loc_descr_ref ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl, machine_mode mem_mode)
static dw_loc_descr_ref minmax_loc_descriptor (rtx rtl, machine_mode mode, machine_mode mem_mode)
static dw_loc_descr_ref typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die, scalar_int_mode mode, machine_mode mem_mode)
static dw_loc_descr_ref clz_loc_descriptor (rtx rtl, scalar_int_mode mode, machine_mode mem_mode)
static dw_loc_descr_ref popcount_loc_descriptor (rtx rtl, scalar_int_mode mode, machine_mode mem_mode)
static dw_loc_descr_ref bswap_loc_descriptor (rtx rtl, scalar_int_mode mode, machine_mode mem_mode)
static dw_loc_descr_ref rotate_loc_descriptor (rtx rtl, scalar_int_mode mode, machine_mode mem_mode)
static dw_loc_descr_ref parameter_ref_descriptor (rtx rtl)
dw_loc_descr_ref mem_loc_descriptor (rtx rtl, machine_mode mode, machine_mode mem_mode, enum var_init_status initialized)
static dw_loc_descr_ref concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
static dw_loc_descr_ref implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
static const charsecname_for_decl (const_tree decl)
static bool decl_by_reference_p (tree decl)
static dw_loc_descr_ref dw_loc_list_1 (tree loc, rtx varloc, int want_address, enum var_init_status initialized)
static dw_loc_descr_ref new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
static dw_loc_descr_ref dw_sra_loc_expr (tree decl, rtx loc)
static dw_loc_list_ref dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
static bool single_element_loc_list_p (dw_loc_list_ref list)
static dw_loc_descr_ref copy_loc_descr (dw_loc_descr_ref ref)
static void prepend_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
static dw_loc_descr_ref cst_pool_loc_descr (tree loc)
static dw_loc_list_ref loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev, loc_descr_context *context)
static void loc_descr_to_next_no_nop (dw_loc_descr_ref &loc, hash_set< dw_loc_descr_ref > &nops)
bool free_loc_descr (const dw_loc_descr_ref &loc, void *data)
static void loc_descr_without_nops (dw_loc_descr_ref &loc)
static dw_die_ref new_dwarf_proc_die (dw_loc_descr_ref location, tree fndecl, dw_die_ref parent_die)
static bool is_handled_procedure_type (tree type)
static bool resolve_args_picking_1 (dw_loc_descr_ref loc, unsigned initial_frame_offset, struct dwarf_procedure_info *dpi, hash_map< dw_loc_descr_ref, unsigned > &frame_offsets)
static bool resolve_args_picking (dw_loc_descr_ref loc, unsigned initial_frame_offset, struct dwarf_procedure_info *dpi)
static dw_die_ref function_to_dwarf_procedure (tree fndecl)
static dw_loc_list_ref typed_binop_from_tree (enum dwarf_location_atom op, tree loc, dw_die_ref type_die, scalar_int_mode mode, struct loc_descr_context *context)
static dw_loc_list_ref loc_list_from_tree_1 (tree loc, int want_address, struct loc_descr_context *context)
static offset_int round_up_to_align (const offset_int &t, unsigned int align)
static void add_accessibility_attribute (dw_die_ref die, tree decl)
static void insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
static HOST_WIDE_INT extract_int (const unsigned char *src, unsigned int size)
static tree reference_to_unused (tree *tp, int *walk_subtrees, void *data)
static rtx rtl_for_decl_init (tree init, tree type)
static tree fortran_common (tree decl, HOST_WIDE_INT *value)
static tree mangle_referenced_decls (tree *tp, int *walk_subtrees, void *)
static dw_loc_list_ref convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
static void compute_frame_pointer_to_fb_displacement (poly_int64 offset)
void add_name_attribute (dw_die_ref die, const char *name_string)
static void add_filename_attribute (dw_die_ref die, const char *name_string)
static void add_desc_attribute (dw_die_ref die, const char *name_string)
static int lower_bound_default (void)
static void add_linkage_attr (dw_die_ref die, tree decl)
static void add_linkage_name_raw (dw_die_ref die, tree decl)
static void add_linkage_name (dw_die_ref die, tree decl)
static tree uses_local_type_r (tree *tp, int *walk_subtrees, void *data)
static tree uses_local_type (tree type)
static bool fill_variable_array_bounds (tree type)
static enum dwarf_tag record_type_tag (tree type)
static void set_decl_origin_self (tree)
static void set_block_origin_self (tree stmt)
bool premark_used_types_helper (tree const &type, void *)
int premark_types_used_by_global_vars_helper (types_used_by_vars_entry **slot, void *)
static void premark_used_types (struct function *fun)
static void premark_types_used_by_global_vars (void)
static void premark_used_variables (void)
static dw_die_ref gen_call_site_die (tree decl, dw_die_ref subr_die, struct call_arg_loc_node *ca_loc)
static bool decl_will_get_specification_p (dw_die_ref old_die, tree decl, bool declaration)
static bool local_function_static (tree decl)
static bool override_type_for_decl_p (tree decl, dw_die_ref old_die, dw_die_ref context_die)
static void add_call_src_coords_attributes (tree stmt, dw_die_ref die)
static void add_high_low_attributes (tree stmt, dw_die_ref die)
static const charhighest_c_language (const char *lang1, const char *lang2)
static bool is_variant_part (tree decl)
static tree analyze_discr_in_predicate (tree operand, tree struct_type)
static bool get_discr_value (tree src, dw_discr_value *dest)
static void analyze_variants_discr (tree variant_part_decl, tree struct_type, tree *discr_decl, dw_discr_list_ref **discr_lists_p, unsigned *discr_lists_length)
static void gen_variant_part (tree variant_part_decl, struct vlr_context *vlr_ctx, dw_die_ref context_die)
static void process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
static dw_die_ref lookup_context_die (tree context)
static bool is_trivial_indirect_ref (tree expr)
static void dwarf2out_begin_block (unsigned int line, unsigned int blocknum)
static void dwarf2out_end_block (unsigned int line, unsigned int blocknum)
static rtx_insndwarf2out_next_real_insn (rtx_insn *loc_note)
static bool block_within_block_p (tree block, tree outer, bool bothways)
int var_location_switch_text_section_1 (var_loc_list **slot, void *)
int find_empty_loc_ranges_at_text_label (var_loc_list **slot, int)
static void push_dw_line_info_entry (dw_line_info_table *table, enum dw_line_info_opcode opcode, unsigned int val)
static void dwarf2out_set_ignored_loc (unsigned int line, unsigned int column, const char *filename)
static void dwarf2out_start_source_file (unsigned int lineno, const char *filename)
static void dwarf2out_end_source_file (unsigned int lineno)
static void output_macinfo_op (macinfo_entry *ref)
static unsigned optimize_macinfo_range (unsigned int idx, vec< macinfo_entry, va_gc > *files, macinfo_hash_type **macinfo_htab)
static void save_macinfo_strings (void)
static void output_macinfo (const char *debug_line_label, bool early_lto_debug)
static unsigned init_sections_and_labels (bool early_lto_debug)
int index_string (indirect_string_node **h, unsigned int *index)
int output_index_string_offset (indirect_string_node **h, unsigned int *offset)
int output_index_string (indirect_string_node **h, unsigned int *cur_idx)
int count_index_strings (indirect_string_node **h, unsigned int *last_idx)
int output_indirect_string (indirect_string_node **h, enum dwarf_form form)
static void output_indirect_strings (void)
int output_addr_table_entry (addr_table_entry **slot, unsigned int *cur_index)
int count_index_addrs (addr_table_entry **slot, unsigned int *last_idx)
static void output_addr_table (void)
static void prune_unused_types_walk_loc_descr (dw_loc_descr_ref loc)
static void prune_unused_types_walk_local_classes (dw_die_ref die)
static void prune_unused_types_update_strings (dw_die_ref die)
static void mark_removed (dw_die_ref die)
static void move_linkage_attr (dw_die_ref die)
static void mark_base_types (dw_loc_descr_ref loc)
static void mark_base_types (dw_die_ref die)
static int base_type_cmp (const void *x, const void *y)
static void move_marked_base_types (void)
static rtx string_cst_pool_decl (tree t)
static bool optimize_one_addr_into_implicit_ptr (dw_loc_descr_ref loc)
static bool resolve_addr_in_expr (dw_attr_node *a, dw_loc_descr_ref loc)
static void optimize_location_into_implicit_ptr (dw_die_ref die, tree decl)
static dw_loc_descr_ref non_dwarf_expression (dw_loc_descr_ref l)
static dw_loc_descr_ref copy_deref_exprloc (dw_loc_descr_ref expr)
static int optimize_string_length (dw_attr_node *a)
static void resolve_addr (dw_die_ref die)
static void hash_locs (dw_loc_descr_ref loc, inchash::hash &hstate)
static void hash_loc_list (dw_loc_list_ref list_head)
static bool compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
static bool compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
static void optimize_location_lists_1 (dw_die_ref die, loc_list_hash_type *htab)
static void index_location_lists (dw_die_ref die)
static void optimize_location_lists (dw_die_ref die)
static void flush_limbo_die_list (void)
static void reset_dies (dw_die_ref die)
static void adjust_name_comp_dir (dw_die_ref die)
static bool resolve_variable_value_in_expr (dw_attr_node *a, dw_loc_descr_ref loc)
static void resolve_variable_value (dw_die_ref die)
static void note_variable_value_in_expr (dw_die_ref die, dw_loc_descr_ref loc)
static void note_variable_value (dw_die_ref die)
static void ctf_debug_do_cu (dw_die_ref die)
void dwarf2out_cc_finalize (void)


static rtx_insnlast_var_location_insn
static rtx_insncached_next_real_insn
static vec< rtx, va_gc > * used_rtx_array
static vec< tree, va_gc > * incomplete_types
static sectiondebug_info_section
static sectiondebug_skeleton_info_section
static sectiondebug_abbrev_section
static sectiondebug_skeleton_abbrev_section
static sectiondebug_aranges_section
static sectiondebug_addr_section
static sectiondebug_macinfo_section
static const chardebug_macinfo_section_name
static unsigned macinfo_label_base = 1
static sectiondebug_line_section
static sectiondebug_skeleton_line_section
static sectiondebug_loc_section
static sectiondebug_pubnames_section
static sectiondebug_pubtypes_section
static sectiondebug_str_section
static sectiondebug_line_str_section
static sectiondebug_str_dwo_section
static sectiondebug_str_offsets_section
static sectiondebug_ranges_section
static sectiondebug_ranges_dwo_section
static sectiondebug_frame_section
static vec< dw_fde_ref, va_gc > * fde_vec
static hash_table< indirect_string_hasher > * debug_str_hash
static hash_table< indirect_string_hasher > * debug_line_str_hash
static hash_table< indirect_string_hasher > * skeleton_debug_str_hash
static int dw2_string_counter
static bool have_multiple_function_sections = false
static sectioncold_text_section
static bool in_text_section_p = false
static const charlast_text_label
static const charlast_cold_label
static vec< const char *, va_gc > * switch_text_ranges
static vec< const char *, va_gc > * switch_cold_ranges
static dw_die_ref auto_die
static dw_die_ref decltype_auto_die
static rtx current_unit_personality
static bool do_eh_frame = false
static unsigned int rnglist_idx
const struct gcc_debug_hooks dwarf2_debug_hooks
const struct gcc_debug_hooks dwarf2_lineno_debug_hooks
static var_loc_view symview_upper_bound
static bool early_dwarf
static bool early_dwarf_finished
static bitmap zero_view_p
static unsigned long next_die_offset
static dw_die_ref single_comp_unit_die
static comdat_type_nodecomdat_type_list
static limbo_die_nodecu_die_list
static limbo_die_nodelimbo_die_list
static limbo_die_nodedeferred_asm_name
static hash_table< dwarf_file_hasher > * file_table
static hash_table< decl_die_hasher > * decl_die_table
static hash_table< variable_value_hasher > * variable_value_hash
static hash_table< block_die_hasher > * common_block_die_table
static hash_table< decl_loc_hasher > * decl_loc_table
static struct call_arg_loc_nodecall_arg_locations
static struct call_arg_loc_nodecall_arg_loc_last
static int call_site_count = -1
static int tail_call_site_count = -1
static hash_table< dw_loc_list_hasher > * cached_dw_loc_list_table
static vec< dw_die_ref, va_gc > * abbrev_die_table
static hash_map< dw_die_ref, int > * dwarf_proc_stack_usage_map
static unsigned int line_info_label_num
static dw_line_info_tablecur_line_info_table
static dw_line_info_tabletext_section_line_info
static dw_line_info_tablecold_text_section_line_info
static vec< dw_line_info_table *, va_gc > * separate_line_info
static bool info_section_emitted
static vec< pubname_entry, va_gc > * pubname_table
static vec< pubname_entry, va_gc > * pubtype_table
static vec< macinfo_entry, va_gc > * macinfo_table
static vec< dw_ranges, va_gc > * ranges_table
static vec< dw_ranges_by_label, va_gc > * ranges_by_label
static bool have_location_lists
static unsigned int loclabel_num
static unsigned int poc_label_num
static struct dwarf_file_datalast_emitted_file
static int label_num
static vec< die_arg_entry, va_gc > * tmpl_value_parm_die_table
static vec< tree, va_gc > * generic_type_instances
static poly_int64 frame_pointer_fb_offset
static bool frame_pointer_fb_offset_valid
static vec< dw_die_refbase_types
static char text_end_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char text_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char cold_text_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char cold_end_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char abbrev_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char debug_info_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char debug_skeleton_info_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char debug_skeleton_abbrev_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char debug_line_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char debug_addr_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char debug_skeleton_line_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char macinfo_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char loc_section_label [MAX_ARTIFICIAL_LABEL_BYTES]
static char ranges_section_label [2 *MAX_ARTIFICIAL_LABEL_BYTES]
static char ranges_base_label [2 *MAX_ARTIFICIAL_LABEL_BYTES]
static const char *(* demangle_name_func )(const char *)
static hash_table< addr_hasher > * addr_index_table
static hash_map< tree, sym_off_pair > * external_die_map
static int print_indent
static unsigned int loc_list_idx
static unsigned int abbrev_opt_start
static unsigned int abbrev_opt_base_type_end
static vec< unsigned int > abbrev_usage_count
static vec< dw_die_refsorted_abbrev_dies
static unsigned int output_line_info_generation
static const dwarf_qual_info_t dwarf_qual_info []
static const unsigned int dwarf_qual_info_size = ARRAY_SIZE (dwarf_qual_info)
static hash_table< inline_entry_data_hasher > * inline_entry_data_table
static charproducer_string
static bool in_first_function_p = true
static bool maybe_at_text_label_p = true
static unsigned int first_loclabel_num_not_at_text_label
static tree main_translation_unit = NULL_TREE
static unsigned init_sections_and_labels_generation

Macro Definition Documentation







◆ CHECKSUM [1/2]

#define CHECKSUM ( FOO)    md5_process_bytes (&(FOO), sizeof (FOO), ctx)
For DWARF-4 types, include the trailing NULL when checksumming strings.   

Referenced by attr_checksum(), attr_checksum_ordered(), checksum_sleb128(), checksum_uleb128(), die_checksum(), loc_checksum(), and loc_checksum_ordered().

◆ CHECKSUM [2/2]

#define CHECKSUM ( FOO)    md5_process_bytes (&(FOO), sizeof (FOO), ctx)
For DWARF-4 types, include the trailing NULL when checksumming strings.   


#define CHECKSUM_ATTR ( FOO)     if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)

Referenced by die_checksum_ordered().


SIZE )   md5_process_bytes ((FOO), (SIZE), ctx)


SIZE )   md5_process_bytes ((FOO), (SIZE), ctx)


#define CHECKSUM_SLEB128 ( FOO)    checksum_sleb128 ((FOO), ctx)



#define CHECKSUM_STRING ( FOO)    md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)




Referenced by output_call_frame_info().



Referenced by output_call_frame_info().


#define COLD_END_LABEL   "Letext_cold"


#define COLD_TEXT_SECTION_LABEL   "Ltext_cold"


#define DEBUG_ABBREV_SECTION   ".debug_abbrev"


#define DEBUG_ABBREV_SECTION_LABEL   "Ldebug_abbrev"


#define DEBUG_ADDR_SECTION   ".debug_addr"


#define DEBUG_ADDR_SECTION_LABEL   "Ldebug_addr"


#define DEBUG_ARANGES_SECTION   ".debug_aranges"


#define DEBUG_DWO_ABBREV_SECTION   ".debug_abbrev.dwo"


#define DEBUG_DWO_INFO_SECTION   ".debug_info.dwo"

Referenced by output_comdat_type_unit().


#define DEBUG_DWO_LINE_SECTION   ".debug_line.dwo"


#define DEBUG_DWO_LOC_SECTION   ".debug_loc.dwo"


#define DEBUG_DWO_LOCLISTS_SECTION   ".debug_loclists.dwo"


#define DEBUG_DWO_MACINFO_SECTION   ".debug_macinfo.dwo"


#define DEBUG_DWO_MACRO_SECTION   ".debug_macro.dwo"


#define DEBUG_DWO_RNGLISTS_SECTION   ".debug_rnglists.dwo"


#define DEBUG_DWO_STR_OFFSETS_SECTION   ".debug_str_offsets.dwo"


#define DEBUG_FRAME_SECTION   ".debug_frame"


#define DEBUG_INFO_SECTION   ".debug_info"
Section names used to hold DWARF debugging information.   

Referenced by output_comdat_type_unit().


#define DEBUG_INFO_SECTION_LABEL   "Ldebug_info"


#define DEBUG_LINE_SECTION   ".debug_line"


#define DEBUG_LINE_SECTION_LABEL   "Ldebug_line"


#define DEBUG_LINE_STR_SECTION   ".debug_line_str"


#define DEBUG_LOC_SECTION   ".debug_loc"


#define DEBUG_LOC_SECTION_LABEL   "Ldebug_loc"


#define DEBUG_LOCLISTS_SECTION   ".debug_loclists"


#define DEBUG_LTO_ABBREV_SECTION   ".gnu.debuglto_.debug_abbrev"


#define DEBUG_LTO_DWO_ABBREV_SECTION   ".gnu.debuglto_.debug_abbrev.dwo"


#define DEBUG_LTO_DWO_INFO_SECTION   ".gnu.debuglto_.debug_info.dwo"

Referenced by output_comdat_type_unit().


#define DEBUG_LTO_DWO_LINE_SECTION   ".gnu.debuglto_.debug_line.dwo"


#define DEBUG_LTO_DWO_MACINFO_SECTION   ".gnu.debuglto_.debug_macinfo.dwo"


#define DEBUG_LTO_DWO_MACRO_SECTION   ".gnu.debuglto_.debug_macro.dwo"


#define DEBUG_LTO_DWO_STR_OFFSETS_SECTION   ".gnu.debuglto_.debug_str_offsets.dwo"


#define DEBUG_LTO_INFO_SECTION   ".gnu.debuglto_.debug_info"

Referenced by output_comdat_type_unit().


#define DEBUG_LTO_LINE_SECTION   ".gnu.debuglto_.debug_line"


#define DEBUG_LTO_LINE_STR_SECTION   ".gnu.debuglto_.debug_line_str"


#define DEBUG_LTO_MACINFO_SECTION   ".gnu.debuglto_.debug_macinfo"


#define DEBUG_LTO_MACRO_SECTION   ".gnu.debuglto_.debug_macro"


#define DEBUG_LTO_STR_DWO_SECTION   ".gnu.debuglto_.debug_str.dwo"


#define DEBUG_LTO_STR_SECTION   ".gnu.debuglto_.debug_str"


#define DEBUG_MACINFO_SECTION   ".debug_macinfo"


#define DEBUG_MACINFO_SECTION_LABEL   "Ldebug_macinfo"


Definition ggc.h:184
Attribute used to refer to the macro section.   


#define DEBUG_MACRO_SECTION   ".debug_macro"


#define DEBUG_MACRO_SECTION_LABEL   "Ldebug_macro"


? ".debug_gnu_pubnames" : ".debug_pubnames")


? ".debug_gnu_pubtypes" : ".debug_pubtypes")


#define DEBUG_RANGES_SECTION   ".debug_ranges"


#define DEBUG_RANGES_SECTION_LABEL   "Ldebug_ranges"

Referenced by output_rnglists().


#define DEBUG_RNGLISTS_SECTION   ".debug_rnglists"


#define DEBUG_SKELETON_ABBREV_SECTION_LABEL   "Lskeleton_debug_abbrev"


#define DEBUG_SKELETON_INFO_SECTION_LABEL   "Lskeleton_debug_info"


#define DEBUG_SKELETON_LINE_SECTION_LABEL   "Lskeleton_debug_line"


#define DEBUG_STR_DWO_SECTION   ".debug_str.dwo"


Section flags for .debug_str.dwo section.   


#define DEBUG_STR_OFFSETS_SECTION   ".debug_str_offsets"


#define DEBUG_STR_SECTION   ".debug_str"


Definition output.h:386
Definition output.h:382
Definition output.h:387
Section flags for .debug_str section.   

Referenced by prune_unused_types_prune().




#define DUMP_GSTRUCT ( type,
result )    (result)

◆ DW_FORM_data

#define DW_FORM_data   (dwarf_offset_size == 8 ? DW_FORM_data8 : DW_FORM_data4)
Data and reference forms for relocatable data.   

Referenced by value_format().

◆ DW_FORM_ref

#define DW_FORM_ref   (dwarf_offset_size == 8 ? DW_FORM_ref8 : DW_FORM_ref4)

Referenced by value_format().


#define DW_RANGES_IDX_SKELETON   ((1U << 31) - 1)


Use assembler line directives if available.   

Referenced by dwarf2out_default_as_loc_support().


Use assembler views in line directives if available.   

Referenced by dwarf2out_default_as_locview_support().





Referenced by find_string_form(), and output_macinfo().


/* FIXME: there is no .debug_line_str.dwo section, \
for -gsplit-dwarf we should use DW_FORM_strx instead. @endverbatim */ \
Definition dwarf2out.cc:129
Definition dwarf2out.cc:4189
Non-zero if .debug_line_str should be used for .debug_line section
strings or strings that are likely shareable with those.   

Referenced by asm_outputs_debug_line_str(), and output_file_names().


Definition defaults.h:459
Definition dwarf2out.cc:198
Definition dwarf2out.cc:190
Fixed size portion of the address range info.   

Referenced by size_of_aranges().


Size of padding portion in the address range info.  It must be
aligned to twice the pointer size.   

Referenced by output_aranges().


#define DWARF_CIE_ID    (unsigned HOST_WIDE_INT) (dwarf_offset_size == 4 ? DW_CIE_ID : DW64_CIE_ID)
CIE identifier.   

Referenced by output_call_frame_info().


Definition defaults.h:472
Definition dwarf2out.cc:3317
Fixed size portion of the DWARF comdat type unit header.   

Referenced by output_comdat_type_unit().


Information concerning the compilation unit's programming
language, and compiler version.   
Fixed size portion of the DWARF compilation unit header.   

Referenced by calc_base_type_die_sizes(), and output_comp_unit().


Fixed size portion of the DWARF skeleton compilation unit header.   

Referenced by calc_base_type_die_sizes(), output_comp_unit(), and output_skeleton_debug_sections().


#define DWARF_INITIAL_LENGTH_SIZE   (dwarf_offset_size == 4 ? 4 : 12)
According to the (draft) DWARF 3 specification, the initial length
should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
bytes are 0xffffffff, followed by the length stored in the next 8

However, the SGI/MIPS ABI uses an initial length which is equal to
dwarf_offset_size.  It is defined (elsewhere) accordingly.   

Referenced by output_aranges(), output_call_frame_info(), output_compilation_unit_header(), output_fde(), output_line_info(), output_pubnames(), output_rnglists(), output_skeleton_debug_sections(), and prune_unmark_dies().


#define DWARF_INITIAL_LENGTH_SIZE_STR   (dwarf_offset_size == 4 ? "-4" : "-12")


#define DWARF_LARGEST_DATA_FORM_BITS    (dwarf_version >= 5 ? 128 : 64)
The number of bits that can be encoded by largest DW_FORM_dataN.
In DWARF4 and earlier it is DW_FORM_data8 with 64 bits, in DWARF5
DW_FORM_data16 with 128 bits.   

Referenced by output_die(), and size_of_die().


#define DWARF_LINE_BASE   -10
Minimum line offset in a special line info. opcode.
This value was chosen to give a reasonable range of values.   

Referenced by output_line_info(), and output_one_line_info_table().


Flag that indicates the initial value of the is_stmt_start flag.
In the present implementation, we do not mark any lines as
the beginning of a source statement, because that information
is not made available by the GCC front-end.   

Referenced by output_line_info(), and output_one_line_info_table().


Maximum number of operations per instruction bundle.   

Referenced by output_line_info().


#define DWARF_LINE_OPCODE_BASE   ((int)DW_LNS_set_isa + 1)
First special line opcode - leave room for the standard opcodes.   

Referenced by output_line_info(), and output_one_line_info_table().


Range of line offsets in a special line info. opcode.   

Referenced by output_line_info(), and output_one_line_info_table().


#define DWARF_PUBNAMES_HEADER_SIZE   (2 * dwarf_offset_size + 2)
Fixed size portion of public names info.   

Referenced by size_of_pubnames().


#define DWARF_REF_SIZE    (dwarf_version == 2 ? DWARF2_ADDR_SIZE : dwarf_offset_size)


Round SIZE up to the nearest BOUNDARY.   





Referenced by output_fde().



Referenced by output_fde().


#define FDE_LABEL   "LSFDE"

Referenced by output_die(), and output_fde().



#define FORCE_RESET_NEXT_VIEW ( x)    ((x) = (var_loc_view)-1)


#define FORCE_RESETTING_VIEW_P ( x)    ((x) == (var_loc_view)-1)


#define FRAME_BEGIN_LABEL   "Lframe"

Referenced by output_call_frame_info().




#define FUNC_END_LABEL   "LFE"



◆ have_macinfo

#define have_macinfo
&& !macinfo_table->is_empty ())
Definition dwarf2out.cc:113
static vec< macinfo_entry, va_gc > * macinfo_table
Definition dwarf2out.cc:3674
Definition dwarf2out.cc:109
Definition flag-types.h:60
True if .debug_macinfo or .debug_macros section is going to be




#define LINE_CODE_LABEL   "LM"



Referenced by output_line_info().



Referenced by output_line_info().



Referenced by output_line_info().



Referenced by output_line_info().




#define NOT_INDEXED   (-1U)
A vector for a table that contains frame description
information for each routine.   

Referenced by AT_index(), count_index_addrs(), count_index_strings(), output_attr_index_or_value(), set_indirect_string(), size_of_die(), and value_format().




??? Poison these here until it can be done generically.  They've been
totally replaced in this file; make sure it stays that way.   
The size of the target's pointer type.   

Referenced by output_call_frame_info(), output_fde(), and switch_to_eh_frame_section().




#define RESET_NEXT_VIEW ( x)    ((x) = (var_loc_view)0)


#define RESETTING_VIEW_P ( x)    ((x) == (var_loc_view)0 || FORCE_RESETTING_VIEW_P (x))






#define TEXT_END_LABEL   "Letext"


#define TEXT_SECTION_LABEL   "Ltext"
Labels we insert at beginning sections we can reference instead of
the section names themselves.   


#define TYPE_DECL_IS_STUB ( decl)
/* This is necessary for stub decls that \
appear in nested inline functions. @endverbatim */ \
static tree decl_ultimate_origin(const_tree)
Definition dwarf2out.cc:4448
Definition genautomata.cc:499
Definition tree.h:2681
Definition tree.h:2358
Definition tree.h:2746
Definition tree.h:2889
Definition tree.h:512
#define NULL_TREE
Definition tree.h:317
Define a macro which returns nonzero for a TYPE_DECL which was
implicitly generated for a type.

Note that, unlike the C front-end (which generates a NULL named
TYPE_DECL node for each complete tagged type, each array type,
and each function type node created) the C++ front-end generates
a _named_ TYPE_DECL node for each tagged type node created.
These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
generate a DW_TAG_typedef DIE for them.  Likewise with the Ada
front-end, but for each type, tagged or not.   


#define UNRELOCATED_OFFSET   ((addr_table_entry *) 1)
Add a range_list attribute value to a DIE.  When using
dwarf_split_debug_info, address attributes in dies destined for the
final executable should be direct references--setting the parameter
force_direct ensures this behavior.   

Referenced by add_AT_range_list().

◆ use_debug_types

#define use_debug_types
NOTE: In the comments in this file, many references are made to
"Debugging Information Entries".  This term is abbreviated as `DIE'
throughout the remainder of this file.   
An internal representation of the DWARF output is built, and then
walked to generate the DWARF debugging info.  The walk of the internal
representation is done after the entire program has been compiled.
The types below are used to describe the internal representation.   
Whether to put type DIEs into their own section .debug_types instead
of making them part of the .debug_info section.  Only supported for
Dwarf V4 or higher and the user didn't disable them through
-fno-debug-types-section.  It is more efficient to put them in a
separate comdat sections since the linker will then be able to
remove duplicates.  But not all tools support .debug_types sections
yet.  For Dwarf V5 or higher .debug_types doesn't exist any more,
it is DW_UT_type unit type in .debug_info section.  For late LTO
debug there should be almost no types emitted so avoid enabling
-fdebug-types-section there.   

Referenced by modified_type_die(), and unmark_dies().



#define ZERO_VIEW_P ( N)
((N) == (var_loc_view)0 \
|| (N) == (var_loc_view)-1 \
unsigned int var_loc_view
Definition dwarf2out.cc:1354
static bitmap zero_view_p
Definition dwarf2out.cc:3397
#define bitmap_bit_p(bitstring, bitno)
Definition genautomata.cc:3429
#define N
Definition gensupport.cc:202
Evaluate to TRUE iff N is known to identify the first location view
at its PC.  When not using assembler location view computation,
that must be view number zero.  Otherwise, ZERO_VIEW_P is allocated
and views label numbers recorded in it are the ones known to be

Referenced by dw_loc_list(), dwarf2out_maybe_output_loclist_view_pair(), loc_list_has_views(), and output_loc_list().

Typedef Documentation

◆ cached_dw_loc_list

◆ decl_hash_type

◆ die_arg_entry

◆ die_node

The Debugging Information Entry (DIE) structure.  DIEs form a tree.
The children of each node form a circular list linked by
die_sib.  die_child points to the node *before* the "first" child node.   

◆ dw_line_info_entry

◆ dw_loc_list_node

Location lists are ranges + location descriptions for that range,
so you can track variables that are in different places over
their entire life.   

◆ dw_offset

Various DIE's use offsets relative to the beginning of the
.debug_info section to refer to each other.   

◆ external_ref_hash_type

◆ limbo_die_node

A list of DIEs for which we can't determine ancestry (parent_die
field) just yet.  Later in dwarf2out_finish we will fill in the
missing bits.   

◆ loc_list_hash_type

◆ macinfo_entry

A structure to hold a macinfo entry.   

◆ macinfo_hash_type

◆ pubname_entry

The pubname structure  

◆ skeleton_chain_node

◆ var_loc_list

◆ var_loc_view

Enumeration Type Documentation

◆ ate_kind

And now, the subset of the debugging information support code necessary
for emitting location expressions.   
Describe an entry into the .debug_addr section.   

◆ dtprel_bool

enum for tracking thread-local variables whose address is really an offset
relative to the TLS pointer, which will need link-time relocation, but will
not need relocation by the DWARF consumer.   

◆ dw_line_info_opcode

The entries in the line_info table more-or-less mirror the opcodes
that are used in the real dwarf line table.  Arrays of these entries
are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not

◆ dw_scalar_form

Flags to represent a set of attribute classes for attributes that represent
a scalar value (bounds, pointers, ...).   

Function Documentation

◆ add_abstract_origin_attribute()

static void add_abstract_origin_attribute ( dw_die_ref die,
tree origin )
Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
by looking in the type declaration, the object declaration equate table or
the block mapping.   

References add_AT_unsigned(), DECL_BIT_FIELD_TYPE, DECL_SIZE, gcc_assert, ggc_alloc(), TREE_CODE, tree_fits_uhwi_p(), and tree_to_uhwi().

Referenced by gen_field_die(), and record_type_tag().

◆ add_accessibility_attribute()

static void add_accessibility_attribute ( dw_die_ref die,
tree decl )
Add DW_AT_accessibility attribute to DIE if needed.   

References add_AT_unsigned(), die_struct::die_parent, die_struct::die_tag, ggc_alloc(), NULL, TREE_PRIVATE, and TREE_PROTECTED.

◆ add_addr_table_entry()

static addr_table_entry * add_addr_table_entry ( void * addr,
enum ate_kind kind )

◆ add_alignment_attribute()

static void add_alignment_attribute ( dw_die_ref die,
tree tree_node )
Add a DW_AT_alignment attribute to DIE with TREE_NODE's non-default

Referenced by base_type_die(), modified_type_die(), and subrange_type_die().

◆ add_AT_addr()

static void add_AT_addr ( dw_die_ref die,
enum dwarf_attribute attr_kind,
rtx addr,
bool force_direct )
Add an address constant attribute value to a DIE.  When using
dwarf_split_debug_info, address attributes in dies destined for the
final executable should be direct references--setting the parameter
force_direct ensures this behavior.   

References add_addr_table_entry(), add_dwarf_attr(), ate_kind_rtx, dw_attr_struct::dw_attr, dw_attr_struct::dw_attr_val, dw_val_class_addr, ggc_alloc(), NULL, dw_val_node::v, dw_val_node::dw_val_struct_union::val_addr, dw_val_node::val_class, and dw_val_node::val_entry.

Referenced by gen_subprogram_die().

◆ add_AT_data8() [1/2]

◆ add_AT_data8() [2/2]

static void add_AT_data8 ( dw_die_ref ,
enum dwarf_attribute,
unsigned char *  )

Referenced by generate_type_signature().

◆ add_AT_die_ref()

◆ add_AT_double()

◆ add_AT_external_die_ref()

static void add_AT_external_die_ref ( dw_die_ref die,
enum dwarf_attribute attr_kind,
const char * symbol,
HOST_WIDE_INT offset )

◆ add_AT_file()

◆ add_AT_flag() [1/2]

◆ add_AT_flag() [2/2]

◆ add_AT_int()

◆ add_AT_lbl_id()

◆ add_AT_lineptr()

static void add_AT_lineptr ( dw_die_ref die,
enum dwarf_attribute attr_kind,
const char * label )

◆ add_AT_loc()

◆ add_AT_loc_list()

◆ add_AT_location_description()

static void add_AT_location_description ( dw_die_ref die,
enum dwarf_attribute attr_kind,
dw_loc_list_ref descr )
The following routines define various Dwarf attributes and any data
associated with them.   
Add a location description attribute value to a DIE.

This emits location attributes suitable for whole variables and
whole parameters.  Note that the location attributes for struct fields are
generated by the routine `data_member_location_attribute' below.   

References add_AT_loc(), add_AT_loc_list(), add_AT_view_list(), dwarf2out_locviews_in_attribute(), gcc_assert, get_AT(), ggc_alloc(), and single_element_loc_list_p().

Referenced by add_location_or_const_value_attribute().

◆ add_AT_low_high_pc()

static void add_AT_low_high_pc ( dw_die_ref die,
const char * lbl_low,
const char * lbl_high,
bool force_direct )
Add DW_AT_low_pc and DW_AT_high_pc to a DIE.  When using
dwarf_split_debug_info, address attributes in dies destined for the
final executable have force_direct set to avoid using indexed

References add_addr_table_entry(), add_dwarf_attr(), ate_kind_label, dw_attr_struct::dw_attr, dw_attr_struct::dw_attr_val, dw_val_class_high_pc, dw_val_class_lbl_id, ggc_alloc(), NULL, dw_val_node::v, dw_val_node::val_class, dw_val_node::val_entry, and dw_val_node::dw_val_struct_union::val_lbl_id.

◆ add_AT_macptr()

static void add_AT_macptr ( dw_die_ref die,
enum dwarf_attribute attr_kind,
const char * label )

◆ add_AT_pubnames()

static void add_AT_pubnames ( dw_die_ref die)
Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes.   

References add_AT_flag(), ggc_alloc(), and want_pubnames().

Referenced by add_top_level_skeleton_die_attrs().

◆ add_AT_range_list() [1/2]

◆ add_AT_range_list() [2/2]

static void add_AT_range_list ( dw_die_ref ,
enum dwarf_attribute,
unsigned long ,
bool  )

Referenced by add_ranges_by_labels().

◆ add_AT_specification()

static void add_AT_specification ( dw_die_ref die,
dw_die_ref targ_die )
Add an AT_specification attribute to a DIE, and also make the back
pointer from the specification to the definition.   

References add_AT_die_ref(), gcc_assert, and ggc_alloc().

Referenced by copy_declaration_context().

◆ add_AT_string()

◆ add_AT_symview()

◆ add_AT_unsigned()

◆ add_AT_vec()

◆ add_AT_view_list()

◆ add_AT_wide()

◆ add_bit_offset_attribute()

static void add_bit_offset_attribute ( dw_die_ref die,
tree decl )
For a FIELD_DECL node which represents a bit-field, output an attribute
which specifies the distance in bits from the highest order bit of the
"containing object" for the bit-field to the highest order bit of the
bit-field itself.

For any given bit-field, the "containing object" is a hypothetical object
(of some integral or enum type) within which the given bit-field lives.  The
type of this hypothetical "containing object" is always the same as the
declared type of the individual bit-field itself.  The determination of the
exact location of the "containing object" for a bit-field is rather
complicated.  It's handled by the `field_byte_offset' function (above).

Note that it is the size (in bytes) of the hypothetical "containing object"
which will be given in the DW_AT_byte_size attribute for this bit-field.
(See `byte_size_attribute' above).   

References DECL_ALIGN_UNIT, DECL_USER_ALIGN, and ggc_alloc().

◆ add_bit_size_attribute()

static void add_bit_size_attribute ( dw_die_ref die,
tree decl )
For a FIELD_DECL node which represents a bit field, output an attribute
which specifies the length in bits of the given field.   

◆ add_bound_info()

static void add_bound_info ( dw_die_ref subrange_die,
enum dwarf_attribute bound_attr,
tree bound,
struct loc_descr_context * context )
Given a tree node describing an array bound (either lower or upper) output
a representation for that bound.   

References comp_unit_die(), get_AT_unsigned(), and ggc_alloc().

Referenced by subrange_type_die().

◆ add_byte_size_attribute()

static void add_byte_size_attribute ( dw_die_ref die,
tree tree_node )
Add a DW_AT_byte_size attribute to DIE with TREE_NODE's size.   

◆ add_call_src_coords_attributes()

static void add_call_src_coords_attributes ( tree stmt,
dw_die_ref die )
A helper function for gen_inlined_subroutine_die.  Add source coordinate
attributes to the DIE for a block STMT, to describe where the inlined
function was called from.  This is similar to add_src_coords_attributes.   

Referenced by gen_field_die().

◆ add_calling_convention_attribute()

static void add_calling_convention_attribute ( dw_die_ref subr_die,
tree decl )
Given an object die, add the calling convention attribute for the
function call type.   

References DINFO_LEVEL_TERSE, ggc_alloc(), modified_type_die(), NULL, TREE_CODE, TREE_TYPE, TYPE_NAME, and TYPE_QUALS.

◆ add_child_die()

◆ add_child_die_after()

static void add_child_die_after ( dw_die_ref die,
dw_die_ref child_die,
dw_die_ref after_die )
Like add_child_die, but put CHILD_DIE after AFTER_DIE.   

References die_struct::die_child, gcc_assert, and ggc_alloc().

Referenced by modified_type_die().

◆ add_comp_dir_attribute()

static void add_comp_dir_attribute ( dw_die_ref )

◆ add_const_value_attribute()

static bool add_const_value_attribute ( dw_die_ref die,
machine_mode mode,
rtx rtl )

◆ add_data_member_location_attribute()

static void add_data_member_location_attribute ( dw_die_ref die,
tree decl,
struct vlr_context * ctx )
Attach the specialized form of location attribute used for data members of
struct and union types.  In the special case of a FIELD_DECL node which
represents a bit-field, the "offset" part of this special location
descriptor must indicate the distance in bytes from the lowest-addressed
byte of the containing struct or union type to the lowest-addressed byte of
the "containing object" for the bit-field.  (See the `field_byte_offset'
function above).

For any given bit-field, the "containing object" is a hypothetical object
(of some integral or enum type) within which the given bit-field lives.  The
type of this hypothetical "containing object" is always the same as the
declared type of the individual bit-field itself (for GCC anyway... the
DWARF spec doesn't actually mandate this).  Note that it is the size (in
bytes) of the hypothetical "containing object" which will be given in the
DW_AT_byte_size attribute for this bit-field.  (See the
`byte_size_attribute' function below.)  It is also used when calculating the
value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
function below.)

CTX is required: see the comment for VLR_CONTEXT.   

References add_AT_int(), add_AT_loc(), add_AT_unsigned(), add_loc_descr(), BINFO_OFFSET, BINFO_VIRTUAL_P, BINFO_VPTR_FIELD, bit_from_pos(), bit_position(), DECL_BIT_FIELD_TYPE, DWARF_GNAT_ENCODINGS_ALL, field_byte_offset(), gcc_assert, get_AT(), ggc_alloc(), int_loc_descriptor(), is_cxx(), new_loc_descr(), NULL, NULL_TREE, offset, remove_AT(), TREE_CODE, tree_fits_uhwi_p(), tree_to_shwi(), tree_to_uhwi(), and vlr_context::variant_part_offset.

◆ add_desc_attribute() [1/2]

static void add_desc_attribute ( dw_die_ref die,
const char * name_string )
Generate a DW_AT_description attribute given some string value to be included
as the value of the attribute.   

References add_AT_string(), demangle_name_func, ggc_alloc(), and NULL.

◆ add_desc_attribute() [2/2]

static void add_desc_attribute ( dw_die_ref die,
tree decl )
Generate a DW_AT_description attribute given some decl to be included
as the value of the attribute.   

References add_desc_attribute(), DECL_NAME, DECL_P, dwarf2_name(), free(), ggc_alloc(), IDENTIFIER_POINTER, NULL, NULL_TREE, and print_generic_expr_to_str().

Referenced by add_desc_attribute(), add_discr_value(), and maybe_create_die_with_external_ref().

◆ add_discr_list()

static void add_discr_list ( dw_die_ref die,
dw_discr_list_ref discr_list )
Add DISCR_LIST as a DW_AT_discr_list to DIE.   

◆ add_discr_value()

static void add_discr_value ( dw_die_ref die,
dw_discr_value * value )

◆ add_dwarf_attr()

◆ add_enumerator_pubname()

static void add_enumerator_pubname ( const char * scope_name,
dw_die_ref die )
Add an enumerator to the pubnames section.   

References pubname_struct::die, gcc_assert, get_AT_string(), ggc_alloc(), pubname_struct::name, NULL, pubname_table, and vec_safe_push().

Referenced by add_pubtype().

◆ add_filename_attribute()

static void add_filename_attribute ( dw_die_ref die,
const char * name_string )
Generate a DW_AT_name attribute given some string value representing a
file or filepath to be included as value of the attribute.   

References add_filepath_AT_string(), ggc_alloc(), and NULL.

◆ add_filepath_AT_string()

◆ add_gnat_descriptive_type_attribute()

static void add_gnat_descriptive_type_attribute ( dw_die_ref die,
tree type,
dw_die_ref context_die )
Retrieve the descriptive type of TYPE, if any, make sure it has a
DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
of TYPE accordingly.

??? This is a temporary measure until after we're able to generate
regular DWARF for the complex Ada type system.   

References add_AT_die_ref(), lang_hooks_for_types::descriptive_type, gcc_assert, gen_type_die(), ggc_alloc(), lookup_type_die(), and lang_hooks::types.

Referenced by modified_type_die().

◆ add_high_low_attributes()

static void add_high_low_attributes ( tree stmt,
dw_die_ref die )
A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
Add low_pc and high_pc attributes to the DIE for a block STMT.   

References add_AT_lbl_id(), CODE_LABEL_NUMBER, and ggc_alloc().

Referenced by gen_field_die().

◆ add_linkage_attr()

static void add_linkage_attr ( dw_die_ref die,
tree decl )
Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
given decl.  This used to be a vendor extension until after DWARF 4
standardized it.   

References a, add_AT_die_ref(), AT_ref(), get_AT(), and ggc_alloc().

◆ add_linkage_name()

static void add_linkage_name ( dw_die_ref die,
tree decl )
Add DW_AT_{,MIPS_}linkage_name attribute for the given decl if desired.   

References add_AT_file(), add_AT_unsigned(), DECL_SOURCE_LOCATION, expand_location(), ggc_alloc(), LOCATION_LOCUS, lookup_filename(), and UNKNOWN_LOCATION.

◆ add_linkage_name_raw()

static void add_linkage_name_raw ( dw_die_ref die,
tree decl )
Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.   

◆ add_loc_descr()

◆ add_loc_descr_op_piece()

static void add_loc_descr_op_piece ( dw_loc_descr_ref * list_head,
int size )
Optionally add a DW_OP_piece term to a location description expression.
DW_OP_piece is only added if the location description expression already
doesn't end with DW_OP_piece.   

References dw_loc_descr_node::dw_loc_next, dw_loc_descr_node::dw_loc_opc, ggc_alloc(), new_loc_descr(), and NULL.

Referenced by concat_loc_descriptor(), concatn_loc_descriptor(), loc_descriptor(), and multiple_reg_loc_descriptor().

◆ add_loc_descr_to_each()

◆ add_loc_list()

static void add_loc_list ( dw_loc_list_ref * ret,
dw_loc_list_ref list )
Given two lists RET and LIST
produce location list that is result of adding expression in LIST
to expression in RET on each position in program.
Might be destructive on both RET and LIST.

TODO: We handle only simple cases of RET or LIST having at most one
element.  General case would involve sorting the lists in program order
and merging them that will need some additional work.
Adding that will improve quality of debug info especially for SRA-ed

References add_loc_descr_to_each(), dw_loc_list_struct::dw_loc_next, expansion_failed(), dw_loc_list_struct::expr, ggc_alloc(), NULL, NULL_RTX, NULL_TREE, and prepend_loc_descr_to_each().

Referenced by loc_list_for_address_of_addr_expr_of_indirect_ref(), loc_list_from_tree_1(), loc_list_from_uint_comparison(), and typed_binop_from_tree().

◆ add_location_or_const_value_attribute()

static bool add_location_or_const_value_attribute ( dw_die_ref die,
tree decl,
bool cache_p )
Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
data attribute for a variable or a parameter.  We generate the
DW_AT_const_value attribute only in those cases where the given variable
or parameter does not have a true "location" either in memory or in a
register.  This can happen (for example) when a constant is passed as an
actual argument in a call to an inline function.  (It's possible that
these things can crop up in other ways also.)  Note that one type of
constant value which can be passed into an inlined function is a constant
pointer.  This can happen for example if an actual argument in an inlined
function call evaluates to a compile-time constant address.

CACHE_P is true if it is worth caching the location list for DECL,
so that future calls can reuse it rather than regenerate it from scratch.
This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
since we will need to refer to them each time the function is inlined.   

References add_AT_location_description(), add_const_value_attribute(), cache, cached_dw_loc_list_table, CONSTANT_P, decl_by_reference_p(), DECL_MODE, DECL_UID, dw_loc_list_struct::dw_loc_next, early_dwarf, var_loc_list_def::first, gcc_assert, get_AT(), GET_CODE, ggc_alloc(), var_loc_node::loc, loc_list_from_tree(), lookup_decl_loc(), var_loc_node::next, NOTE_P, NOTE_VAR_LOCATION, NOTE_VAR_LOCATION_LOC, NULL, rtl_for_decl_location(), tree_add_const_value_attribute_for_decl(), TREE_CODE, VAR_P, and XEXP.

◆ add_name_and_src_coords_attributes()

static void add_name_and_src_coords_attributes ( dw_die_ref die,
tree decl,
bool no_linkage_name )
Add a DW_AT_name attribute and source coordinate attribute for the
given decl, but only if it actually has a name.   

Referenced by record_type_tag(), and template_parameter_pack_die().

◆ add_name_attribute()

void add_name_attribute ( dw_die_ref die,
const char * name_string )
Generate a DW_AT_name attribute given some string value to be included as
the value of the attribute.   

References add_AT_string(), demangle_name_func, ggc_alloc(), and NULL.

Referenced by add_discr_value(), ctf_debug_init(), gen_block_die(), gen_type_die(), and modified_type_die().

◆ add_prototyped_attribute()

static void add_prototyped_attribute ( dw_die_ref die,
tree func_type )
If the compiled language is ANSI C, then add a 'prototyped'
attribute, if arg types are given for the parameters of a function.   

References DECL_SIZE, ggc_alloc(), simple_type_size_in_bits(), and tree_to_shwi().

◆ add_pubname()

◆ add_pubname_string()

static void add_pubname_string ( const char * str,
dw_die_ref die )
Add a new entry to .debug_pubnames if appropriate.   

References pubname_struct::die, pubname_struct::name, pubname_table, and vec_safe_push().

Referenced by add_pubname().

◆ add_pubtype()

◆ add_pure_or_virtual_attribute()

static void add_pure_or_virtual_attribute ( dw_die_ref die,
tree func_decl )
We do not currently support the pure_virtual attribute.   

References add_AT_external_die_ref(), ggc_alloc(), sym_off_pair::off, and sym_off_pair::sym.

◆ add_ranges()

static unsigned int add_ranges ( const_tree block,
bool maybe_new_sec )
Add a new entry to .debug_ranges corresponding to a block, or a
range terminator if BLOCK is NULL.  MAYBE_NEW_SEC is true if
this entry might be in a different section from previous range.   

References add_ranges_num(), and BLOCK_NUMBER.

◆ add_ranges_by_labels()

static void add_ranges_by_labels ( dw_die_ref die,
const char * begin,
const char * end,
bool * added,
bool force_direct )
Add a new entry to .debug_ranges corresponding to a pair of labels.
When using dwarf_split_debug_info, address attributes in dies destined
for the final executable should be direct references--setting the
parameter force_direct ensures this behavior.   

References add_AT_range_list(), add_ranges_num(), begin(), DW_RANGES_IDX_SKELETON, end(), ggc_alloc(), note_rnglist_head(), offset, ranges_by_label, vec_safe_length(), and vec_safe_push().

◆ add_ranges_num()

static unsigned int add_ranges_num ( int num,
bool maybe_new_sec )
Add a new entry to .debug_ranges.  Return its index into
ranges_table vector.   

References NULL, r, ranges_table, vec_safe_length(), and vec_safe_push().

Referenced by add_ranges(), and add_ranges_by_labels().

◆ add_scalar_info()

static void add_scalar_info ( dw_die_ref ,
enum dwarf_attribute,
tree ,
int ,
struct loc_descr_context *  )

Referenced by base_type_die(), and subrange_type_die().

◆ add_sibling_attributes()

static void add_sibling_attributes ( dw_die_ref die)
Traverse the DIE and add a sibling attribute if it may have the
effect of speeding up access to siblings.  To save some space,
avoid generating sibling attributes for DIE's without children.   

References add_AT_die_ref(), add_sibling_attributes(), die_struct::die_child, die_struct::die_parent, die_struct::die_sib, FOR_EACH_CHILD, and ggc_alloc().

Referenced by add_sibling_attributes().

◆ add_skeleton_AT_string()

◆ add_src_coords_attributes()

static void add_src_coords_attributes ( dw_die_ref die,
tree decl )

◆ add_subscript_info()

static void add_subscript_info ( dw_die_ref type_die,
tree type,
bool collapse_p )
Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.

This function reuses previously set type and bound information if

◆ add_top_level_skeleton_die_attrs()

static void add_top_level_skeleton_die_attrs ( dw_die_ref die)
Helper function to generate top-level dies for skeleton debug_info and

References add_AT_lineptr(), add_AT_pubnames(), add_skeleton_AT_string(), addr_index_table, comp_dir_string(), debug_addr_section_label, dwarf_AT(), ggc_alloc(), and NULL.

◆ add_type_attribute()

static void add_type_attribute ( dw_die_ref object_die,
tree type,
int cv_quals,
bool reverse,
dw_die_ref context_die )
Many forms of DIEs require a "type description" attribute.  This
routine locates the proper "type descriptor" die for the type given
by 'type' plus any additional qualifiers given by 'cv_quals', and
adds a DW_AT_type attribute below the given die.   

References ggc_alloc().

Referenced by generic_parameter_die(), and record_type_tag().

◆ add_var_loc_to_decl()

◆ address_of_int_loc_descriptor()

static dw_loc_descr_ref address_of_int_loc_descriptor ( int size,
Return loc description representing "address" of integer value.
This can appear only as toplevel expression.   

References add_loc_descr(), dw_val_class_const, DWARF2_ADDR_SIZE, ggc_alloc(), i, int_loc_descriptor(), new_loc_descr(), NULL, and size_of_int_loc_descriptor().

Referenced by loc_descriptor(), and loc_list_from_tree_1().

◆ adjust_name_comp_dir()

static void adjust_name_comp_dir ( dw_die_ref die)
reset_indirect_string removed the references coming from DW_AT_name
and DW_AT_comp_dir attributes on compilation unit DIEs.  Readd them as
.debug_line_str strings again.   

◆ adjust_piece_list()

static void adjust_piece_list ( rtx * dest,
rtx * src,
rtx * inner,
HOST_WIDE_INT piece_bitpos,
HOST_WIDE_INT bitsize,
rtx loc_note )
This function either modifies location piece list *DEST in
place (if SRC and INNER is NULL), or copies location piece list
*SRC to *DEST while modifying it.  Location BITPOS is modified
to contain LOC_NOTE, any pieces overlapping it are removed resp.
not copied and if needed some padding around it is added.
When modifying in place, DEST should point to EXPR_LIST where
earlier pieces cover PIECE_BITPOS bits, when copying SRC points
to the start of the whole list and INNER points to the EXPR_LIST
where earlier pieces cover PIECE_BITPOS bits.   

References decl_piece_bitsize(), decl_piece_node(), decl_piece_varloc_ptr(), free_EXPR_LIST_node(), gcc_assert, ggc_alloc(), NULL, NULL_RTX, and XEXP.

Referenced by add_var_loc_to_decl().

◆ alloc_dw_wide_int()

◆ analyze_discr_in_predicate()

static tree analyze_discr_in_predicate ( tree operand,
tree struct_type )
Check that OPERAND is a reference to a field in STRUCT_TYPE.  If it is,
return the FIELD_DECL.  Return NULL_TREE otherwise.   

◆ analyze_variants_discr()

static void analyze_variants_discr ( tree variant_part_decl,
tree struct_type,
tree * discr_decl,
dw_discr_list_ref ** discr_lists_p,
unsigned * discr_lists_length )
Try to extract synthetic properties out of VARIANT_PART_DECL, which is a
FIELD_DECL in STRUCT_TYPE that represents a variant part.  If unsuccessful,
store NULL_TREE in DISCR_DECL.  Otherwise:

  - store the discriminant field in STRUCT_TYPE that controls the variant
    part to *DISCR_DECL

  - put in *DISCR_LISTS_P an array where for each variant, the item
    represents the corresponding matching list of discriminant values.

  - put in *DISCR_LISTS_LENGTH the number of variants, which is the size of
    the above array.

Note that when the array is allocated (i.e. when the analysis is
successful), it is up to the caller to free the array.   

◆ append_entry_to_tmpl_value_parm_die_table()

static void append_entry_to_tmpl_value_parm_die_table ( dw_die_ref die,
tree arg )
Schedule generation of a DW_AT_const_value attribute to DIE.
That generation should happen after function debug info has been
generated. The value of the attribute is the constant value of ARG.   

Referenced by generic_parameter_die().

◆ asm_outputs_debug_line_str()

static bool asm_outputs_debug_line_str ( void )
Returns TRUE if we are outputting DWARF5 and the assembler supports
DWARF5 .debug_line tables using .debug_line_str or we generate
it ourselves, except for split-dwarf which doesn't have a

References DWARF5_USE_DEBUG_LINE_STR, ggc_alloc(), and output_asm_line_debug_info().

Referenced by add_filepath_AT_string().

◆ assign_location_list_indexes()

◆ AT_addr()

static rtx AT_addr ( dw_attr_node * a)
Get the RTX from to an address DIE attribute.   

References a, AT_class(), dw_val_class_addr, and gcc_assert.

Referenced by attr_checksum(), attr_checksum_ordered(), and output_attr_index_or_value().

◆ AT_class()

◆ AT_discr_list()

static dw_discr_list_ref AT_discr_list ( dw_attr_node * attr)

◆ AT_file()

static struct dwarf_file_data * AT_file ( dw_attr_node * a)
Get the dwarf_file_data from a file DIE attribute.   

References a, AT_class(), dw_val_class_file, dw_val_class_file_implicit, and gcc_assert.

Referenced by attr_checksum(), attr_checksum_ordered(), and get_AT_file().

◆ AT_flag()

static unsigned AT_flag ( dw_attr_node * a)

References a, AT_class(), dw_val_class_flag, and gcc_assert.

Referenced by get_AT_flag(), and output_die().

◆ AT_index()

static unsigned int AT_index ( dw_attr_node * a)
Return the index for any attribute that will be referenced with a
DW_FORM_addrx/GNU_addr_index or DW_FORM_strx/GNU_str_index.  String
indices are stored in dw_attr_val.v.val_str for reference counting

References a, AT_class(), dw_val_class_str, NOT_INDEXED, and NULL.

Referenced by output_attr_index_or_value(), output_die(), size_of_die(), and value_format().

◆ AT_int()

◆ AT_lbl()

◆ AT_loc()

◆ AT_loc_list()

◆ AT_loc_list_ptr()

static dw_loc_list_ref * AT_loc_list_ptr ( dw_attr_node * a)
Return a pointer to the location list referenced by the attribute.
If the named attribute is a view list, look up the corresponding
DW_AT_location attribute and return its location list.   

References a, AT_class(), AT_loc_list_ptr(), dw_val_class_loc_list, dw_val_class_view_list, gcc_assert, gcc_checking_assert, gcc_unreachable, get_AT(), ggc_alloc(), and NULL.

Referenced by AT_loc_list_ptr(), output_view_list_offset(), and resolve_addr().

◆ AT_ref()

◆ AT_ref_external()

static int AT_ref_external ( dw_attr_node * a)

◆ AT_string()

◆ AT_string_form()

static enum dwarf_form AT_string_form ( dw_attr_node * a)
Find out whether the string referenced from the attribute should be
output inline in DIE or out-of-line in .deb