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 "dwarf2codeview.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_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
 

Macros

#define INCLUDE_MEMORY
 
#define XCOFF_DEBUGGING_INFO   0
 
#define HAVE_XCOFF_DWARF_EXTRAS   0
 
#define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR   0
 
#define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET   0
 
#define PTR_SIZE   (POINTER_SIZE / BITS_PER_UNIT)
 
#define MAX_ARTIFICIAL_LABEL_BYTES   40
 
#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_ROUND(SIZE, BOUNDARY)
 
#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_BEGIN_LABEL   "LFB"
 
#define FUNC_SECOND_SECT_LABEL   "LFSB"
 
#define FUNC_END_LABEL   "LFE"
 
#define PROLOGUE_END_LABEL   "LPE"
 
#define EPILOGUE_BEGIN_LABEL   "LEB"
 
#define FRAME_BEGIN_LABEL   "Lframe"
 
#define CIE_AFTER_SIZE_LABEL   "LSCIE"
 
#define CIE_END_LABEL   "LECIE"
 
#define FDE_LABEL   "LSFDE"
 
#define FDE_AFTER_SIZE_LABEL   "LASFDE"
 
#define FDE_END_LABEL   "LEFDE"
 
#define LINE_NUMBER_BEGIN_LABEL   "LSLT"
 
#define LINE_NUMBER_END_LABEL   "LELT"
 
#define LN_PROLOG_AS_LABEL   "LASLTP"
 
#define LN_PROLOG_END_LABEL   "LELTP"
 
#define DIE_LABEL_PREFIX   "DW"
 
#define DUMP_GSTRUCT(type, usage, criterion, generic, matches, 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)
 
#define RESET_NEXT_VIEW(x)
 
#define FORCE_RESETTING_VIEW_P(x)
 
#define 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_COMPILE_UNIT_HEADER_SIZE
 
#define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE
 
#define DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE    (DWARF_COMPILE_UNIT_HEADER_SIZE + (dwarf_version >= 5 ? 8 : 0))
 
#define DWARF_PUBNAMES_HEADER_SIZE   (2 * dwarf_offset_size + 2)
 
#define DWARF_ARANGES_HEADER_SIZE
 
#define DWARF_ARANGES_PAD_SIZE
 
#define DWARF2_ASM_LINE_DEBUG_INFO   0
 
#define DWARF2_ASM_VIEW_DEBUG_INFO   0
 
#define ZERO_VIEW_P(N)
 
#define DWARF_LINE_BASE   -10
 
#define DWARF_LINE_OPCODE_BASE   ((int)DW_LNS_set_isa + 1)
 
#define DWARF_LINE_RANGE   (254-DWARF_LINE_OPCODE_BASE+1)
 
#define DWARF_LINE_DEFAULT_IS_STMT_START   1
 
#define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN   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_PUBNAMES_SECTION
 
#define DEBUG_PUBTYPES_SECTION
 
#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 DEBUG_STR_SECTION_FLAGS
 
#define DEBUG_STR_DWO_SECTION_FLAGS   (SECTION_DEBUG | SECTION_EXCLUDE)
 
#define DEBUG_MACRO_ATTRIBUTE
 
#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 SKELETON_COMP_DIE_ABBREV   1
 
#define SKELETON_TYPE_DIE_ABBREV   2
 
#define TEXT_END_LABEL   "Letext"
 
#define COLD_END_LABEL   "Letext_cold"
 
#define BLOCK_BEGIN_LABEL   "LBB"
 
#define BLOCK_INLINE_ENTRY_LABEL   "LBI"
 
#define BLOCK_END_LABEL   "LBE"
 
#define LINE_CODE_LABEL   "LM"
 
#define UNRELOCATED_OFFSET   ((addr_table_entry *) 1)
 
#define RELOCATED_OFFSET   (NULL)
 
#define CHECKSUM(FOO)
 
#define CHECKSUM_BLOCK(FOO, SIZE)
 
#define CHECKSUM_STRING(FOO)
 
#define CHECKSUM(FOO)
 
#define CHECKSUM_BLOCK(FOO, SIZE)
 
#define CHECKSUM_STRING(FOO)
 
#define CHECKSUM_SLEB128(FOO)
 
#define CHECKSUM_ULEB128(FOO)
 
#define CHECKSUM_ATTR(FOO)
 
#define DWARF5_USE_DEBUG_LINE_STR
 

Typedefs

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
 

Enumerations

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 ,
  LI_adv_address
}
 
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 }
 

Functions

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 (dwarf_call_frame_info cfi)
 
enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc (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 char * dwarf_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 char * dwarf_tag_name (unsigned)
 
static const char * dwarf_attr_name (unsigned)
 
static const char * dwarf_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 char * AT_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 *, int=0)
 
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 char * AT_lbl (dw_attr_node *)
 
static const char * get_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 char * dwarf2_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 char * type_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 char * gen_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 char * AT_vms_delta1 (dw_attr_node *)
 
static const char * AT_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 char * comp_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 char * dwarf_tag_name (unsigned int tag)
 
static const char * dwarf_attr_name (unsigned int attr)
 
static const char * dwarf_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)
 
dw_die_ref dw_get_die_parent (dw_die_ref die)
 
const char * get_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 char * secname_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 char * highest_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)
 

Variables

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 char * debug_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 char * last_text_label
 
static const char * last_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 char * producer_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

◆ BLOCK_BEGIN_LABEL

#define BLOCK_BEGIN_LABEL   "LBB"

◆ BLOCK_END_LABEL

#define BLOCK_END_LABEL   "LBE"

◆ BLOCK_INLINE_ENTRY_LABEL

#define BLOCK_INLINE_ENTRY_LABEL   "LBI"

◆ CHECKSUM [1/2]

#define CHECKSUM ( FOO)
Value:
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)
Value:
md5_process_bytes (&(FOO), sizeof (FOO), ctx)
For DWARF-4 types, include the trailing NULL when checksumming strings.   

◆ CHECKSUM_ATTR

#define CHECKSUM_ATTR ( FOO)
Value:
if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
static void attr_checksum_ordered(enum dwarf_tag, dw_attr_node *, struct md5_ctx *, int *)
Definition dwarf2out.cc:7274

Referenced by die_checksum_ordered().

◆ CHECKSUM_BLOCK [1/2]

#define CHECKSUM_BLOCK ( FOO,
SIZE )
Value:
md5_process_bytes ((FOO), (SIZE), ctx)

Referenced by attr_checksum(), and attr_checksum_ordered().

◆ CHECKSUM_BLOCK [2/2]

#define CHECKSUM_BLOCK ( FOO,
SIZE )
Value:
md5_process_bytes ((FOO), (SIZE), ctx)

◆ CHECKSUM_SLEB128

#define CHECKSUM_SLEB128 ( FOO)
Value:
checksum_sleb128 ((FOO), ctx)
static void checksum_sleb128(HOST_WIDE_INT, struct md5_ctx *)
Definition dwarf2out.cc:7175

Referenced by attr_checksum_ordered(), and loc_checksum_ordered().

◆ CHECKSUM_STRING [1/2]

#define CHECKSUM_STRING ( FOO)
Value:
md5_process_bytes ((FOO), strlen (FOO), ctx)

Referenced by attr_checksum(), attr_checksum_ordered(), checksum_die_context(), die_checksum_ordered(), and die_odr_checksum().

◆ CHECKSUM_STRING [2/2]

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

◆ CHECKSUM_ULEB128

#define CHECKSUM_ULEB128 ( FOO)
Value:
checksum_uleb128 ((FOO), ctx)
static void checksum_uleb128(unsigned HOST_WIDE_INT, struct md5_ctx *)
Definition dwarf2out.cc:7197

Referenced by attr_checksum_ordered(), checksum_die_context(), die_checksum_ordered(), die_odr_checksum(), and loc_checksum_ordered().

◆ CIE_AFTER_SIZE_LABEL

#define CIE_AFTER_SIZE_LABEL   "LSCIE"

Referenced by output_call_frame_info().

◆ CIE_END_LABEL

#define CIE_END_LABEL   "LECIE"

Referenced by output_call_frame_info().

◆ COLD_END_LABEL

#define COLD_END_LABEL   "Letext_cold"

◆ COLD_TEXT_SECTION_LABEL

#define COLD_TEXT_SECTION_LABEL   "Ltext_cold"

◆ DEBUG_ABBREV_SECTION

#define DEBUG_ABBREV_SECTION   ".debug_abbrev"

◆ DEBUG_ABBREV_SECTION_LABEL

#define DEBUG_ABBREV_SECTION_LABEL   "Ldebug_abbrev"

◆ DEBUG_ADDR_SECTION

#define DEBUG_ADDR_SECTION   ".debug_addr"

◆ DEBUG_ADDR_SECTION_LABEL

#define DEBUG_ADDR_SECTION_LABEL   "Ldebug_addr"

◆ DEBUG_ARANGES_SECTION

#define DEBUG_ARANGES_SECTION   ".debug_aranges"

◆ DEBUG_DWO_ABBREV_SECTION

#define DEBUG_DWO_ABBREV_SECTION   ".debug_abbrev.dwo"

◆ DEBUG_DWO_INFO_SECTION

#define DEBUG_DWO_INFO_SECTION   ".debug_info.dwo"

Referenced by output_comdat_type_unit().

◆ DEBUG_DWO_LINE_SECTION

#define DEBUG_DWO_LINE_SECTION   ".debug_line.dwo"

◆ DEBUG_DWO_LOC_SECTION

#define DEBUG_DWO_LOC_SECTION   ".debug_loc.dwo"

◆ DEBUG_DWO_LOCLISTS_SECTION

#define DEBUG_DWO_LOCLISTS_SECTION   ".debug_loclists.dwo"

◆ DEBUG_DWO_MACINFO_SECTION

#define DEBUG_DWO_MACINFO_SECTION   ".debug_macinfo.dwo"

◆ DEBUG_DWO_MACRO_SECTION

#define DEBUG_DWO_MACRO_SECTION   ".debug_macro.dwo"

◆ DEBUG_DWO_RNGLISTS_SECTION

#define DEBUG_DWO_RNGLISTS_SECTION   ".debug_rnglists.dwo"

◆ DEBUG_DWO_STR_OFFSETS_SECTION

#define DEBUG_DWO_STR_OFFSETS_SECTION   ".debug_str_offsets.dwo"

◆ DEBUG_FRAME_SECTION

#define DEBUG_FRAME_SECTION   ".debug_frame"

◆ DEBUG_INFO_SECTION

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

Referenced by output_comdat_type_unit().

◆ DEBUG_INFO_SECTION_LABEL

#define DEBUG_INFO_SECTION_LABEL   "Ldebug_info"

◆ DEBUG_LINE_SECTION

#define DEBUG_LINE_SECTION   ".debug_line"

◆ DEBUG_LINE_SECTION_LABEL

#define DEBUG_LINE_SECTION_LABEL   "Ldebug_line"

◆ DEBUG_LINE_STR_SECTION

#define DEBUG_LINE_STR_SECTION   ".debug_line_str"

◆ DEBUG_LOC_SECTION

#define DEBUG_LOC_SECTION   ".debug_loc"

◆ DEBUG_LOC_SECTION_LABEL

#define DEBUG_LOC_SECTION_LABEL   "Ldebug_loc"

◆ DEBUG_LOCLISTS_SECTION

#define DEBUG_LOCLISTS_SECTION   ".debug_loclists"

◆ DEBUG_LTO_ABBREV_SECTION

#define DEBUG_LTO_ABBREV_SECTION   ".gnu.debuglto_.debug_abbrev"

◆ DEBUG_LTO_DWO_ABBREV_SECTION

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

◆ DEBUG_LTO_DWO_INFO_SECTION

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

Referenced by output_comdat_type_unit().

◆ DEBUG_LTO_DWO_LINE_SECTION

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

◆ DEBUG_LTO_DWO_MACINFO_SECTION

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

◆ DEBUG_LTO_DWO_MACRO_SECTION

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

◆ DEBUG_LTO_DWO_STR_OFFSETS_SECTION

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

◆ DEBUG_LTO_INFO_SECTION

#define DEBUG_LTO_INFO_SECTION   ".gnu.debuglto_.debug_info"

Referenced by output_comdat_type_unit().

◆ DEBUG_LTO_LINE_SECTION

#define DEBUG_LTO_LINE_SECTION   ".gnu.debuglto_.debug_line"

◆ DEBUG_LTO_LINE_STR_SECTION

#define DEBUG_LTO_LINE_STR_SECTION   ".gnu.debuglto_.debug_line_str"

◆ DEBUG_LTO_MACINFO_SECTION

#define DEBUG_LTO_MACINFO_SECTION   ".gnu.debuglto_.debug_macinfo"

◆ DEBUG_LTO_MACRO_SECTION

#define DEBUG_LTO_MACRO_SECTION   ".gnu.debuglto_.debug_macro"

◆ DEBUG_LTO_STR_DWO_SECTION

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

◆ DEBUG_LTO_STR_SECTION

#define DEBUG_LTO_STR_SECTION   ".gnu.debuglto_.debug_str"

◆ DEBUG_MACINFO_SECTION

#define DEBUG_MACINFO_SECTION   ".debug_macinfo"

◆ DEBUG_MACINFO_SECTION_LABEL

#define DEBUG_MACINFO_SECTION_LABEL   "Ldebug_macinfo"

◆ DEBUG_MACRO_ATTRIBUTE

#define DEBUG_MACRO_ATTRIBUTE
Value:
(dwarf_version >= 5 ? DW_AT_macros \
: dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros)
Attribute used to refer to the macro section.   

◆ DEBUG_MACRO_SECTION

#define DEBUG_MACRO_SECTION   ".debug_macro"

◆ DEBUG_MACRO_SECTION_LABEL

#define DEBUG_MACRO_SECTION_LABEL   "Ldebug_macro"

◆ DEBUG_PUBNAMES_SECTION

#define DEBUG_PUBNAMES_SECTION
Value:
((debug_generate_pub_sections == 2) \
? ".debug_gnu_pubnames" : ".debug_pubnames")

◆ DEBUG_PUBTYPES_SECTION

#define DEBUG_PUBTYPES_SECTION
Value:
((debug_generate_pub_sections == 2) \
? ".debug_gnu_pubtypes" : ".debug_pubtypes")

◆ DEBUG_RANGES_SECTION

#define DEBUG_RANGES_SECTION   ".debug_ranges"

◆ DEBUG_RANGES_SECTION_LABEL

#define DEBUG_RANGES_SECTION_LABEL   "Ldebug_ranges"

Referenced by output_rnglists().

◆ DEBUG_RNGLISTS_SECTION

#define DEBUG_RNGLISTS_SECTION   ".debug_rnglists"

◆ DEBUG_SKELETON_ABBREV_SECTION_LABEL

#define DEBUG_SKELETON_ABBREV_SECTION_LABEL   "Lskeleton_debug_abbrev"

◆ DEBUG_SKELETON_INFO_SECTION_LABEL

#define DEBUG_SKELETON_INFO_SECTION_LABEL   "Lskeleton_debug_info"

◆ DEBUG_SKELETON_LINE_SECTION_LABEL

#define DEBUG_SKELETON_LINE_SECTION_LABEL   "Lskeleton_debug_line"

◆ DEBUG_STR_DWO_SECTION

#define DEBUG_STR_DWO_SECTION   ".debug_str.dwo"

◆ DEBUG_STR_DWO_SECTION_FLAGS

#define DEBUG_STR_DWO_SECTION_FLAGS   (SECTION_DEBUG | SECTION_EXCLUDE)
Section flags for .debug_str.dwo section.   

◆ DEBUG_STR_OFFSETS_SECTION

#define DEBUG_STR_OFFSETS_SECTION   ".debug_str_offsets"

◆ DEBUG_STR_SECTION

#define DEBUG_STR_SECTION   ".debug_str"

◆ DEBUG_STR_SECTION_FLAGS

#define DEBUG_STR_SECTION_FLAGS
Value:
(HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
@ SECTION_MERGE
Definition output.h:386
@ SECTION_DEBUG
Definition output.h:382
@ SECTION_STRINGS
Definition output.h:387
Section flags for .debug_str section.   

Referenced by prune_unused_types_prune().

◆ DIE_LABEL_PREFIX

#define DIE_LABEL_PREFIX   "DW"

◆ DUMP_GSTRUCT

#define DUMP_GSTRUCT ( type,
usage,
criterion,
generic,
matches,
result )
Value:
(result)

Referenced by should_emit_struct_debug().

◆ 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().

◆ DW_RANGES_IDX_SKELETON

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

◆ DWARF2_ASM_LINE_DEBUG_INFO

#define DWARF2_ASM_LINE_DEBUG_INFO   0
Use assembler line directives if available.   

Referenced by dwarf2out_default_as_loc_support().

◆ DWARF2_ASM_VIEW_DEBUG_INFO

#define DWARF2_ASM_VIEW_DEBUG_INFO   0
Use assembler views in line directives if available.   

Referenced by dwarf2out_default_as_locview_support().

◆ DWARF2_DIR_SHOULD_END_WITH_SEPARATOR

#define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR   0

◆ DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET

#define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET   0

Referenced by find_string_form(), and output_macinfo().

◆ DWARF5_USE_DEBUG_LINE_STR

#define DWARF5_USE_DEBUG_LINE_STR
Value:
/* FIXME: there is no .debug_line_str.dwo section, \
for -gsplit-dwarf we should use DW_FORM_strx instead. @endverbatim */ \
&& !dwarf_split_debug_info)
#define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
Definition dwarf2out.cc:131
#define DEBUG_STR_SECTION_FLAGS
Definition dwarf2out.cc:4170
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().

◆ DWARF_ARANGES_HEADER_SIZE

#define DWARF_ARANGES_HEADER_SIZE
Value:
(DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + dwarf_offset_size + 4, \
#define DWARF2_ADDR_SIZE
Definition defaults.h:459
#define DWARF_ROUND(SIZE, BOUNDARY)
Definition dwarf2out.cc:200
#define DWARF_INITIAL_LENGTH_SIZE
Definition dwarf2out.cc:192
Fixed size portion of the address range info.   

Referenced by size_of_aranges().

◆ DWARF_ARANGES_PAD_SIZE

#define DWARF_ARANGES_PAD_SIZE
Value:
(DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + dwarf_offset_size + 4, \
- (DWARF_INITIAL_LENGTH_SIZE + dwarf_offset_size + 4))
Size of padding portion in the address range info.  It must be
aligned to twice the pointer size.   

Referenced by output_aranges().

◆ DWARF_CIE_ID

#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().

◆ DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE

#define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE
Value:
+ DWARF_TYPE_SIGNATURE_SIZE + dwarf_offset_size)
#define DWARF_TYPE_SIGNATURE_SIZE
Definition defaults.h:472
#define DWARF_COMPILE_UNIT_HEADER_SIZE
Definition dwarf2out.cc:3297
Fixed size portion of the DWARF comdat type unit header.   

Referenced by output_comdat_type_unit().

◆ DWARF_COMPILE_UNIT_HEADER_SIZE

#define DWARF_COMPILE_UNIT_HEADER_SIZE
Value:
(DWARF_INITIAL_LENGTH_SIZE + dwarf_offset_size \
+ (dwarf_version >= 5 ? 4 : 3))
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().

◆ DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE

#define DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE    (DWARF_COMPILE_UNIT_HEADER_SIZE + (dwarf_version >= 5 ? 8 : 0))
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().

◆ DWARF_INITIAL_LENGTH_SIZE

#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
bytes.

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().

◆ DWARF_INITIAL_LENGTH_SIZE_STR

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

◆ DWARF_LARGEST_DATA_FORM_BITS

#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().

◆ DWARF_LINE_BASE

#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().

◆ DWARF_LINE_DEFAULT_IS_STMT_START

#define DWARF_LINE_DEFAULT_IS_STMT_START   1
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().

◆ DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN

#define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN   1
Maximum number of operations per instruction bundle.   

Referenced by output_line_info().

◆ DWARF_LINE_OPCODE_BASE

#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().

◆ DWARF_LINE_RANGE

#define DWARF_LINE_RANGE   (254-DWARF_LINE_OPCODE_BASE+1)
Range of line offsets in a special line info. opcode.   

Referenced by output_line_info(), and output_one_line_info_table().

◆ DWARF_PUBNAMES_HEADER_SIZE

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

Referenced by size_of_pubnames().

◆ DWARF_REF_SIZE

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

◆ DWARF_ROUND

#define DWARF_ROUND ( SIZE,
BOUNDARY )
Value:
((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
Round SIZE up to the nearest BOUNDARY.   

◆ EPILOGUE_BEGIN_LABEL

#define EPILOGUE_BEGIN_LABEL   "LEB"

◆ FDE_AFTER_SIZE_LABEL

#define FDE_AFTER_SIZE_LABEL   "LASFDE"

Referenced by output_fde().

◆ FDE_END_LABEL

#define FDE_END_LABEL   "LEFDE"

Referenced by output_fde().

◆ FDE_LABEL

#define FDE_LABEL   "LSFDE"

Referenced by output_die(), and output_fde().

◆ FOR_EACH_CHILD

#define FOR_EACH_CHILD ( die,
c,
expr )

◆ FORCE_RESET_NEXT_VIEW

#define FORCE_RESET_NEXT_VIEW ( x)
Value:
((x) = (var_loc_view)-1)
unsigned int var_loc_view
Definition dwarf2out.h:234

Referenced by find_empty_loc_ranges_at_text_label().

◆ FORCE_RESETTING_VIEW_P

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

◆ FRAME_BEGIN_LABEL

#define FRAME_BEGIN_LABEL   "Lframe"

Referenced by output_call_frame_info().

◆ FUNC_BEGIN_LABEL

#define FUNC_BEGIN_LABEL   "LFB"

◆ FUNC_END_LABEL

#define FUNC_END_LABEL   "LFE"

◆ FUNC_SECOND_SECT_LABEL

#define FUNC_SECOND_SECT_LABEL   "LFSB"

◆ have_macinfo

#define have_macinfo
Value:
&& debug_info_level >= DINFO_LEVEL_VERBOSE \
&& !macinfo_table->is_empty ())
#define HAVE_XCOFF_DWARF_EXTRAS
Definition dwarf2out.cc:115
static vec< macinfo_entry, va_gc > * macinfo_table
Definition dwarf2out.cc:3654
#define XCOFF_DEBUGGING_INFO
Definition dwarf2out.cc:111
@ DINFO_LEVEL_VERBOSE
Definition flag-types.h:63
True if .debug_macinfo or .debug_macros section is going to be
emitted.   

◆ HAVE_XCOFF_DWARF_EXTRAS

#define HAVE_XCOFF_DWARF_EXTRAS   0

◆ INCLUDE_MEMORY

#define INCLUDE_MEMORY
Output Dwarf2 format symbol table information from GCC.
   Copyright (C) 1992-2024 Free Software Foundation, Inc.
   Contributed by Gary Funck (gary@intrepid.com).
   Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
   Extensively modified by Jason Merrill (jason@cygnus.com).

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.   
TODO: Emit .debug_line header even when there are no functions, since
       the file numbers are used by .debug_info.  Alternately, leave
       out locations for types and decls.
     Avoid talking about ctors and op= for PODs.
     Factor out common prologue sequences into multiple CIEs.   
The first part of this file deals with the DWARF 2 frame unwind
information, which is also used by the GCC efficient exception handling
mechanism.  The second part, controlled only by an #ifdef
DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
information.   
DWARF2 Abbreviation Glossary:

CFA = Canonical Frame Address
        a fixed address on the stack which identifies a call frame.
        We define it to be the value of SP just before the call insn.
        The CFA register and offset, which may change during the course
        of the function, are used to calculate its value at runtime.

CFI = Call Frame Instruction
        an instruction for the DWARF2 abstract machine

CIE = Common Information Entry
        information describing information common to one or more FDEs

DIE = Debugging Information Entry

FDE = Frame Description Entry
        information describing the stack call frame, in particular,
        how to restore registers

DW_CFA_... = DWARF2 CFA call frame instruction
DW_TAG_... = DWARF2 DIE tag  

◆ LINE_CODE_LABEL

#define LINE_CODE_LABEL   "LM"

◆ LINE_NUMBER_BEGIN_LABEL

#define LINE_NUMBER_BEGIN_LABEL   "LSLT"

Referenced by output_line_info().

◆ LINE_NUMBER_END_LABEL

#define LINE_NUMBER_END_LABEL   "LELT"

Referenced by output_line_info().

◆ LN_PROLOG_AS_LABEL

#define LN_PROLOG_AS_LABEL   "LASLTP"

Referenced by output_line_info().

◆ LN_PROLOG_END_LABEL

#define LN_PROLOG_END_LABEL   "LELTP"

Referenced by output_line_info().

◆ MAX_ARTIFICIAL_LABEL_BYTES

◆ NO_INDEX_ASSIGNED

◆ NOT_INDEXED

#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().

◆ PROLOGUE_END_LABEL

#define PROLOGUE_END_LABEL   "LPE"

◆ PTR_SIZE

#define PTR_SIZE   (POINTER_SIZE / BITS_PER_UNIT)
??? 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().

◆ RELOCATED_OFFSET

#define RELOCATED_OFFSET   (NULL)

◆ RESET_NEXT_VIEW

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

Referenced by maybe_reset_location_view().

◆ RESETTING_VIEW_P

#define RESETTING_VIEW_P ( x)
Value:
#define FORCE_RESETTING_VIEW_P(x)
Definition dwarf2out.cc:3098

Referenced by maybe_reset_location_view().

◆ SKELETON_COMP_DIE_ABBREV

#define SKELETON_COMP_DIE_ABBREV   1

◆ SKELETON_TYPE_DIE_ABBREV

#define SKELETON_TYPE_DIE_ABBREV   2

◆ TEXT_END_LABEL

#define TEXT_END_LABEL   "Letext"

◆ TEXT_SECTION_LABEL

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

◆ TYPE_DECL_IS_STUB

#define TYPE_DECL_IS_STUB ( decl)
Value:
/* This is necessary for stub decls that \
appear in nested inline functions. @endverbatim */ \
static tree decl_ultimate_origin(const_tree)
Definition dwarf2out.cc:4429
Definition genautomata.cc:499
#define DECL_NAME(NODE)
Definition tree.h:2700
#define TYPE_STUB_DECL(NODE)
Definition tree.h:2377
#define DECL_ABSTRACT_ORIGIN(NODE)
Definition tree.h:2765
#define DECL_ARTIFICIAL(NODE)
Definition tree.h:2908
#define TREE_TYPE(NODE)
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.   

◆ UNRELOCATED_OFFSET

#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
Value:
(dwarf_version >= 4 \
&& flag_debug_types_section \
&& !in_lto_p)
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().

◆ XCOFF_DEBUGGING_INFO

◆ ZERO_VIEW_P

#define ZERO_VIEW_P ( N)
Value:
((N) == (var_loc_view)0 \
|| (N) == (var_loc_view)-1 \
static bitmap zero_view_p
Definition dwarf2out.cc:3377
#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
zero.   

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

typedef struct die_struct 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_offset

typedef long int 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

typedef struct macinfo_struct macinfo_entry
A structure to hold a macinfo entry.   

◆ macinfo_hash_type

◆ pubname_entry

typedef struct pubname_struct pubname_entry
The pubname structure  

◆ skeleton_chain_node

◆ var_loc_list

Enumeration Type Documentation

◆ ate_kind

enum 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.   
Enumerator
ate_kind_rtx 
ate_kind_rtx_dtprel 
ate_kind_label 

◆ 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.   
Enumerator
dtprel_false 
dtprel_true 

◆ 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
supported.   
Enumerator
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 
LI_adv_address 

◆ dw_scalar_form

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

Function Documentation

◆ add_abstract_origin_attribute()

static void add_abstract_origin_attribute ( dw_die_ref die,
tree origin )
inlinestatic
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, TREE_CODE, tree_fits_uhwi_p(), and tree_to_uhwi().

Referenced by record_type_tag().

◆ add_accessibility_attribute()

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

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

◆ add_addr_table_entry()

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

◆ add_alignment_attribute()

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

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 )
inlinestatic
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, 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]

static void add_AT_data8 ( dw_die_ref die,
enum dwarf_attribute attr_kind,
unsigned char data8[8] )
inlinestatic

◆ add_AT_data8() [2/2]

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

Referenced by generate_type_signature().

◆ add_AT_die_ref()

◆ add_AT_double()

static void add_AT_double ( dw_die_ref die,
enum dwarf_attribute attr_kind,
HOST_WIDE_INT high,
unsigned HOST_WIDE_INT low )
inlinestatic

◆ 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 )
static

◆ add_AT_file()

static void add_AT_file ( dw_die_ref die,
enum dwarf_attribute attr_kind,
struct dwarf_file_data * fd )
inlinestatic

◆ add_AT_flag() [1/2]

static void add_AT_flag ( dw_die_ref die,
enum dwarf_attribute attr_kind,
unsigned int flag )
inlinestatic

◆ add_AT_flag() [2/2]

static void add_AT_flag ( dw_die_ref ,
enum dwarf_attribute,
unsigned  )
static

◆ add_AT_int()

static void add_AT_int ( dw_die_ref die,
enum dwarf_attribute attr_kind,
HOST_WIDE_INT int_val )
inlinestatic

◆ add_AT_lbl_id()

static void add_AT_lbl_id ( dw_die_ref die,
enum dwarf_attribute attr_kind,
const char * lbl_id,
int offset )
inlinestatic

◆ add_AT_lineptr()

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

◆ 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 )
inlinestatic
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(), dw_loc_list_struct::expr, gcc_assert, get_AT(), dw_loc_list_struct::ll_symbol, single_element_loc_list_p(), and dw_loc_list_struct::vl_symbol.

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 )
inlinestatic
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.   

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, 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 )
inlinestatic

◆ add_AT_pubnames()

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

References add_AT_flag(), 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  )
static

Referenced by add_ranges_by_labels().

◆ add_AT_specification()

static void add_AT_specification ( dw_die_ref die,
dw_die_ref targ_die )
inlinestatic
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(), die_struct::die_definition, and gcc_assert.

Referenced by copy_declaration_context().

◆ add_AT_string()

◆ add_AT_symview()

static void add_AT_symview ( dw_die_ref die,
enum dwarf_attribute attr_kind,
const char * view_label )
inlinestatic

◆ add_AT_unsigned()

◆ add_AT_vec()

static void add_AT_vec ( dw_die_ref die,
enum dwarf_attribute attr_kind,
unsigned int length,
unsigned int elt_size,
unsigned char * array )
inlinestatic

◆ add_AT_view_list()

static void add_AT_view_list ( dw_die_ref die,
enum dwarf_attribute attr_kind )
inlinestatic

◆ add_AT_wide()

static void add_AT_wide ( dw_die_ref die,
enum dwarf_attribute attr_kind,
const wide_int_ref & w )
inlinestatic

◆ add_bit_offset_attribute()

static void add_bit_offset_attribute ( dw_die_ref die,
tree decl )
inlinestatic
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, and DECL_USER_ALIGN.

◆ add_bit_size_attribute()

static void add_bit_size_attribute ( dw_die_ref die,
tree decl )
inlinestatic
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 )
static
Given a tree node describing an array bound (either lower or upper) output
a representation for that bound.   

References comp_unit_die(), and get_AT_unsigned().

Referenced by subrange_type_die().

◆ add_byte_size_attribute()

static void add_byte_size_attribute ( dw_die_ref die,
tree tree_node )
static
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 )
inlinestatic
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.   

◆ add_calling_convention_attribute()

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

References DINFO_LEVEL_TERSE, 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 )
static
Like add_child_die, but put CHILD_DIE after AFTER_DIE.   

References die_struct::die_child, die_struct::die_parent, die_struct::die_sib, and gcc_assert.

Referenced by modified_type_die().

◆ add_comp_dir_attribute()

static void add_comp_dir_attribute ( dw_die_ref )
static

◆ add_const_value_attribute()

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

◆ add_data_member_location_attribute()

static void add_data_member_location_attribute ( dw_die_ref die,
tree decl,
struct vlr_context * ctx )
static
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(), 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 )
static
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, and NULL.

◆ add_desc_attribute() [2/2]

static void add_desc_attribute ( dw_die_ref die,
tree decl )
static
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(), 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 )
static
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 )
static

◆ add_dwarf_attr()

◆ add_enumerator_pubname()

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

References pubname_struct::die, gcc_assert, get_AT_string(), 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 )
static
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(), 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 )
static
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(), 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 )
inlinestatic
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(), and CODE_LABEL_NUMBER.

◆ add_linkage_attr()

static void add_linkage_attr ( dw_die_ref die,
tree decl )
static
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(), and get_AT().

◆ add_linkage_name()

static void add_linkage_name ( dw_die_ref die,
tree decl )
static
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(), LOCATION_LOCUS, lookup_filename(), and UNKNOWN_LOCATION.

◆ add_linkage_name_raw()

static void add_linkage_name_raw ( dw_die_ref die,
tree decl )
static
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 )
static
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, 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 )
static
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
structures.   

References add_loc_descr_to_each(), dw_loc_list_struct::dw_loc_next, expansion_failed(), dw_loc_list_struct::expr, 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 )
static
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_cleared_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 )
static
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, 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 )
inlinestatic
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, 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 )
static
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 )
inlinestatic
We do not currently support the pure_virtual attribute.   

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

◆ add_ranges()

static unsigned int add_ranges ( const_tree block,
bool maybe_new_sec )
static
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 )
static
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(), 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 )
static
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 *  )
static

Referenced by base_type_die(), and subrange_type_die().

◆ add_sibling_attributes()

static void add_sibling_attributes ( dw_die_ref die)
static
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, and FOR_EACH_CHILD.

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 )
static

◆ add_subscript_info()

static void add_subscript_info ( dw_die_ref type_die,
tree type,
bool collapse_p )
static
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
available.   

◆ add_top_level_skeleton_die_attrs()

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

References add_AT_lineptr(), add_AT_pubnames(), add_skeleton_AT_string(), addr_index_table, comp_dir_string(), debug_addr_section_label, dwarf_AT(), 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 )
static
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 die_struct::die_parent, and die_struct::die_tag.

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,
HOST_WIDE_INT i )
static

◆ adjust_name_comp_dir()

static void adjust_name_comp_dir ( dw_die_ref die)
static
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 bitpos,
HOST_WIDE_INT piece_bitpos,
HOST_WIDE_INT bitsize,
rtx loc_note )
static
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, 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 )
static
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 )
static
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 )
static
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 )
static
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
.debug_line_str.   

References DWARF5_USE_DEBUG_LINE_STR, 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)
inlinestatic
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)
inlinestatic

◆ AT_file()

static struct dwarf_file_data * AT_file ( dw_attr_node * a)
inlinestatic
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)
inlinestatic

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)
inlinestatic
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
pruning.   

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)
inlinestatic
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(), 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)
inlinestatic

◆ AT_string()

static const char * AT_string ( dw_attr_node * a)
inlinestatic

◆ AT_string_form()

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

References a, AT_class(), dw_val_class_str, find_string_form(), and gcc_assert.

Referenced by size_of_die(), and value_format().

◆ AT_unsigned()

◆ AT_vms_delta1()

static const char * AT_vms_delta1 ( dw_attr_node * a)
inlinestatic
Return the start label of a delta attribute.   

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

Referenced by output_die().

◆ AT_vms_delta2()

static const char * AT_vms_delta2 ( dw_attr_node * a)
inlinestatic
Return the end label of a delta attribute.   

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

Referenced by output_die().

◆ attr_checksum()

static void attr_checksum ( dw_attr_node * at,
struct md5_ctx * ctx,
int * mark )
static

◆ attr_checksum_ordered()

static void attr_checksum_ordered ( enum dwarf_tag tag,
dw_attr_node * at,
struct md5_ctx * ctx,
int * mark )
static

◆ base_type_cmp()

static int base_type_cmp ( const void * x,
const void * y )
static
Comparison function for sorting marked base types.   

◆ base_type_die()

◆ base_type_for_mode()

static dw_die_ref base_type_for_mode ( machine_mode mode,
bool unsignedp )
static

◆ based_loc_descr()

◆ block_within_block_p()

static bool block_within_block_p ( tree block,
tree outer,
bool bothways )
static
Check whether BLOCK, a lexical block, is nested within OUTER, or is
OUTER itself.  If BOTHWAYS, check not only that BLOCK can reach
OUTER through BLOCK_SUPERCONTEXT links, but also that there is a
path from OUTER to BLOCK through BLOCK_SUBBLOCKs and
BLOCK_FRAGMENT_ORIGIN links.   

◆ break_out_comdat_types()

◆ bswap_loc_descriptor()

static dw_loc_descr_ref bswap_loc_descriptor ( rtx rtl,
scalar_int_mode mode,
machine_mode mem_mode )
static
BSWAP (constS is initial shift count, either 56 or 24):
    constS const0
L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
    const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
    DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
    DW_OP_minus DW_OP_swap DW_OP_skip <L1>
L2: DW_OP_drop DW_OP_swap DW_OP_drop   

References add_loc_descr(), const0_rtx, dw_loc_descr_node::dw_loc_oprnd1, dw_val_class_loc, GEN_INT, GET_MODE_BITSIZE(), mem_loc_descriptor(), new_loc_descr(), NULL, dw_val_node::v, dw_val_node::val_class, dw_val_node::dw_val_struct_union::val_loc, VAR_INIT_STATUS_INITIALIZED, and XEXP.

Referenced by mem_loc_descriptor().

◆ build_abbrev_table()

static void build_abbrev_table ( dw_die_ref die,
external_ref_hash_type * extern_map )
static
The format of each DIE (and its attribute value pairs) is encoded in an
abbreviation table.  This routine builds the abbreviation table and assigns
a unique abbreviation id for each abbreviation entry.  The children of each
die are visited recursively.   

References a, abbrev_die_table, abbrev_opt_start, abbrev_usage_count, AT_class(), AT_ref(), build_abbrev_table(), change_AT_die_ref(), die_struct::die_abbrev, die_struct::die_attr, die_struct::die_child, die_struct::die_tag, dw_attr_struct::dw_attr, dw_val_class_die_ref, FOR_EACH_CHILD, FOR_EACH_VEC_SAFE_ELT, gcc_assert, is_type_die(), lookup_external_ref(), NULL, set_AT_ref_external(), sorted_abbrev_dies, external_ref::stub, value_format(), vec_safe_length(), and vec_safe_push().

Referenced by build_abbrev_table(), output_comdat_type_unit(), and output_comp_unit().

◆ build_breg_loc()

static void build_breg_loc ( struct dw_loc_descr_node ** head,
unsigned int regno )
static

References add_loc_descr(), and new_loc_descr().

Referenced by build_span_loc().

◆ build_cfa_aligned_loc()

struct dw_loc_descr_node * build_cfa_aligned_loc ( dw_cfa_location * cfa,
poly_int64 offset,
HOST_WIDE_INT alignment )
This function builds a dwarf location descriptor sequence for
the address at OFFSET from the CFA when stack is aligned to
ALIGNMENT byte.   

References add_loc_descr(), DWARF_FRAME_REGNUM, HARD_FRAME_POINTER_REGNUM, dw_cfa_location::indirect, int_loc_descriptor(), loc_descr_plus_const(), new_loc_descr(), new_reg_loc_descr(), offset, cfa_reg::reg, and dw_cfa_location::reg.

Referenced by reg_save().

◆ build_cfa_loc()

struct dw_loc_descr_node * build_cfa_loc ( dw_cfa_location * cfa,
poly_int64 offset )
This function builds a dwarf location descriptor sequence from a
dw_cfa_location, adding the given OFFSET to the result of the
expression.   

References add_loc_descr(), dw_cfa_location::base_offset, build_span_loc(), dw_val_class_const, dw_cfa_location::indirect, loc_descr_plus_const(), new_loc_descr(), new_reg_loc_descr(), NULL, dw_cfa_location::offset, offset, cfa_reg::reg, dw_cfa_location::reg, and cfa_reg::span.

Referenced by convert_cfa_to_fb_loc_list(), def_cfa_0(), and reg_save().

◆ build_span_loc()

struct dw_loc_descr_node * build_span_loc ( struct cfa_reg reg)
Build a dwarf location for a cfa_reg spanning multiple
consecutive registers.   

References add_loc_descr(), build_breg_loc(), gcc_assert, i, int_loc_descriptor(), new_loc_descr(), NULL, cfa_reg::reg, cfa_reg::span, and cfa_reg::span_width.

Referenced by build_cfa_loc(), and reg_save().

◆ calc_base_type_die_sizes()

static void calc_base_type_die_sizes ( void )
static
Size just the base type children at the start of the CU.
This is needed because build_abbrev needs to size locs
and sizing of type based stack ops needs to know die_offset
values for the base types.   

References abbrev_opt_base_type_end, abbrev_opt_start, base_types, comp_unit_die(), die_struct::die_abbrev, die_struct::die_child, die_struct::die_offset, die_struct::die_sib, DWARF_COMPILE_UNIT_HEADER_SIZE, DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE, gcc_assert, i, NULL, and size_of_die().

Referenced by get_base_type_offset().

◆ calc_die_sizes()

static void calc_die_sizes ( dw_die_ref die)
static
Size the debugging information associated with a given DIE.  Visits the
DIE's children recursively.  Updates the global variable next_die_offset, on
each time through.  Uses the current value of next_die_offset to update the
die_offset field in each DIE.   

References calc_die_sizes(), die_struct::die_child, die_struct::die_offset, FOR_EACH_CHILD, gcc_assert, next_die_offset, NULL, and size_of_die().

Referenced by calc_die_sizes(), output_comdat_type_unit(), and output_comp_unit().

◆ change_AT_die_ref()

◆ check_die()

static void check_die ( dw_die_ref die)
static

◆ checksum_die_context()

static void checksum_die_context ( dw_die_ref die,
struct md5_ctx * ctx )
static
Checksum the context of the DIE.  This adds the names of any
surrounding namespaces or structures to the checksum.   

References checksum_die_context(), CHECKSUM_STRING, CHECKSUM_ULEB128, die_struct::die_parent, die_struct::die_tag, get_AT_ref(), get_AT_string(), and NULL.

Referenced by attr_checksum_ordered(), checksum_die_context(), and generate_type_signature().

◆ checksum_sleb128()

static void checksum_sleb128 ( HOST_WIDE_INT value,
struct md5_ctx * ctx )
static
Calculate the checksum of a number in signed LEB128 format.   

References CHECKSUM.

◆ checksum_uleb128()

static void checksum_uleb128 ( unsigned HOST_WIDE_INT value,
struct md5_ctx * ctx )
static
Calculate the checksum of a number in unsigned LEB128 format.   

References CHECKSUM.

◆ class_or_namespace_scope_p()

static bool class_or_namespace_scope_p ( dw_die_ref context_die)
inlinestatic
Returns true if CONTEXT_DIE is a class or namespace, for deciding
whether or not to treat a DIE in this context as a declaration.   

◆ class_scope_p()

static bool class_scope_p ( dw_die_ref context_die)
inlinestatic
Returns true if CONTEXT_DIE is a class.   

Referenced by add_pubname().

◆ clone_as_declaration()

◆ clone_die()

◆ clone_tree()

static dw_die_ref clone_tree ( dw_die_ref die)
static
Make a clone of the tree rooted at DIE.   

References add_child_die(), clone_die(), clone_tree(), and FOR_EACH_CHILD.

Referenced by clone_tree(), and copy_declaration_context().

◆ clone_tree_partial()

static dw_die_ref clone_tree_partial ( dw_die_ref die,
decl_hash_type * decl_table )
static
Like clone_tree, but copy DW_TAG_subprogram DIEs as declarations.
Enter all the cloned children into the hash table decl_table.   

References add_child_die(), clone_as_declaration(), clone_die(), clone_tree_partial(), decl_table_entry::copy, decl_table, die_struct::die_tag, FOR_EACH_CHILD, gcc_assert, and decl_table_entry::orig.

Referenced by clone_tree_partial(), and copy_decls_walk().

◆ clz_loc_descriptor()

static dw_loc_descr_ref clz_loc_descriptor ( rtx rtl,
scalar_int_mode mode,
machine_mode mem_mode )
static
CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
const0 is DW_OP_lit0 or corresponding typed constant,
const1 is DW_OP_lit1 or corresponding typed constant
and constMSB is constant with just the MSB bit set
for the mode):
    DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
L1: const0 DW_OP_swap
L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
    DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
L3: DW_OP_drop
L4: DW_OP_nop

CTZ is similar:
    DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
L1: const0 DW_OP_swap
L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
    DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
L3: DW_OP_drop
L4: DW_OP_nop

FFS is similar:
    DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
L1: const1 DW_OP_swap
L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
    DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
L3: DW_OP_drop
L4: DW_OP_nop   

References add_loc_descr(), CLZ_DEFINED_VALUE_AT_ZERO, const0_rtx, const1_rtx, CTZ_DEFINED_VALUE_AT_ZERO, dw_loc_descr_node::dw_loc_oprnd1, dw_val_class_loc, GEN_INT, GET_CODE, GET_MODE, GET_MODE_BITSIZE(), GET_MODE_PRECISION(), HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT_1U, immed_wide_int_const(), INTVAL, mem_loc_descriptor(), new_loc_descr(), NULL, wi::set_bit_in_zero(), dw_val_node::v, dw_val_node::val_class, dw_val_node::dw_val_struct_union::val_loc, VAR_INIT_STATUS_INITIALIZED, and XEXP.

Referenced by mem_loc_descriptor().

◆ collect_checksum_attributes()

static void collect_checksum_attributes ( struct checksum_attributes * attrs,
dw_die_ref die )
static
Collect the attributes that we will want to use for the checksum.   

References a, die_struct::die_attr, and FOR_EACH_VEC_SAFE_ELT.

Referenced by die_checksum_ordered().

◆ collect_skeleton_dies()

static void collect_skeleton_dies ( dw_die_ref die,
decl_hash_type * decl_table )
static
Collect skeleton dies in DIE created by break_out_comdat_types already
and record them in DECL_TABLE.   

References a, AT_ref(), collect_skeleton_dies(), die_struct::comdat_type_p, decl_table_entry::copy, decl_table, die_struct::die_mark, FOR_EACH_CHILD, gcc_assert, get_AT(), and decl_table_entry::orig.

Referenced by collect_skeleton_dies(), and copy_decls_for_unworthy_types().

◆ comp_dir_string()

static const char * comp_dir_string ( void )
static
Retrieve the comp_dir string suitable for use with DW_AT_comp_dir.   

References DIR_SEPARATOR, DWARF2_DIR_SHOULD_END_WITH_SEPARATOR, free(), get_src_pwd(), NULL, and remap_debug_filename().

Referenced by add_top_level_skeleton_die_attrs(), and output_file_names().

◆ comp_unit_die()

◆ compare_loc_descriptor()

static dw_loc_descr_ref compare_loc_descriptor ( enum dwarf_location_atom op,
dw_loc_descr_ref op0,
dw_loc_descr_ref op1 )
static
Return location descriptor for comparison OP with operands OP0 and OP1.   

References add_loc_descr(), int_loc_descriptor(), new_loc_descr(), and STORE_FLAG_VALUE.

Referenced by scompare_loc_descriptor(), scompare_loc_descriptor_narrow(), scompare_loc_descriptor_wide(), and ucompare_loc_descriptor().

◆ compare_loc_operands()

static bool compare_loc_operands ( dw_loc_descr_ref x,
dw_loc_descr_ref y )
inlinestatic
Return true if X and Y opcodes have the same operands.   

◆ compare_locs()

static bool compare_locs ( dw_loc_descr_ref x,
dw_loc_descr_ref y )
inlinestatic
Return true if DWARF location expressions X and Y are the same.   

◆ compute_comp_unit_symbol()

static void compute_comp_unit_symbol ( dw_die_ref unit_die)
static
Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
children, and set die_symbol.   

References clean_symbol_name(), die_checksum(), die_struct::die_id, die_struct::die_symbol_or_type_node::die_symbol, get_AT_string(), i, and unmark_all_dies().

◆ compute_frame_pointer_to_fb_displacement()

static void compute_frame_pointer_to_fb_displacement ( poly_int64 offset)
static
Compute a displacement from the "steady-state frame pointer" to the
frame base (often the same as the CFA), and store it in
frame_pointer_fb_offset.  OFFSET is added to the displacement
before the latter is negated.   

References ARG_POINTER_CFA_OFFSET, arg_pointer_rtx, current_function_decl, eliminate_regs(), frame_pointer_fb_offset, frame_pointer_fb_offset_valid, frame_pointer_rtx, hard_frame_pointer_rtx, ira_use_lra_p, lra_eliminate_regs(), NULL_RTX, offset, stack_pointer_rtx, and strip_offset_and_add().

◆ concat_loc_descriptor()

static dw_loc_descr_ref concat_loc_descriptor ( rtx x0,
rtx x1,
enum var_init_status initialized )
static
Return a descriptor that describes the concatenation of two locations.
This is typically a complex variable.   

References add_loc_descr(), add_loc_descr_op_piece(), GET_MODE, GET_MODE_SIZE(), initialized, loc_descriptor(), new_loc_descr(), NULL, VAR_INIT_STATUS_INITIALIZED, and VAR_INIT_STATUS_UNINITIALIZED.

Referenced by loc_descriptor().

◆ concatn_loc_descriptor()

static dw_loc_descr_ref concatn_loc_descriptor ( rtx concatn,
enum var_init_status initialized )
static

◆ const_ok_for_output()

static bool const_ok_for_output ( rtx rtl)
static
Return true if constant RTL can be emitted in DW_OP_addr or
DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
non-marked constant pool SYMBOL_REFs can't be referenced in it.   

References ALL, const_ok_for_output_1(), FOR_EACH_SUBRTX_VAR, GET_CODE, and XEXP.

Referenced by add_const_value_attribute(), loc_descriptor(), loc_list_from_tree_1(), and mem_loc_descriptor().

◆ const_ok_for_output_1()

◆ constant_size()

static int constant_size ( unsigned HOST_WIDE_INT value)
static
Return the power-of-two number of bytes necessary to represent VALUE.   

References floor_log2(), and log().

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

◆ construct_piece_list()

static rtx construct_piece_list ( rtx loc_note,
HOST_WIDE_INT bitpos,
HOST_WIDE_INT bitsize )
static
Return rtx that should be stored into loc field for
LOC_NOTE and BITPOS/BITSIZE.   

References decl_piece_node(), and NULL_RTX.

Referenced by add_var_loc_to_decl().

◆ contains_subprogram_definition()

static bool contains_subprogram_definition ( dw_die_ref die)
static
Return true if this DIE contains a defining declaration of a
subprogram.   

References contains_subprogram_definition(), die_struct::die_tag, FOR_EACH_CHILD, and is_declaration_die().

Referenced by contains_subprogram_definition(), and should_move_die_to_comdat().

◆ convert_cfa_to_fb_loc_list()

◆ convert_descriptor_to_mode()

static dw_loc_descr_ref convert_descriptor_to_mode ( scalar_int_mode mode,
dw_loc_descr_ref op )
static
For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
type matching MODE, or, if MODE is narrower than or as wide as
DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
possible.   

References add_loc_descr(), base_type_for_mode(), dw_val_node::dw_val_struct_union::dw_val_die_union::die, dw_loc_descr_node::dw_loc_oprnd1, dw_val_class_die_ref, DWARF2_ADDR_SIZE, dwarf_OP(), dw_val_node::dw_val_struct_union::dw_val_die_union::external, GET_MODE_SIZE(), new_loc_descr(), NULL, dw_val_node::v, dw_val_node::val_class, and dw_val_node::dw_val_struct_union::val_die_ref.

Referenced by mem_loc_descriptor(), minmax_loc_descriptor(), typed_binop(), and typed_binop_from_tree().

◆ copy_ancestor_tree()

static dw_die_ref copy_ancestor_tree ( dw_die_ref unit,
dw_die_ref die,
decl_hash_type * decl_table )
static
Copy DIE and its ancestors, up to, but not including, the compile unit
or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
to check if the ancestor has already been copied into UNIT.   

References add_child_die(), clone_as_declaration(), decl_table_entry::copy, copy_ancestor_tree(), decl_table, die_struct::die_parent, get_AT_ref(), is_unit_die(), NULL, and decl_table_entry::orig.

Referenced by copy_ancestor_tree(), copy_declaration_context(), and copy_decls_walk().

◆ copy_declaration_context()

static dw_die_ref copy_declaration_context ( dw_die_ref unit,
dw_die_ref die )
static
Copy the declaration context to the new type unit DIE.  This includes
any surrounding namespace or type declarations.  If the DIE has an
AT_specification attribute, it also includes attributes and children
attached to the specification, and returns a pointer to the original
parent of the declaration DIE.  Returns NULL otherwise.   

References a, add_AT_specification(), add_child_die(), add_dwarf_attr(), clone_tree(), copy_ancestor_tree(), die_struct::die_id, die_struct::die_symbol_or_type_node::die_type_node, FOR_EACH_CHILD, FOR_EACH_VEC_SAFE_ELT, get_AT_ref(), is_unit_die(), NULL, and remove_AT().

Referenced by remove_child_or_replace_with_skeleton().

◆ copy_decls_for_unworthy_types()

static void copy_decls_for_unworthy_types ( dw_die_ref unit)
static
Copy declarations for "unworthy" types into the new comdat section.
Incomplete types, modified types, and certain other types aren't broken
out into comdat sections of their own, so they don't have a signature,
and we need to copy the declaration into the same section so that we
don't have an external reference.   

References collect_skeleton_dies(), copy_decls_walk(), decl_table, mark_dies(), and unmark_dies().

◆ copy_decls_walk()

static void copy_decls_walk ( dw_die_ref unit,
dw_die_ref die,
decl_hash_type * decl_table )
static

◆ copy_deref_exprloc()

static dw_loc_descr_ref copy_deref_exprloc ( dw_loc_descr_ref expr)
static
Return adjusted copy of EXPR:
If it is empty DWARF expression, return it.
If it is valid non-empty DWARF expression,
return copy of EXPR with DW_OP_deref appended to it.
If it is DWARF expression followed by DW_OP_reg{N,x}, return
copy of the DWARF expression with DW_OP_breg{N,x} <0> appended.
If it is DWARF expression followed by DW_OP_stack_value, return
copy of the DWARF expression without anything appended.
Otherwise, return NULL.   

References dw_loc_descr_node::dw_loc_next, dw_loc_descr_node::dw_loc_opc, and NULL.

Referenced by resolve_addr().

◆ copy_dwarf_procedure()

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
Helper for copy_dwarf_procs_ref_in_dies.  Make a copy of the DIE DWARF
procedure, put it under TYPE_NODE and return the copy.  Continue looking for
DWARF procedure references in the DW_AT_location attribute.   

References add_child_die(), clone_die(), copy_dwarf_procs_ref_in_attrs(), die_struct::die_attr, die_struct::die_child, die_struct::die_tag, gcc_assert, hash_map< KeyId, Value, Traits >::get_or_insert(), NULL, comdat_type_node::root_die, and vec_safe_length().

Referenced by copy_dwarf_procs_ref_in_attrs().

◆ copy_dwarf_procs_ref_in_attrs()

◆ copy_dwarf_procs_ref_in_dies()

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
Copy DWARF procedures that are referenced by the DIE tree to TREE_NODE and
rewrite references to point to the copies.

References are looked for in DIE's attributes and recursively in all its
children attributes that are location descriptions. COPIED_DWARF_PROCS is a
mapping from old DWARF procedures to their copy. It is used not to copy
twice the same DWARF procedure under TYPE_NODE.   

References copy_dwarf_procs_ref_in_attrs(), copy_dwarf_procs_ref_in_dies(), and FOR_EACH_CHILD.

Referenced by break_out_comdat_types(), and copy_dwarf_procs_ref_in_dies().

◆ copy_loc_descr()

static dw_loc_descr_ref copy_loc_descr ( dw_loc_descr_ref ref)
inlinestatic
Duplicate a single element of location list.   

References ggc_alloc().

Referenced by add_loc_descr_to_each(), and prepend_loc_descr_to_each().

◆ count_index_addrs()