GCC Middle and Back End API Reference
dwarf2out.c File Reference

Data Structures

struct  indirect_string_node
struct  dwarf_file_data
struct  deferred_locations_struct
struct  addr_table_entry_struct
union  addr_table_entry_struct::addr_table_entry_struct_union
struct  dw_loc_list_struct
struct  dw_line_info_struct
struct  dw_line_info_table_struct
struct  dw_attr_struct
struct  die_struct
union  die_struct::die_symbol_or_type_node
struct  pubname_struct
struct  dw_ranges_struct
struct  macinfo_struct
struct  dw_ranges_by_label_struct
struct  comdat_type_struct
struct  limbo_die_struct
struct  skeleton_chain_struct
struct  die_arg_entry_struct
struct  var_loc_node
struct  var_loc_list_def
struct  call_arg_loc_node
struct  cached_dw_loc_list_def
struct  checksum_attributes
struct  cu_hash_table_entry
struct  cu_hash_table_entry_hasher
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  macinfo_entry_hasher
struct  comdat_type_hasher
struct  loc_list_hasher

Typedefs

typedef struct
deferred_locations_struct 
deferred_locations
typedef struct
addr_table_entry_struct 
addr_table_entry
typedef struct dw_loc_list_struct dw_loc_list_node
typedef long int dw_offset
typedef struct dw_attr_structdw_attr_ref
typedef struct
dw_line_info_struct
dw_line_info_ref
typedef struct pubname_structpubname_ref
typedef struct dw_ranges_structdw_ranges_ref
typedef struct
dw_ranges_by_label_struct
dw_ranges_by_label_ref
typedef struct comdat_type_structcomdat_type_node_ref
typedef struct dw_line_info_struct dw_line_info_entry
typedef struct
dw_line_info_table_struct 
dw_line_info_table
typedef dw_line_info_tabledw_line_info_table_p
typedef struct dw_attr_struct dw_attr_node
typedef struct die_struct die_node
typedef struct pubname_struct pubname_entry
typedef struct macinfo_struct macinfo_entry
typedef struct comdat_type_struct comdat_type_node
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
< cu_hash_table_entry_hasher
cu_hash_type
typedef hash_table
< decl_table_entry_hasher
decl_hash_type
typedef hash_table
< external_ref_hasher
external_ref_hash_type
typedef const char * dchar_p
typedef hash_table
< macinfo_entry_hasher
macinfo_hash_type
typedef hash_table
< loc_list_hasher
loc_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
}
enum  dtprel_bool { dtprel_false = 0, dtprel_true = 1 }

Functions

static void dwarf2out_source_line (unsigned int, const char *, int, bool)
int vms_file_stats_name (const char *, long long *, long *, char *, int *)
static char * stripattributes (const char *)
static void output_call_frame_info (int)
static void dwarf2out_note_section_used (void)
static int matches_main_base ()
static int dump_struct_debug (tree type, enum debug_info_usage usage, enum debug_struct_file criterion, int generic, int matches, int result)
static bool should_emit_struct_debug ()
static char * stripattributes ()
static void switch_to_eh_frame_section ()
static void switch_to_frame_table_section ()
enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc ()
enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc ()
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 ()
static void output_call_frame_info ()
static void dwarf2out_do_cfi_startproc ()
dw_fde_ref dwarf2out_alloc_current_fde ()
void dwarf2out_begin_prologue (unsigned int line, 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)
void dwarf2out_end_epilogue (unsigned int line, const char *file)
void dwarf2out_frame_finish ()
static void var_location_switch_text_section (void)
static void set_cur_line_info_table (section *)
void dwarf2out_switch_text_section ()
static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT)
static const char * dwarf_stack_op_name ()
static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1, unsigned HOST_WIDE_INT oprnd2)
static dw_loc_descr_ref new_reg_loc_descr ()
static void add_loc_descr ()
static bool dw_val_equal_p ()
static bool loc_descr_equal_p_1 ()
bool loc_descr_equal_p ()
static void loc_descr_plus_const ()
static void loc_list_plus_const ()
static unsigned long int get_base_type_offset (dw_die_ref)
static unsigned long size_of_loc_descr ()
unsigned long size_of_locs ()
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 ()
void output_loc_sequence ()
static void output_loc_operands_raw ()
void output_loc_sequence_raw ()
struct dw_loc_descr_structbuild_cfa_loc ()
struct dw_loc_descr_structbuild_cfa_aligned_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
static int output_indirect_string (void **, void *)
static void dwarf2out_init (const char *)
static void dwarf2out_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_global_decl (tree)
static void dwarf2out_type_decl (tree, int)
static void dwarf2out_imported_module_or_decl (tree, tree, tree, 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)
static void dwarf2out_begin_function (tree)
static void dwarf2out_end_function (unsigned int)
static void dwarf2out_set_name (tree, tree)
static int is_pseudo_reg (const_rtx)
static tree type_main_variant (tree)
static int 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_ref)
static enum dw_val_class AT_class (dw_attr_ref)
static unsigned int AT_index (dw_attr_ref)
static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned)
static unsigned AT_flag (dw_attr_ref)
static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT)
static HOST_WIDE_INT AT_int (dw_attr_ref)
static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT)
static unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref)
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 hashval_t debug_str_do_hash (const void *)
static int debug_str_eq (const void *, const void *)
static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *)
static const char * AT_string (dw_attr_ref)
static enum dwarf_form AT_string_form (dw_attr_ref)
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_ref)
static int AT_ref_external (dw_attr_ref)
static void set_AT_ref_external (dw_attr_ref, int)
static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned)
static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref)
static dw_loc_descr_ref AT_loc (dw_attr_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_ref)
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_ref)
static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *)
static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *)
static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *)
static void add_AT_offset (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT)
static void add_AT_range_list (dw_die_ref, enum dwarf_attribute, unsigned long, bool)
static const char * AT_lbl (dw_attr_ref)
static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute)
static const char * get_AT_low_pc (dw_die_ref)
static const char * get_AT_hi_pc (dw_die_ref)
static const char * get_AT_string (dw_die_ref, enum dwarf_attribute)
static int get_AT_flag (dw_die_ref, enum dwarf_attribute)
static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute)
static dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute)
static bool is_cxx (void)
static bool is_fortran (void)
static bool is_ada (void)
static void 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 lookup_type_die (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 hashval_t decl_die_table_hash (const void *)
static int decl_die_table_eq (const void *, const void *)
static dw_die_ref lookup_decl_die (tree)
static hashval_t common_block_die_table_hash (const void *)
static int common_block_die_table_eq (const void *, const void *)
static hashval_t decl_loc_table_hash (const void *)
static int decl_loc_table_eq (const void *, const void *)
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 *)
static void print_spaces (FILE *)
static void print_die (dw_die_ref, FILE *)
static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref)
static dw_die_ref pop_compile_unit (dw_die_ref)
static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *)
static void attr_checksum (dw_attr_ref, 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_ref, 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 int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *)
static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *)
static int same_attr_p (dw_attr_ref, dw_attr_ref, int *)
static int same_die_p (dw_die_ref, dw_die_ref, int *)
static int same_die_p_wrap (dw_die_ref, dw_die_ref)
static void compute_section_prefix (dw_die_ref)
static int is_type_die (dw_die_ref)
static int is_comdat_die (dw_die_ref)
static int is_symbol_die (dw_die_ref)
static bool is_template_instantiation (dw_die_ref)
static void assign_symbol_names (dw_die_ref)
static void break_out_includes (dw_die_ref)
static int is_declaration_die (dw_die_ref)
static int 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_ref)
static void output_value_format (dw_attr_ref)
static void output_abbrev_section (void)
static void output_die_abbrevs (unsigned long, dw_die_ref)
static void output_die_symbol (dw_die_ref)
static void output_die (dw_die_ref)
static void output_compilation_unit_header (void)
static void output_comp_unit (dw_die_ref, int)
static void output_comdat_type_unit (comdat_type_node *)
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 (unsigned long)
static unsigned int add_ranges_num (int)
static unsigned int add_ranges (const_tree)
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 dw_die_ref base_type_die (tree)
static int is_base_type (tree)
static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref)
static dw_die_ref modified_type_die (tree, int, int, 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 int type_is_enum (const_tree)
static unsigned int dbx_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, HOST_WIDE_INT, enum var_init_status)
static int is_based_loc (const_rtx)
static int resolve_one_addr (rtx *, void *)
static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx, enum var_init_status)
static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode, enum var_init_status)
static dw_loc_list_ref loc_list_from_tree (tree, int)
static dw_loc_descr_ref loc_descriptor_from_tree (tree, int)
static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int)
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 HOST_WIDE_INT field_byte_offset (const_tree)
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)
static bool add_const_value_attribute (dw_die_ref, rtx)
static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *)
static void insert_double (double_int, unsigned char *)
static void 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, enum dwarf_attribute)
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_name_attribute (dw_die_ref, const char *)
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_bound_info (dw_die_ref, enum dwarf_attribute, tree)
static void add_subscript_info (dw_die_ref, tree, bool)
static void add_byte_size_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 dw_die_ref 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)
static void push_decl_scope (tree)
static void pop_decl_scope (void)
static dw_die_ref scope_die_for (tree, dw_die_ref)
static int local_scope_p (dw_die_ref)
static int class_scope_p (dw_die_ref)
static int class_or_namespace_scope_p (dw_die_ref)
static void add_type_attribute (dw_die_ref, tree, int, int, 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 const char * decl_start_label (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 void gen_entry_point_die (tree, dw_die_ref)
static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref)
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, int)
static void gen_inlined_subroutine_die (tree, dw_die_ref, int)
static void gen_field_die (tree, 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, 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)
static void gen_block_die (tree, dw_die_ref, int)
static void decls_for_scope (tree, dw_die_ref, int)
static int is_redundant_typedef (const_tree)
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_decl_die (tree, tree, 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)
static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage)
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 *, const char *, 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_ref)
static const char * AT_vms_delta2 (dw_attr_ref)
static void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute, const char *, const char *)
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 const char * comp_dir_string (void)
static hashval_t hash_loc_operands (dw_loc_descr_ref, hashval_t)
static enum dwarf_location_atom dw_addr_op ()
static dw_loc_descr_ref new_addr_loc_descr ()
static dw_die_ref comp_unit_die ()
void dwarf2out_set_demangle_name_func (const char *(*func)(const char *))
static int is_pseudo_reg ()
static tree type_main_variant ()
static int is_tagged_type ()
static void get_ref_die_offset_label ()
static unsigned long int get_base_type_offset ()
static unsigned long int get_ref_die_offset ()
static const char * dwarf_tag_name ()
static const char * dwarf_attr_name ()
static const char * dwarf_form_name ()
static tree decl_ultimate_origin ()
static tree decl_class_context ()
static void add_dwarf_attr ()
static enum dw_val_class AT_class ()
static unsigned int AT_index ()
static void add_AT_flag ()
static unsigned AT_flag ()
static void add_AT_int ()
static HOST_WIDE_INT AT_int ()
static unsigned HOST_WIDE_INT AT_unsigned ()
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 hashval_t debug_str_do_hash ()
static int debug_str_eq ()
static struct
indirect_string_node
find_AT_string_in_table ()
static struct
indirect_string_node
find_AT_string ()
static void add_AT_string ()
static const char * AT_string ()
static void set_indirect_string ()
static enum dwarf_form find_string_form ()
static enum dwarf_form AT_string_form ()
static void add_AT_die_ref ()
static void change_AT_die_ref ()
static void add_AT_specification ()
static dw_die_ref AT_ref ()
static int AT_ref_external ()
static void set_AT_ref_external ()
static void add_AT_fde_ref ()
static void add_AT_loc ()
static dw_loc_descr_ref AT_loc ()
static void add_AT_loc_list ()
static dw_loc_list_ref AT_loc_list ()
static dw_loc_list_refAT_loc_list_ptr ()
static hashval_t addr_table_entry_do_hash ()
static int addr_table_entry_eq ()
void init_addr_table_entry ()
static addr_table_entryadd_addr_table_entry ()
static void remove_addr_table_entry ()
static void remove_loc_list_addr_table_entries ()
static int index_addr_table_entry ()
static rtx AT_addr ()
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 ()
static void add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind, long unsigned int offset, bool force_direct)
static const char * AT_vms_delta1 ()
static const char * AT_vms_delta2 ()
static const char * AT_lbl ()
static dw_attr_ref get_AT ()
static dw_die_ref get_die_parent ()
static const char * get_AT_low_pc ()
static const char * get_AT_hi_pc ()
static const char * get_AT_string ()
static int get_AT_flag ()
static unsigned get_AT_unsigned ()
static dw_die_ref get_AT_ref ()
static struct dwarf_file_dataget_AT_file ()
static void remove_AT ()
static void remove_child_with_prev ()
static void replace_child ()
static void move_all_children ()
static void remove_child_TAG ()
static void add_child_die ()
static void splice_child_die ()
static dw_die_ref new_die ()
static dw_die_ref lookup_type_die ()
static dw_die_ref strip_naming_typedef ()
static dw_die_ref lookup_type_die_strip_naming_typedef ()
static void equate_type_number_to_die ()
static hashval_t decl_die_table_hash ()
static int decl_die_table_eq ()
static dw_die_ref lookup_decl_die ()
static hashval_t decl_loc_table_hash ()
static int decl_loc_table_eq ()
static var_loc_listlookup_decl_loc ()
static hashval_t cached_dw_loc_list_table_hash ()
static int cached_dw_loc_list_table_eq ()
static void equate_decl_number_to_die ()
static int decl_piece_bitsize ()
static rtxdecl_piece_varloc_ptr ()
static rtx decl_piece_node ()
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 struct var_loc_nodeadd_var_loc_to_decl ()
static void print_spaces ()
static void print_signature ()
static void print_die ()
DEBUG_FUNCTION void debug_dwarf_die ()
DEBUG_FUNCTION void debug ()
DEBUG_FUNCTION void debug_dwarf ()
static dw_die_ref push_new_compile_unit ()
static dw_die_ref pop_compile_unit ()
static void loc_checksum ()
static void attr_checksum ()
static void die_checksum ()
static void checksum_sleb128 ()
static void checksum_uleb128 ()
static void checksum_die_context ()
static void loc_checksum_ordered ()
static void collect_checksum_attributes ()
static void die_checksum_ordered ()
static void die_odr_checksum ()
static void generate_type_signature ()
static int same_loc_p ()
static int same_dw_val_p ()
static int same_attr_p ()
static int same_die_p ()
static int same_die_p_wrap ()
static void compute_section_prefix ()
static int is_type_die ()
static int is_comdat_die ()
static int is_symbol_die ()
static bool is_cu_die ()
static bool is_unit_die ()
static bool is_namespace_die ()
static bool is_class_die ()
static bool is_template_parameter ()
static bool is_template_instantiation ()
static char * gen_internal_sym ()
static void assign_symbol_names ()
static int check_duplicate_cu ()
static void record_comdat_symbol_number (dw_die_ref cu, cu_hash_type htable, unsigned int sym_num)
static void break_out_includes ()
static int is_declaration_die ()
static int is_nested_in_subprogram ()
static int contains_subprogram_definition ()
static int should_move_die_to_comdat ()
static dw_die_ref clone_die ()
static dw_die_ref clone_tree ()
static dw_die_ref clone_as_declaration ()
static dw_die_ref copy_ancestor_tree ()
static dw_die_ref copy_declaration_context ()
static void generate_skeleton_ancestor_tree ()
static void generate_skeleton_bottom_up ()
static dw_die_ref generate_skeleton ()
static void break_out_comdat_types ()
static dw_die_ref clone_tree_hash ()
static void copy_decls_walk ()
static void copy_decls_for_unworthy_types ()
static void add_sibling_attributes ()
static void output_location_lists ()
static struct external_reflookup_external_ref ()
static void optimize_external_refs_1 ()
int dwarf2_build_local_stub ()
static external_ref_hash_type optimize_external_refs ()
static void build_abbrev_table ()
static int constant_size ()
static unsigned long size_of_die ()
static void calc_die_sizes ()
static void mark_dies ()
static void unmark_dies ()
static void unmark_all_dies ()
static bool include_pubname_in_output ()
static unsigned long size_of_pubnames ()
static enum dwarf_form value_format ()
static void output_value_format ()
static void output_die_abbrevs ()
static void output_die_symbol ()
static void gen_llsym ()
static void output_loc_list ()
static void output_range_list_offset ()
static void output_loc_list_offset ()
static void output_attr_index_or_value ()
static void output_signature ()
static void output_die ()
static void output_comp_unit ()
static void add_AT_pubnames ()
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 ()
static dw_die_ref get_skeleton_type_unit ()
static void output_skeleton_debug_sections ()
static void output_comdat_type_unit ()
static const char * dwarf2_name ()
static void add_pubname_string ()
static void add_pubname ()
static void add_enumerator_pubname ()
static void add_pubtype ()
static void output_pubnames ()
static void output_aranges ()
static unsigned int add_ranges_num ()
static unsigned int add_ranges ()
static int file_info_cmp ()
static int file_name_acquire ()
static void output_one_line_info_table ()
static void output_line_info ()
static dw_die_ref base_type_die ()
static int is_base_type ()
static unsigned HOST_WIDE_INT simple_type_size_in_bits ()
static double_int double_int_type_size_in_bits ()
static dw_die_ref subrange_type_die ()
static void gen_generic_params_dies ()
static int type_is_enum ()
static unsigned int dbx_reg_number ()
static void add_loc_descr_op_piece ()
static dw_loc_descr_ref reg_loc_descriptor ()
static dw_loc_descr_ref one_reg_loc_descriptor ()
static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT)
static dw_loc_descr_ref int_shift_loc_descriptor ()
static dw_loc_descr_ref int_loc_descriptor ()
static unsigned long size_of_int_shift_loc_descriptor ()
static unsigned long size_of_int_loc_descriptor ()
static dw_loc_descr_ref address_of_int_loc_descriptor ()
static int is_based_loc ()
static dw_loc_descr_ref tls_mem_loc_descriptor ()
static void expansion_failed ()
static int const_ok_for_output_1 ()
static bool const_ok_for_output ()
static dw_die_ref base_type_for_mode ()
static dw_loc_descr_ref convert_descriptor_to_mode ()
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 (enum dwarf_location_atom op, rtx rtl, enum machine_mode mem_mode)
static dw_loc_descr_ref ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl, enum machine_mode mem_mode)
static dw_loc_descr_ref minmax_loc_descriptor (rtx rtl, enum machine_mode mode, enum machine_mode mem_mode)
static dw_loc_descr_ref typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die, enum machine_mode mode, enum machine_mode mem_mode)
static dw_loc_descr_ref clz_loc_descriptor (rtx rtl, enum machine_mode mode, enum machine_mode mem_mode)
static dw_loc_descr_ref popcount_loc_descriptor (rtx rtl, enum machine_mode mode, enum machine_mode mem_mode)
static dw_loc_descr_ref bswap_loc_descriptor (rtx rtl, enum machine_mode mode, enum machine_mode mem_mode)
static dw_loc_descr_ref rotate_loc_descriptor (rtx rtl, enum machine_mode mode, enum machine_mode mem_mode)
static dw_loc_descr_ref parameter_ref_descriptor ()
dw_loc_descr_ref mem_loc_descriptor (rtx rtl, enum machine_mode mode, enum machine_mode mem_mode, enum var_init_status initialized)
static dw_loc_descr_ref concat_loc_descriptor ()
static dw_loc_descr_ref concatn_loc_descriptor ()
static dw_loc_descr_ref implicit_ptr_descriptor ()
static const char * secname_for_decl ()
static bool decl_by_reference_p ()
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 ()
static dw_loc_descr_ref dw_sra_loc_expr ()
static dw_loc_list_ref dw_loc_list ()
static bool single_element_loc_list_p ()
static void add_loc_descr_to_each ()
static void add_loc_list ()
static dw_loc_descr_ref cst_pool_loc_descr ()
static dw_loc_list_ref loc_list_for_address_of_addr_expr_of_indirect_ref ()
static dw_loc_list_ref loc_list_from_tree ()
static dw_loc_descr_ref loc_descriptor_from_tree ()
static HOST_WIDE_INT ceiling ()
static tree field_type ()
static unsigned simple_type_align_in_bits ()
static unsigned simple_decl_align_in_bits ()
static double_int round_up_to_align ()
static HOST_WIDE_INT field_byte_offset ()
static void add_accessibility_attribute ()
static void add_data_member_location_attribute ()
static void insert_int ()
static HOST_WIDE_INT extract_int ()
static void insert_double ()
static void insert_float ()
static bool add_const_value_attribute ()
static tree reference_to_unused (tree *tp, int *walk_subtrees, void *data)
static rtx rtl_for_decl_init ()
static rtx rtl_for_decl_location ()
static tree fortran_common ()
static void defer_location ()
static bool native_encode_initializer ()
static bool tree_add_const_value_attribute ()
static bool tree_add_const_value_attribute_for_decl ()
static dw_loc_list_ref convert_cfa_to_fb_loc_list ()
static void compute_frame_pointer_to_fb_displacement ()
static void add_name_attribute ()
static void add_comp_dir_attribute ()
static int lower_bound_default ()
static void add_bound_info ()
static void add_subscript_info ()
static void add_byte_size_attribute ()
static void add_bit_offset_attribute ()
static void add_bit_size_attribute ()
static void add_prototyped_attribute ()
static dw_die_ref add_abstract_origin_attribute ()
static void add_pure_or_virtual_attribute ()
static void add_linkage_attr ()
static void add_src_coords_attributes ()
static void add_linkage_name ()
static void add_name_and_src_coords_attributes ()
void dwarf2out_vms_debug_main_pointer ()
static void push_decl_scope ()
static tree uses_local_type_r ()
static tree uses_local_type ()
static dw_die_ref scope_die_for ()
static int local_scope_p ()
static int class_scope_p ()
static int class_or_namespace_scope_p ()
static void add_calling_convention_attribute ()
static const char * type_tag ()
static tree member_declared_type ()
static const char * decl_start_label ()
static void gen_array_type_die ()
static dw_loc_descr_ref descr_info_loc ()
static void add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr, tree val, tree base_decl)
static void gen_entry_point_die ()
static enum dwarf_tag record_type_tag ()
static dw_die_ref gen_enumeration_type_die ()
static void gen_unspecified_parameters_die ()
static void gen_formal_types_die ()
static void gen_type_die_for_member ()
static void set_decl_origin_self (tree)
static void set_decl_abstract_flags (tree, int)
static void set_block_origin_self ()
static void set_decl_origin_self ()
static void set_block_abstract_flags ()
static void set_decl_abstract_flags ()
static void dwarf2out_abstract_function ()
static int premark_used_types_helper ()
static int premark_types_used_by_global_vars_helper (void **slot, void *data)
static void premark_used_types ()
static void premark_types_used_by_global_vars ()
static dw_die_ref gen_call_site_die (tree decl, dw_die_ref subr_die, struct call_arg_loc_node *ca_loc)
static void gen_subprogram_die ()
static hashval_t common_block_die_table_hash ()
static int common_block_die_table_eq ()
static void gen_variable_die ()
static void gen_const_die ()
static void gen_label_die ()
static void add_call_src_coords_attributes ()
static void add_high_low_attributes ()
static void gen_lexical_block_die ()
static void gen_inlined_subroutine_die ()
static void gen_field_die ()
static void gen_pointer_type_die ()
static void gen_reference_type_die ()
static void gen_ptr_to_mbr_type_die ()
static char * gen_producer_string ()
static dw_die_ref gen_compile_unit_die ()
static void gen_inheritance_die ()
static void gen_member_die ()
static void gen_subroutine_type_die ()
static void gen_typedef_die ()
static void gen_type_die ()
static void gen_block_die ()
static void process_scope_var ()
static void decls_for_scope ()
static int is_redundant_typedef ()
static bool is_naming_typedef_decl ()
static dw_die_ref get_context_die ()
static dw_die_ref force_decl_die ()
static dw_die_ref force_type_die ()
static dw_die_ref setup_namespace_context ()
static dw_die_ref declare_in_namespace ()
static void gen_namespace_die ()
static dw_die_ref gen_decl_die ()
static void dwarf2out_global_decl ()
static void dwarf2out_type_decl ()
void dwarf2out_decl ()
static void dwarf2out_function_decl ()
static void dwarf2out_begin_block (unsigned int line, unsigned int blocknum)
static void dwarf2out_end_block ()
static bool dwarf2out_ignore_block ()
static int file_table_eq ()
static hashval_t file_table_hash ()
static struct dwarf_file_datalookup_filename ()
static int maybe_emit_file ()
static void append_entry_to_tmpl_value_parm_die_table ()
static bool generic_type_p ()
static void schedule_generic_params_dies_gen ()
static void dwarf2out_set_name ()
static void dwarf2out_var_location ()
static int var_location_switch_text_section_1 ()
static void set_cur_line_info_table ()
static void dwarf2out_begin_function ()
static int find_empty_loc_ranges_at_text_label ()
static void dwarf2out_end_function ()
static void push_dw_line_info_entry (dw_line_info_table *table, enum dw_line_info_opcode opcode, unsigned int val)
static void dwarf2out_start_source_file ()
static void dwarf2out_end_source_file ()
static void output_macinfo_op ()
static unsigned optimize_macinfo_range (unsigned int idx, vec< macinfo_entry, va_gc > *files, macinfo_hash_type *macinfo_htab)
static void save_macinfo_strings ()
static void output_macinfo ()
static void dwarf2out_init ()
static int index_string ()
static int output_index_string_offset ()
static int output_index_string ()
static int output_indirect_string ()
static void output_indirect_strings ()
static int output_addr_table_entry ()
static void output_addr_table ()
static void verify_marks_clear ()
static void prune_unmark_dies ()
static void prune_unused_types_walk_attribs ()
static void prune_unused_types_mark_generic_parms_dies ()
static void prune_unused_types_mark ()
static void prune_unused_types_walk_local_classes ()
static void prune_unused_types_walk ()
static void prune_unused_types_update_strings ()
static void prune_unused_types_prune ()
static int file_table_relative_p ()
static void move_linkage_attr ()
static void mark_base_types ()
static int base_type_cmp ()
static void move_marked_base_types ()
static int resolve_one_addr ()
static rtx string_cst_pool_decl ()
static bool optimize_one_addr_into_implicit_ptr ()
static bool resolve_addr_in_expr ()
static void optimize_location_into_implicit_ptr ()
static void resolve_addr ()
static hashval_t hash_loc_operands ()
static hashval_t hash_locs ()
static void hash_loc_list ()
static bool compare_loc_operands ()
static bool compare_locs ()
static void optimize_location_lists_1 ()
static void index_location_lists ()
static void optimize_location_lists ()
static void dwarf2out_finish ()

Variables

static rtx last_var_location_insn
static rtx cached_next_real_insn
static vec< rtx, va_gc > * used_rtx_array
static vec< tree, va_gc > * incomplete_types
static vec< tree, va_gc > * decl_scope_table
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 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_str_dwo_section
static sectiondebug_str_offsets_section
static sectiondebug_ranges_section
static sectiondebug_frame_section
static vec< dw_fde_ref, va_gc > * fde_vec
static htab_t debug_str_hash
static htab_t skeleton_debug_str_hash
static int dw2_string_counter
static bool have_multiple_function_sections = false
static bool text_section_used = false
static bool cold_text_section_used = false
static sectioncold_text_section
static rtx current_unit_personality
static vec< deferred_locations,
va_gc > * 
deferred_locations_list
struct gcc_debug_hooks dwarf2_debug_hooks
static unsigned long next_die_offset
static dw_die_ref single_comp_unit_die
static comdat_type_nodecomdat_type_list
static limbo_die_nodelimbo_die_list
static limbo_die_nodedeferred_asm_name
static htab_t file_table
static htab_t decl_die_table
static htab_t common_block_die_table
static htab_t 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 vec< dw_die_refblock_map
static htab_t cached_dw_loc_list_table
static dw_die_refabbrev_die_table
static unsigned abbrev_die_table_allocated
static unsigned abbrev_die_table_in_use
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_p, 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 dw_ranges_ref ranges_table
static unsigned ranges_table_allocated
static unsigned ranges_table_in_use
static dw_ranges_by_label_ref ranges_by_label
static unsigned ranges_by_label_allocated
static unsigned ranges_by_label_in_use
static bool have_location_lists
static unsigned int loclabel_num
static unsigned int poc_label_num
static int current_function_has_inlines
static struct dwarf_file_datalast_emitted_file
static int label_num
static struct dwarf_file_datafile_table_last_lookup
static vec< die_arg_entry,
va_gc > * 
tmpl_value_parm_die_table
static vec< tree, va_gc > * generic_type_instances
static HOST_WIDE_INT 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 const char *(* demangle_name_func )(const char *)
static htab_t addr_index_table
static int print_indent
static const char * comdat_symbol_id
static unsigned int comdat_symbol_number
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

Typedef Documentation

The comdat type node structure.   
typedef const char* dchar_p
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.   
typedef struct dw_attr_struct dw_attr_node
Each DIE attribute has a field specifying the attribute kind,
   a link to the next attribute in the chain, and an attribute value.
   Attributes are typically linked below the DIE they modify.   
typedef struct dw_attr_struct* dw_attr_ref
Define typedefs here to avoid circular dependencies.   
Location lists are ranges + location descriptions for that range,
   so you can track variables that are in different places over
   their entire life.   
typedef long int dw_offset
Various DIE's use offsets relative to the beginning of the
   .debug_info section to refer to each other.   
The limbo die list structure.   
typedef struct macinfo_struct macinfo_entry
A structure to hold a macinfo entry.   
typedef struct pubname_struct pubname_entry
The pubname structure  
typedef struct pubname_struct* pubname_ref

Enumeration Type Documentation

enum ate_kind
Describe an entry into the .debug_addr section.   
Enumerator:
ate_kind_rtx 
ate_kind_rtx_dtprel 
ate_kind_label 
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 
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 

Function Documentation

static dw_die_ref add_abstract_origin_attribute ( )
inlinestatic
Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
   by looking in either the type declaration or object declaration
   equate table.   

References add_AT_die_ref(), decl_function_context(), dwarf2out_abstract_function(), lookup_decl_die(), and lookup_type_die().

static void add_accessibility_attribute ( )
static
static addr_table_entry* add_addr_table_entry ( void *  ,
enum  ate_kind 
)
static
static addr_table_entry* add_addr_table_entry ( )
static
Add attr to the address table entry to the table.  Defer setting an
   index until output time.   

References addr_index_table, addr_table_entry_do_hash(), addr_table_entry_eq(), init_addr_table_entry(), and addr_table_entry_struct::refcount.

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, dw_val_struct::v, dw_val_struct::dw_val_struct_union::val_addr, dw_val_struct::val_class, and dw_val_struct::val_entry.

Referenced by add_name_and_src_coords_attributes(), dwarf2out_finish(), and gen_call_site_die().

static void add_AT_data8 ( dw_die_ref  ,
enum  dwarf_attribute,
unsigned char *   
)
static
static void add_AT_data8 ( dw_die_ref  die,
enum dwarf_attribute  attr_kind,
unsigned char  data8[8] 
)
inlinestatic
static void add_AT_double ( dw_die_ref  die,
enum dwarf_attribute  attr_kind,
HOST_WIDE_INT  high,
unsigned HOST_WIDE_INT  low 
)
inlinestatic
static void add_AT_fde_ref ( dw_die_ref  ,
enum  dwarf_attribute,
unsigned   
)
static
static void add_AT_int ( dw_die_ref  ,
enum  dwarf_attribute,
HOST_WIDE_INT   
)
static
static void add_AT_lineptr ( dw_die_ref  die,
enum dwarf_attribute  attr_kind,
const char *  label 
)
inlinestatic
static void add_AT_loc_list ( dw_die_ref  ,
enum  dwarf_attribute,
dw_loc_list_ref   
)
static
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(), dw_loc_list_struct::expr, and single_element_loc_list_p().

Referenced by add_bound_info(), add_location_or_const_value_attribute(), gen_array_type_die(), gen_subprogram_die(), and gen_variable_die().

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, dw_val_struct::v, dw_val_struct::val_class, dw_val_struct::val_entry, and dw_val_struct::dw_val_struct_union::val_lbl_id.

Referenced by add_high_low_attributes(), dwarf2out_finish(), and gen_subprogram_die().

static void add_AT_macptr ( dw_die_ref  die,
enum dwarf_attribute  attr_kind,
const char *  label 
)
inlinestatic
static void add_AT_offset ( dw_die_ref  die,
enum dwarf_attribute  attr_kind,
unsigned HOST_WIDE_INT  offset 
)
inlinestatic
static void add_AT_pubnames ( )
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(), and dwarf2out_finish().

static void add_AT_range_list ( dw_die_ref  ,
enum  dwarf_attribute,
unsigned  long,
bool   
)
static
static void add_AT_range_list ( dw_die_ref  die,
enum dwarf_attribute  attr_kind,
long unsigned int  offset,
bool  force_direct 
)
static
static void add_AT_specification ( dw_die_ref  ,
dw_die_ref   
)
static
static void add_AT_specification ( )
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(), and die_struct::die_definition.

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
static void add_bit_offset_attribute ( dw_die_ref  ,
tree   
)
static

Referenced by gen_field_die().

static void add_bit_offset_attribute ( )
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 add_AT_int(), add_AT_unsigned(), bit_position(), field_byte_offset(), host_integerp(), int_bit_position(), simple_type_size_in_bits(), and tree_low_cst().

static void add_bit_size_attribute ( dw_die_ref  ,
tree   
)
static

Referenced by gen_field_die().

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

References add_AT_unsigned(), host_integerp(), and tree_low_cst().

static void add_bound_info ( dw_die_ref  ,
enum  dwarf_attribute,
tree   
)
static
static void add_byte_size_attribute ( dw_die_ref  ,
tree   
)
static
static void add_byte_size_attribute ( )
static
static void add_call_src_coords_attributes ( )
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.   

References add_AT_file(), add_AT_unsigned(), expand_location(), and lookup_filename().

Referenced by gen_inlined_subroutine_die().

static void add_calling_convention_attribute ( dw_die_ref  ,
tree   
)
static

Referenced by gen_subprogram_die().

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

References add_AT_flag(), add_AT_unsigned(), is_fortran(), and targetm.

static void add_child_die ( )
static
Add a CHILD_DIE as the last child of DIE.   

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

static void add_comp_dir_attribute ( dw_die_ref  )
static
static void add_comp_dir_attribute ( )
static
Generate a DW_AT_comp_dir attribute for DIE.   

References add_AT_string(), and comp_dir_string().

static bool add_const_value_attribute ( dw_die_ref  ,
rtx   
)
static
static bool add_const_value_attribute ( )
static
Attach a DW_AT_const_value attribute for a variable or a parameter which
   does not have a "location" either in memory or in a register.  These
   things can arise in GNU C when a constant is passed as an actual parameter
   to an inlined function.  They can also arise in C++ where declared
   constants do not necessarily get memory "homes".   

References add_AT_double(), add_AT_int(), add_AT_loc(), add_AT_string(), add_AT_unsigned(), add_AT_vec(), add_const_value_attribute(), add_loc_descr(), const_ok_for_output(), dtprel_false, insert_double(), insert_float(), insert_int(), new_addr_loc_descr(), new_loc_descr(), resolve_one_addr(), rtx_to_double_int(), double_int::to_shwi(), and vec_safe_push().

static void add_data_member_location_attribute ( dw_die_ref  ,
tree   
)
static
static void add_data_member_location_attribute ( )
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.)   

References add_AT_int(), add_AT_loc(), add_AT_unsigned(), add_loc_descr(), field_byte_offset(), int_loc_descriptor(), is_cxx(), new_loc_descr(), offset, and tree_low_cst().

static void add_descr_info_field ( dw_die_ref  die,
enum dwarf_attribute  attr,
tree  val,
tree  base_decl 
)
static
static void add_dwarf_attr ( )
inlinestatic
Add an attribute/value pair to a DIE.   

References die_struct::die_attr, vec_safe_push(), and vec_safe_reserve().

static void add_enumerator_pubname ( const char *  ,
dw_die_ref   
)
static

Referenced by add_pubtype().

static void add_enumerator_pubname ( )
static
Add an enumerator to the pubnames section.   

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

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, gen_type_die(), lookup_type_die(), and lang_hooks::types.

Referenced by gen_array_type_die(), gen_enumeration_type_die(), gen_struct_or_union_type_die(), and modified_type_die().

static void add_high_low_attributes ( )
inlinestatic
static void add_linkage_attr ( )
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 add_AT_string().

Referenced by add_linkage_name(), dwarf2out_finish(), and gen_typedef_die().

static void add_linkage_name ( )
static
static void add_loc_descr_op_piece ( dw_loc_descr_ref ,
int   
)
static
static void add_loc_descr_op_piece ( )
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_struct::dw_loc_next, and new_loc_descr().

static void add_loc_descr_to_each ( )
static
static void add_loc_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 inolve 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(), and dw_loc_list_struct::expr.

Referenced by loc_list_for_address_of_addr_expr_of_indirect_ref(), and loc_list_from_tree().

static bool add_location_or_const_value_attribute ( dw_die_ref  die,
tree  decl,
bool  cache_p,
enum dwarf_attribute  attr 
)
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, decl_by_reference_p(), cached_dw_loc_list_def::decl_id, dw_loc_list_struct::dw_loc_next, var_loc_list_def::first, var_loc_node::loc, cached_dw_loc_list_def::loc_list, loc_list_from_tree(), lookup_decl_loc(), var_loc_node::next, rtl_for_decl_location(), and tree_add_const_value_attribute_for_decl().

Referenced by dwarf2out_finish(), gen_formal_parameter_die(), and gen_variable_die().

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

References add_AT_addr(), add_linkage_name(), add_name_attribute(), add_src_coords_attributes(), decl_name(), dwarf2_name(), and vec_safe_push().

static void add_name_attribute ( )
static
Generate a DW_AT_name attribute given some string value to be included as
   the value of the attribute.   

References add_AT_string(), and demangle_name_func.

static void add_prototyped_attribute ( dw_die_ref  ,
tree   
)
static
static void add_prototyped_attribute ( )
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 add_AT_flag(), comp_unit_die(), get_AT_unsigned(), and prototype_p().

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

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

static void add_pure_or_virtual_attribute ( dw_die_ref  ,
tree   
)
static

Referenced by gen_subprogram_die().

static void add_pure_or_virtual_attribute ( )
inlinestatic
We do not currently support the pure_virtual attribute.   

References add_AT_die_ref(), add_AT_loc(), add_AT_unsigned(), DINFO_LEVEL_TERSE, host_integerp(), lookup_type_die(), new_loc_descr(), and tree_low_cst().

static unsigned int add_ranges ( const_tree  )
static
static unsigned int add_ranges ( )
static
Add a new entry to .debug_ranges corresponding to a block, or a
   range terminator if BLOCK is NULL.   

References add_ranges_num().

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(), dw_ranges_by_label_struct::begin, dw_ranges_by_label_struct::end, memset(), offset, and ranges_by_label_in_use.

Referenced by dwarf2out_finish(), and gen_subprogram_die().

static unsigned int add_ranges_num ( int  )
static

Referenced by add_ranges(), and add_ranges_by_labels().

static unsigned int add_ranges_num ( )
static
Add a new entry to .debug_ranges.  Return the offset at which it
   was placed.   

References memset(), dw_ranges_struct::num, and ranges_table_in_use.

static void add_sibling_attributes ( dw_die_ref  )
static
static void add_sibling_attributes ( )
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, and die_struct::die_sib.

static void add_src_coords_attributes ( )
static
Add source coordinate attributes for the given decl.   

References add_AT_file(), add_AT_unsigned(), expand_location(), and lookup_filename().

static void add_subscript_info ( dw_die_ref  ,
tree  ,
bool   
)
static

Referenced by gen_array_type_die().

static void add_subscript_info ( )
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.
   Note that the block of subscript information for an array type also
   includes information about the element type of the given array type.   

References add_bound_info(), add_type_attribute(), is_fortran(), and new_die().

static void add_top_level_skeleton_die_attrs ( )
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(), and comp_dir_string().

Referenced by dwarf2out_finish(), and get_skeleton_type_unit().

static void add_type_attribute ( dw_die_ref  object_die,
tree  type,
int  decl_const,
int  decl_volatile,
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', and adds a DW_AT_type attribute below the given die.   

References add_AT_die_ref(), and modified_type_die().

Referenced by add_bound_info(), add_subscript_info(), gen_array_type_die(), gen_const_die(), gen_descr_array_type_die(), gen_entry_point_die(), gen_field_die(), gen_formal_parameter_die(), gen_inheritance_die(), gen_pointer_type_die(), gen_ptr_to_mbr_type_die(), gen_reference_type_die(), gen_subprogram_die(), gen_subroutine_type_die(), gen_typedef_die(), gen_variable_die(), and generic_parameter_die().

static struct var_loc_node* add_var_loc_to_decl ( tree  ,
rtx  ,
const char *   
)
staticread

Referenced by dwarf2out_var_location().

static dw_loc_descr_ref address_of_int_loc_descriptor ( )
static
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 copy(), decl_piece_bitsize(), decl_piece_node(), decl_piece_varloc_ptr(), and free_EXPR_LIST_node().

Referenced by add_var_loc_to_decl().

static void append_entry_to_tmpl_value_parm_die_table ( dw_die_ref  ,
tree   
)
static

Referenced by generic_parameter_die().

static void append_entry_to_tmpl_value_parm_die_table ( )
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.   

References die_arg_entry_struct::arg, die_arg_entry_struct::die, vec_alloc(), and vec_safe_push().

static void assign_symbol_names ( dw_die_ref  )
static
static void assign_symbol_names ( )
static
static rtx AT_addr ( dw_attr_ref  )
inlinestatic
static rtx AT_addr ( )
inlinestatic
static enum dw_val_class AT_class ( )
inlinestatic
static struct dwarf_file_data* AT_file ( )
staticread
static unsigned AT_flag ( dw_attr_ref  )
inlinestatic

Referenced by get_AT_flag(), output_die(), and print_die().

static unsigned int AT_index ( dw_attr_ref  )
inlinestatic
static unsigned int AT_index ( )
inlinestatic
Return the index for any attribute that will be referenced with a
   DW_FORM_GNU_addr_index or DW_FORM_GNU_str_index.  String indices
   are stored in dw_attr_val.v.val_str for reference counting
   pruning.   

References AT_class(), dw_attr_struct::dw_attr_val, dw_val_class_str, indirect_string_node::index, addr_table_entry_struct::index, dw_val_struct::v, dw_val_struct::val_entry, and dw_val_struct::dw_val_struct_union::val_str.

static HOST_WIDE_INT AT_int ( dw_attr_ref  )
inlinestatic

Referenced by output_die(), print_die(), and size_of_die().

static const char* AT_lbl ( dw_attr_ref  )
inlinestatic
static int AT_ref_external ( dw_attr_ref  )
inlinestatic
static const char* AT_string ( dw_attr_ref  )
inlinestatic
static enum dwarf_form AT_string_form ( dw_attr_ref  )
static

Referenced by size_of_die(), and value_format().

static enum dwarf_form AT_string_form ( )
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 AT_class(), dw_attr_struct::dw_attr_val, dw_val_class_str, find_string_form(), dw_val_struct::v, and dw_val_struct::dw_val_struct_union::val_str.

static unsigned HOST_WIDE_INT AT_unsigned ( dw_attr_ref  )
inlinestatic
static const char* AT_vms_delta1 ( dw_attr_ref  )
inlinestatic

Referenced by output_die(), and print_die().

static const char* AT_vms_delta2 ( dw_attr_ref  )
inlinestatic

Referenced by output_die(), and print_die().

static void attr_checksum ( dw_attr_ref  ,
struct md5_ctx *  ,
int *   
)
static

Referenced by die_checksum().

static int base_type_cmp ( )
static
Comparison function for sorting marked base types.   

References die_struct::die_mark, and get_AT_unsigned().

Referenced by move_marked_base_types().

static dw_die_ref base_type_die ( tree  )
static

Referenced by modified_type_die().

static dw_die_ref base_type_die ( )
static
Given a pointer to a tree node for some base type, return a pointer to
   a DIE that describes the given type.

   This routine must only be called for GCC type nodes that correspond to
   Dwarf base (fundamental) types.   

References add_AT_unsigned(), add_pubtype(), comp_unit_die(), int_size_in_bytes(), and new_die().

static dw_die_ref base_type_for_mode ( )
static
Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
   if possible, NULL otherwise.   

References comp_unit_die(), die_struct::die_tag, lookup_type_die(), modified_type_die(), lang_hooks_for_types::type_for_mode, and lang_hooks::types.

Referenced by convert_descriptor_to_mode(), mem_loc_descriptor(), minmax_loc_descriptor(), and scompare_loc_descriptor().

static dw_loc_descr_ref based_loc_descr ( rtx  reg,
HOST_WIDE_INT  offset,
enum var_init_status  initialized 
)
static
static void break_out_comdat_types ( dw_die_ref  )
static
static void break_out_includes ( dw_die_ref  )
static

Referenced by dwarf2out_finish().

static dw_loc_descr_ref bswap_loc_descriptor ( rtx  rtl,
enum machine_mode  mode,
enum 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(), dw_loc_descr_struct::dw_loc_oprnd1, dw_val_class_loc, mem_loc_descriptor(), new_loc_descr(), dw_val_struct::v, dw_val_struct::val_class, dw_val_struct::dw_val_struct_union::val_loc, and VAR_INIT_STATUS_INITIALIZED.

Referenced by mem_loc_descriptor().

static void build_abbrev_table ( )
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 abbrev_die_table_in_use, AT_class(), AT_ref(), 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, lookup_external_ref(), memset(), set_AT_ref_external(), external_ref::stub, value_format(), and vec_safe_length().

Referenced by output_comdat_type_unit(), and output_comp_unit().

struct dw_loc_descr_struct* build_cfa_aligned_loc ( dw_cfa_location cfa,
HOST_WIDE_INT  offset,
HOST_WIDE_INT  alignment 
)
read
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(), cfa_loc::indirect, int_loc_descriptor(), loc_descr_plus_const(), new_loc_descr(), new_reg_loc_descr(), and cfa_loc::reg.

Referenced by reg_save().

struct dw_loc_descr_struct* build_cfa_loc ( )
read
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(), cfa_loc::base_offset, dw_loc_descr_struct::dw_loc_oprnd1, dw_val_class_const, cfa_loc::indirect, new_loc_descr(), new_reg_loc_descr(), cfa_loc::offset, cfa_loc::reg, dw_val_struct::val_class, and dw_val_struct::val_entry.

Referenced by convert_cfa_to_fb_loc_list(), and def_cfa_0().

static int cached_dw_loc_list_table_eq ( )
static
Return nonzero if decl_id of cached_dw_loc_list X is the same as
   UID of decl *Y.   

Referenced by dwarf2out_init().

static hashval_t cached_dw_loc_list_table_hash ( )
static
Returns a hash value for X (which really is a cached_dw_loc_list_list).   

Referenced by dwarf2out_init().

static void calc_base_type_die_sizes ( )
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 comp_unit_die(), die_struct::die_abbrev, die_struct::die_child, die_struct::die_offset, die_struct::die_sib, and size_of_die().

Referenced by get_base_type_offset().

static void calc_die_sizes ( dw_die_ref  )
static
static void calc_die_sizes ( )
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, next_die_offset, and size_of_die().

static HOST_WIDE_INT ceiling ( HOST_WIDE_INT  ,
unsigned  int 
)
static
static HOST_WIDE_INT ceiling ( )
inlinestatic
Given a value, round it up to the lowest multiple of `boundary'
   which is not less than the value itself.   
static void checksum_die_context ( dw_die_ref  ,
struct md5_ctx *   
)
static
static void checksum_die_context ( )
static
Checksum the context of the DIE.  This adds the names of any
   surrounding namespaces or structures to the checksum.   

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

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

Referenced by optimize_macinfo_range().

static void checksum_uleb128 ( )
static
Calculate the checksum of a number in unsigned LEB128 format.   
static int class_or_namespace_scope_p ( dw_die_ref  )
inlinestatic
static int class_or_namespace_scope_p ( )
inlinestatic
Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
   whether or not to treat a DIE in this context as a declaration.   

References class_scope_p(), and die_struct::die_tag.

static int class_scope_p ( dw_die_ref  )
inlinestatic
static int class_scope_p ( )
inlinestatic
Returns nonzero if CONTEXT_DIE is a class.   

References die_struct::die_tag.

static dw_die_ref clone_as_declaration ( dw_die_ref  )
static
static dw_die_ref clone_die ( )
static
Make a clone of DIE.   

References add_dwarf_attr(), die_struct::die_attr, and die_struct::die_tag.

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

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

static dw_die_ref clone_tree_hash ( )
static
Like clone_tree, but additionally enter all the children into
   the hash table decl_table.   

References add_child_die(), clone_die(), decl_table_entry::copy, hash_table< Descriptor, Allocator >::find_slot_with_hash(), and decl_table_entry::orig.

Referenced by copy_decls_walk().

static dw_loc_descr_ref clz_loc_descriptor ( rtx  rtl,
enum machine_mode  mode,
enum 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(), dw_loc_descr_struct::dw_loc_oprnd1, dw_val_class_loc, HOST_BITS_PER_WIDE_INT, immed_double_const(), mem_loc_descriptor(), new_loc_descr(), dw_val_struct::v, dw_val_struct::val_class, dw_val_struct::dw_val_struct_union::val_loc, and VAR_INIT_STATUS_INITIALIZED.

Referenced by mem_loc_descriptor().

static void collect_checksum_attributes ( struct checksum_attributes ,
dw_die_ref   
)
static

Referenced by die_checksum_ordered().

static void collect_checksum_attributes ( )
static
Collect the attributes that we will want to use for the checksum.   

References checksum_attributes::at_accessibility, checksum_attributes::at_address_class, checksum_attributes::at_allocated, checksum_attributes::at_artificial, checksum_attributes::at_associated, checksum_attributes::at_binary_scale, checksum_attributes::at_bit_offset, checksum_attributes::at_bit_size, checksum_attributes::at_bit_stride, checksum_attributes::at_byte_size, checksum_attributes::at_byte_stride, checksum_attributes::at_const_value, checksum_attributes::at_containing_type, checksum_attributes::at_count, checksum_attributes::at_data_location, checksum_attributes::at_data_member_location, checksum_attributes::at_decimal_scale, checksum_attributes::at_decimal_sign, checksum_attributes::at_default_value, checksum_attributes::at_digit_count, checksum_attributes::at_discr, checksum_attributes::at_discr_list, checksum_attributes::at_discr_value, checksum_attributes::at_encoding, checksum_attributes::at_endianity, checksum_attributes::at_explicit, checksum_attributes::at_friend, checksum_attributes::at_is_optional, checksum_attributes::at_location, checksum_attributes::at_lower_bound, checksum_attributes::at_mutable, checksum_attributes::at_name, checksum_attributes::at_ordering, checksum_attributes::at_picture_string, checksum_attributes::at_prototyped, checksum_attributes::at_segment, checksum_attributes::at_small, checksum_attributes::at_string_length, checksum_attributes::at_threads_scaled, checksum_attributes::at_type, checksum_attributes::at_upper_bound, checksum_attributes::at_use_location, checksum_attributes::at_use_UTF8, checksum_attributes::at_variable_parameter, checksum_attributes::at_virtuality, checksum_attributes::at_visibility, checksum_attributes::at_vtable_elem_location, die_struct::die_attr, and dw_attr_struct::dw_attr.

static int common_block_die_table_eq ( const void *  ,
const void *   
)
static

Referenced by gen_variable_die().

static int common_block_die_table_eq ( )
static
Return nonzero if decl_id and die_parent of die_struct X is the same
   as decl_id and die_parent of die_struct Y.   

References die_struct::decl_id, and die_struct::die_parent.

static hashval_t common_block_die_table_hash ( const void *  )
static

Referenced by gen_variable_die().

static hashval_t common_block_die_table_hash ( )
static
Returns a hash value for X (which really is a die_struct).   

References die_struct::decl_id, and die_struct::die_parent.

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

References get_src_pwd(), remap_debug_filename(), and strlen().

Referenced by add_comp_dir_attribute(), and add_top_level_skeleton_die_attrs().

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(), and new_loc_descr().

Referenced by scompare_loc_descriptor(), and ucompare_loc_descriptor().

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

References compare_loc_operands(), dw_loc_descr_struct::dtprel, and dw_loc_descr_struct::dw_loc_next.

Referenced by loc_list_hasher::equal().

static void compute_frame_pointer_to_fb_displacement ( )
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 current_function_decl, eliminate_regs(), ira_use_lra_p, lra_eliminate_regs(), and offset.

Referenced by gen_subprogram_die().

static void compute_section_prefix ( dw_die_ref  )
static

Referenced by break_out_includes().

static void compute_section_prefix ( )
static
Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
   children, and set comdat_symbol_id accordingly.   

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

static dw_loc_descr_ref concat_loc_descriptor ( rtx  ,
rtx  ,
enum  var_init_status 
)
static

Referenced by loc_descriptor().

static dw_loc_descr_ref concat_loc_descriptor ( )
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(), loc_descriptor(), new_loc_descr(), VAR_INIT_STATUS_INITIALIZED, and VAR_INIT_STATUS_UNINITIALIZED.

static dw_loc_descr_ref concatn_loc_descriptor ( )
static
Return a descriptor that describes the concatenation of N
   locations.   

References add_loc_descr(), add_loc_descr_op_piece(), loc_descriptor(), new_loc_descr(), VAR_INIT_STATUS_INITIALIZED, and VAR_INIT_STATUS_UNINITIALIZED.

Referenced by loc_descriptor().

static bool const_ok_for_output ( )
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 const_ok_for_output_1(), and for_each_rtx().

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

static int const_ok_for_output_1 ( )
static
Helper function for const_ok_for_output, called either directly
   or via for_each_rtx.   

References current_function_decl, expansion_failed(), get_pool_constant_mark(), inform(), marked, targetm, and TLS_MODEL_NONE.

Referenced by const_ok_for_output().

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

References floor_log2(), and log().

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

Referenced by add_var_loc_to_decl().

static int contains_subprogram_definition ( )
static
Return non-zero if this DIE contains a defining declaration of a
   subprogram.   

References die_struct::die_tag, and is_declaration_die().

Referenced by should_move_die_to_comdat().

static dw_loc_list_ref convert_cfa_to_fb_loc_list ( )
static
Convert the CFI instructions for the current function into a
   location list.  This is used for DW_AT_frame_base when we targeting
   a dwarf2 consumer that does not support the dwarf3
   DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
   expressions.   

References build_cfa_loc(), cfa_equal_p(), cfun, cie_cfi_vec, current_function_decl, dw_cfi_oprnd_struct::dw_cfi_addr, dw_cfi_struct::dw_cfi_opc, dw_cfi_struct::dw_cfi_oprnd1, dw_fde_struct::dw_fde_begin, dw_fde_struct::dw_fde_cfi, dw_fde_struct::dw_fde_end, dw_fde_struct::dw_fde_second_begin, dw_fde_struct::dw_fde_second_end, dw_fde_struct::dw_fde_switch_cfi_index, dw_loc_list_struct::dw_loc_next, function::fde, gen_llsym(), lookup_cfa_1(), memset(), new_loc_list(), cfa_loc::reg, and secname_for_decl().

Referenced by gen_subprogram_die().

static dw_loc_descr_ref convert_descriptor_to_mode ( )
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_struct::dw_val_struct_union::dw_val_die_union::die, dw_loc_descr_struct::dw_loc_oprnd1, dw_val_class_die_ref, dw_val_struct::dw_val_struct_union::dw_val_die_union::external, new_loc_descr(), dw_val_struct::v, dw_val_struct::val_class, and dw_val_struct::dw_val_struct_union::val_die_ref.

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

static dw_die_ref copy_ancestor_tree ( )
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(), copy(), decl_table_entry::copy, die_struct::die_parent, hash_table< Descriptor, Allocator >::find_slot_with_hash(), get_AT_ref(), hash_table< Descriptor, Allocator >::is_created(), is_unit_die(), and decl_table_entry::orig.

Referenced by copy_declaration_context(), and copy_decls_walk().

static dw_die_ref copy_declaration_context ( dw_die_ref  ,
dw_die_ref   
)
static
static dw_die_ref copy_declaration_context ( )
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 add_AT_specification(), add_child_die(), add_dwarf_attr(), clone_tree(), die_struct::comdat_type_p, copy_ancestor_tree(), die_struct::die_attr, die_struct::die_id, die_struct::die_parent, die_struct::die_symbol_or_type_node::die_type_node, dw_attr_struct::dw_attr, get_AT_ref(), is_unit_die(), and remove_AT().

static void copy_decls_for_unworthy_types ( dw_die_ref  )
static

Referenced by dwarf2out_finish().

static void copy_decls_for_unworthy_types ( )
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 copy_decls_walk(), hash_table< Descriptor, Allocator >::create(), decl_table, hash_table< Descriptor, Allocator >::dispose(), mark_dies(), and unmark_dies().

static dw_loc_descr_ref cst_pool_loc_descr ( )
static
LOC is constant expression.  Try a luck, look it up in constant
   pool and return its loc_descr of its address.   

References expansion_failed(), get_address_mode(), lookup_constant_def(), mem_loc_descriptor(), and VAR_INIT_STATUS_INITIALIZED.

Referenced by loc_list_from_tree().

static unsigned int dbx_reg_number ( const_rtx  )
static
static unsigned int dbx_reg_number ( )
static
Return the DBX register number described by a given RTL node.   
DEBUG_FUNCTION void debug ( )

References print_die().

DEBUG_FUNCTION void debug_dwarf ( void  )
Print all DWARF information collected for the compilation unit.
   This routine is a debugging aid only.   

References comp_unit_die(), and print_die().

DEBUG_FUNCTION void debug_dwarf_die ( )
Print the information collected for a given DIE.   

References print_die().

static hashval_t debug_str_do_hash ( const void *  )
static
static hashval_t debug_str_do_hash ( )
static
Hash and equality functions for debug_str_hash.   
static int debug_str_eq ( const void *  ,
const void *   
)
static
static int debug_str_eq ( )
static
static bool decl_by_reference_p ( )
static
Return true when DECL_BY_REFERENCE is defined and set for DECL.   

Referenced by add_location_or_const_value_attribute(), gen_decl_die(), gen_formal_parameter_die(), and gen_variable_die().

static tree decl_class_context ( tree  )
static
static tree decl_class_context ( )
static
Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
   of a virtual function may refer to a base class, so we check the 'this'
   parameter.   
static int decl_die_table_eq ( const void *  ,
const void *   
)
static

Referenced by dwarf2out_init().

static int decl_die_table_eq ( )
static
Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.   
static hashval_t decl_die_table_hash ( const void *  )
static

Referenced by dwarf2out_init().

static hashval_t decl_die_table_hash ( )
static
Returns a hash value for X (which really is a die_struct).   
static int decl_loc_table_eq ( const void *  ,
const void *   
)
static

Referenced by dwarf2out_init().

static int decl_loc_table_eq ( )
static
Return nonzero if decl_id of var_loc_list X is the same as
   UID of decl *Y.   
static hashval_t decl_loc_table_hash ( const void *  )
static

Referenced by dwarf2out_init().

static hashval_t decl_loc_table_hash ( )
static
Returns a hash value for X (which really is a var_loc_list).   
static int decl_piece_bitsize ( )
static
Return how many bits covers PIECE EXPR_LIST.   

Referenced by add_var_loc_to_decl(), adjust_piece_list(), and dw_sra_loc_expr().

static rtx decl_piece_node ( )
static
Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
   Next is the chain of following piece nodes.   

References alloc_EXPR_LIST().

Referenced by adjust_piece_list(), and construct_piece_list().

static rtx* decl_piece_varloc_ptr ( )
static
Return pointer to the location of location note in PIECE EXPR_LIST.   

Referenced by add_var_loc_to_decl(), adjust_piece_list(), and dw_sra_loc_expr().

static const char* decl_start_label ( tree  )
static

Referenced by gen_entry_point_die().

static const char* decl_start_label ( )
static
Get the decl's label, as described by its RTL. This may be different
   from the DECL_NAME name used in the source file.   
static tree decl_ultimate_origin ( )
static
Determine the "ultimate origin" of a decl.  The decl may be an inlined
   instance of an inlined instance of a decl which is local to an inline
   function, so we have to trace all of the way back through the origin chain
   to find out what sort of node actually served as the original seed for the
   given block.   
static dw_die_ref declare_in_namespace ( tree  ,
dw_die_ref   
)
static
static dw_die_ref declare_in_namespace ( )
static
Emit a declaration DIE for THING (which is either a DECL or a tagged
   type) within its namespace, if appropriate.

   For compatibility with older debuggers, namespace DIEs only contain
   declarations; all definitions are emitted at CU scope.   

References DINFO_LEVEL_TERSE, gen_decl_die(), gen_type_die(), is_fortran(), and setup_namespace_context().

static void decls_for_scope ( tree  ,
dw_die_ref  ,
int   
)
static
static void decls_for_scope ( )
static
Generate all of the decls declared within a given scope and (recursively)
   all of its sub-blocks.   

References DINFO_LEVEL_TERSE, gen_block_die(), and process_scope_var().

static void defer_location ( )
static
Add VARIABLE and DIE into deferred locations list.   

References deferred_locations_list, deferred_locations_struct::die, deferred_locations_struct::variable, and vec_safe_push().

Referenced by gen_variable_die().

static void die_checksum ( dw_die_ref  ,
struct md5_ctx *  ,
int *   
)
static
static void die_checksum ( )
static
Calculate the checksum of a DIE.   

References attr_checksum(), die_struct::die_attr, die_checksum(), die_struct::die_mark, and die_struct::die_tag.

static void die_checksum_ordered ( dw_die_ref  ,
struct md5_ctx *  ,
int *   
)
static
static void die_checksum_ordered ( )
static
Calculate the checksum of a DIE, using an ordered subset of attributes.   

References checksum_attributes::at_accessibility, checksum_attributes::at_address_class, checksum_attributes::at_allocated, checksum_attributes::at_artificial, checksum_attributes::at_associated, checksum_attributes::at_binary_scale, checksum_attributes::at_bit_offset, checksum_attributes::at_bit_size, checksum_attributes::at_bit_stride, checksum_attributes::at_byte_size, checksum_attributes::at_byte_stride, checksum_attributes::at_const_value, checksum_attributes::at_containing_type, checksum_attributes::at_count, checksum_attributes::at_data_location, checksum_attributes::at_data_member_location, checksum_attributes::at_decimal_scale, checksum_attributes::at_decimal_sign, checksum_attributes::at_default_value, checksum_attributes::at_digit_count, checksum_attributes::at_discr, checksum_attributes::at_discr_list, checksum_attributes::at_discr_value, checksum_attributes::at_encoding, checksum_attributes::at_endianity, checksum_attributes::at_explicit, checksum_attributes::at_friend, checksum_attributes::at_is_optional, checksum_attributes::at_location, checksum_attributes::at_lower_bound, checksum_attributes::at_mutable, checksum_attributes::at_name, checksum_attributes::at_ordering, checksum_attributes::at_picture_string, checksum_attributes::at_prototyped, checksum_attributes::at_segment, checksum_attributes::at_small, AT_string(), checksum_attributes::at_string_length, checksum_attributes::at_threads_scaled, checksum_attributes::at_type, checksum_attributes::at_upper_bound, checksum_attributes::at_use_location, checksum_attributes::at_use_UTF8, checksum_attributes::at_variable_parameter, checksum_attributes::at_virtuality, checksum_attributes::at_visibility, checksum_attributes::at_vtable_elem_location, collect_checksum_attributes(), die_checksum_ordered(), die_struct::die_child, die_struct::die_mark, die_struct::die_sib, die_struct::die_tag, get_AT(), get_AT_ref(), is_template_instantiation(), is_type_die(), and memset().

static void die_odr_checksum ( )
static
Add a type name and tag to a hash.   

Referenced by generate_type_signature().

static double_int double_int_type_size_in_bits ( )
inlinestatic
Similarly, but return a double_int instead of UHWI.   

References double_int::from_uhwi(), and tree_to_double_int().

Referenced by field_byte_offset().

static int dump_struct_debug ( tree  type,
enum debug_info_usage  usage,
enum debug_struct_file  criterion,
int  generic,
int  matches,
int  result 
)
static
static enum dwarf_location_atom dw_addr_op ( )
inlinestatic
Return the operator to use for an address of a variable.  For dtprel_true, we
   use DW_OP_const*.  For regular variables, which need both link-time
   relocation and consumer-level relocation (e.g., to account for shared objects
   loaded at a random address), we use DW_OP_addr*.   

References dtprel_true.

Referenced by new_addr_loc_descr().

enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc ( )
Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.   

References dw_cfi_oprnd_addr, dw_cfi_oprnd_loc, dw_cfi_oprnd_offset, dw_cfi_oprnd_reg_num, and dw_cfi_oprnd_unused.

Referenced by cfi_equal_p().

enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc ( )
Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.   

References dw_cfi_oprnd_loc, dw_cfi_oprnd_offset, dw_cfi_oprnd_reg_num, and dw_cfi_oprnd_unused.

Referenced by cfi_equal_p().

static dw_loc_descr_ref dw_loc_list_1 ( tree  loc,
rtx  varloc,
int  want_address,
enum var_init_status  initialized 
)
static
Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
   for VARLOC.   

References add_loc_descr(), avoid_constant_pool_reference(), expansion_failed(), get_address_mode(), int_size_in_bytes(), loc_descriptor(), mem_loc_descriptor(), and new_loc_descr().

Referenced by dw_loc_list(), and dw_sra_loc_expr().

static dw_loc_descr_ref dw_sra_loc_expr ( )
static
Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
   for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.   

References decl_piece_bitsize(), decl_piece_varloc_ptr(), dw_loc_list_1(), dw_loc_descr_struct::dw_loc_next, dw_loc_descr_struct::dw_loc_oprnd1, host_integerp(), initialized, new_loc_descr_op_bit_piece(), offset, tree_low_cst(), dw_val_struct::v, and dw_val_struct::dw_val_struct_union::val_unsigned.

Referenced by dw_loc_list().

static bool dw_val_equal_p ( )
static
Compare two location operands for exact equality.   

References dw_vec_struct::array, dw_val_struct::dw_val_struct_union::dw_val_die_union::die, dw_val_class_addr, dw_val_class_const, dw_val_class_const_double, dw_val_class_data8, dw_val_class_decl_ref, dw_val_class_die_ref, dw_val_class_fde_ref, dw_val_class_file, dw_val_class_flag, dw_val_class_high_pc, dw_val_class_lbl_id, dw_val_class_lineptr, dw_val_class_loc, dw_val_class_loc_list, dw_val_class_macptr, dw_val_class_none, dw_val_class_offset, dw_val_class_range_list, dw_val_class_str, dw_val_class_unsigned_const, dw_val_class_vec, dw_val_class_vms_delta, dw_vec_struct::elt_size, double_int::high, dw_val_struct::dw_val_struct_union::dw_val_vms_delta_union::lbl1, dw_vec_struct::length, double_int::low, rtx_equal_p(), dw_val_struct::v, dw_val_struct::dw_val_struct_union::val_addr, dw_val_struct::val_class, dw_val_struct::dw_val_struct_union::val_data8, dw_val_struct::dw_val_struct_union::val_decl_ref, dw_val_struct::dw_val_struct_union::val_die_ref, dw_val_struct::dw_val_struct_union::val_double, dw_val_struct::dw_val_struct_union::val_fde_index, dw_val_struct::dw_val_struct_union::val_file, dw_val_struct::dw_val_struct_union::val_flag, dw_val_struct::dw_val_struct_union::val_lbl_id, dw_val_struct::dw_val_struct_union::val_loc, dw_val_struct::dw_val_struct_union::val_loc_list, dw_val_struct::dw_val_struct_union::val_str, dw_val_struct::dw_val_struct_union::val_unsigned, dw_val_struct::dw_val_struct_union::val_vec, and dw_val_struct::dw_val_struct_union::val_vms_delta.

Referenced by loc_descr_equal_p_1().

int dwarf2_build_local_stub ( )
htab_traverse callback function for optimize_external_refs, below.  SLOT
   points to an external_ref, DATA is the CU we're processing.  If we don't
   already have a local stub, and we have multiple refs, build a stub.   

References add_AT_die_ref(), die_struct::comdat_type_p, die_struct::die_mark, die_struct::die_tag, external_ref::n_refs, new_die(), external_ref::stub, and external_ref::type.

Referenced by optimize_external_refs().

static const char* dwarf2_name ( )
static
Return the DWARF2/3 pubname associated with a decl.   

References lang_hooks::dwarf_name.

static void dwarf2out_abstract_function ( tree  )
static
static void dwarf2out_abstract_function ( )
static
static void dwarf2out_assembly_start ( )
static
Called before compile () starts outputtting functions, variables
   and toplevel asms into assembly.   

References asm_out_file, dwarf2out_do_cfi_asm(), and UI_DWARF2.

static void dwarf2out_begin_block ( unsigned  ,
unsigned   
)
static
static void dwarf2out_begin_block ( unsigned int  line,
unsigned int  blocknum 
)
static
Output a marker (i.e. a label) for the beginning of the generated code for
   a lexical block.   

References asm_out_file, current_function_section(), and switch_to_section().

static void dwarf2out_begin_function ( tree  )
static
static void dwarf2out_begin_function ( )
static
We need to reset the locations at the beginning of each
   function. We can't do this in the end_function hook, because the
   declarations that use the locations won't have been output when
   that hook is called.  Also compute have_multiple_function_sections here.   

References asm_out_file, call_site_count, current_function_decl, dwarf2out_note_section_used(), function_section(), have_multiple_function_sections, set_cur_line_info_table(), switch_to_section(), tail_call_site_count, text_section, and unlikely_text_section().

static void dwarf2out_define ( unsigned int  lineno,
const char *  buffer 
)
static
Called from debug_define in toplev.c.  The `buffer' parameter contains
   the tail part of the directive line, i.e. the part which is past the
   initial whitespace, #, whitespace, directive-name, whitespace part.   

References buffer, macinfo_struct::code, DINFO_LEVEL_VERBOSE, macinfo_struct::info, macinfo_struct::lineno, and vec_safe_push().

static void dwarf2out_do_cfi_startproc ( )
static
Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.   

References asm_out_file, current_function_decl, dw2_force_const_mem(), get_personality_function(), and output_addr_const().

Referenced by dwarf2out_begin_prologue(), and dwarf2out_switch_text_section().

static void dwarf2out_end_block ( unsigned  ,
unsigned   
)
static
static void dwarf2out_end_block ( )
static
Output a marker (i.e. a label) for the end of the generated code for a
   lexical block.   

References asm_out_file, current_function_section(), and switch_to_section().

void dwarf2out_end_epilogue ( unsigned int  line,
const char *  file 
)
Output a marker (i.e. a label) for the absolute end of the generated code
   for a function definition.  This gets called *after* the epilogue code has
   been generated.   

References asm_out_file, cached_next_real_insn, cfun, dw_fde_struct::dw_fde_end, dw_fde_struct::dw_fde_second_begin, dwarf2out_do_cfi_asm(), function::fde, and last_var_location_insn.

Referenced by final_end_function().

static void dwarf2out_end_function ( unsigned  int)
static
static void dwarf2out_end_function ( )
static
Hook called after emitting a function into assembly.
   This does something only for the very first function emitted.   

References decl_loc_table, find_empty_loc_ranges_at_text_label(), and have_multiple_function_sections.

static void dwarf2out_end_source_file ( unsigned  )
static
static void dwarf2out_end_source_file ( )
static
static void dwarf2out_finish ( const char *  )
static
static void dwarf2out_finish ( )
static
Output stuff that dwarf requires at the end of every file,
   and generate the DWARF-2 debugging info.   

References add_AT_addr(), add_AT_data8(), add_AT_lineptr(), add_AT_low_high_pc(), add_AT_macptr(), add_AT_pubnames(), add_child_die(), add_comp_dir_attribute(), add_linkage_attr(), add_location_or_const_value_attribute(), add_name_attribute(), add_ranges(), add_ranges_by_labels(), add_sibling_attributes(), add_top_level_skeleton_die_attrs(), addr_index_table, asm_out_file, break_out_comdat_types(), break_out_includes(), cold_text_section_used, comdat_type_list, comp_unit_die(), copy_decls_for_unworthy_types(), hash_table< Descriptor, Allocator >::create(), limbo_die_struct::created_for, dw_fde_struct::decl, deferred_asm_name, deferred_locations_list, limbo_die_struct::die, die_checksum(), die_struct::die_parent, DINFO_LEVEL_NORMAL, hash_table< Descriptor, Allocator >::dispose(), dw2_asm_output_data(), dw_attr_struct::dw_attr_val, dw_fde_struct::dw_fde_begin, dw_fde_struct::dw_fde_end, dw_fde_struct::dw_fde_second_begin, dw_fde_struct::dw_fde_second_end, fde_vec, file_table, file_table_relative_p(), find_AT_string(), hash_table< Descriptor, Allocator >::find_slot(), gen_compile_unit_die(), gen_producer_string(), gen_remaining_tmpl_value_param_die_attribute(), gen_scheduled_generic_parms_dies(), get_AT(), get_AT_ref(), get_context_die(), get_skeleton_type_unit(), have_multiple_function_sections, dw_fde_struct::in_std_section, index_addr_table_entry(), index_location_lists(), index_string(), is_cu_die(), limbo_die_list, move_linkage_attr(), move_marked_base_types(), comdat_type_struct::next, limbo_die_struct::next, optimize_location_lists(), output_abbrev_section(), output_addr_table(), output_aranges(), output_comdat_type_unit(), output_comp_unit(), output_indirect_strings(), output_line_info(), output_location_lists(), output_macinfo(), output_pubnames(), output_ranges(), output_skeleton_debug_sections(), prune_unused_types(), indirect_string_node::refcount, remap_debug_filename(), resolve_addr(), retry_incomplete_types(), comdat_type_struct::root_die, save_macinfo_strings(), scope_die_for(), dw_fde_struct::second_in_std_section, seen_error(), size_of_aranges(), switch_to_section(), targetm, text_section, text_section_used, unmark_all_dies(), dw_val_struct::v, and dw_val_struct::dw_val_struct_union::val_str.

void dwarf2out_frame_finish ( void  )

References output_call_frame_info(), targetm, and UI_DWARF2.

Referenced by compile_file().

static void dwarf2out_function_decl ( tree  )
static
static void dwarf2out_function_decl ( )
static
static void dwarf2out_global_decl ( tree  )
static
static void dwarf2out_global_decl ( )
static
Output debug information for global decl DECL.  Called from toplev.c after
   compilation proper has finished.   

References dwarf2out_decl().

static bool dwarf2out_ignore_block ( const_tree  )
static

Referenced by gen_block_die().

static bool dwarf2out_ignore_block ( )
static
Returns nonzero if it is appropriate not to emit any debugging
   information for BLOCK, because it doesn't contain any instructions.

   Don't allow this for blocks with nested functions or local classes
   as we would end up with orphans, and in the presence of scheduling
   we may end up calling them anyway.   
static void dwarf2out_imported_module_or_decl ( tree  decl,
tree  name,
tree  context,
bool  child 
)
static
Output debug information for imported module or decl DECL.
   NAME is non-NULL name in context if the decl has been renamed.
   CHILD is true if decl is one of the renamed decls as part of
   importing whole module.   

References die_struct::die_child, die_struct::die_tag, DINFO_LEVEL_TERSE, DINFO_USAGE_DIR_USE, dwarf2out_imported_module_or_decl_1(), get_context_die(), and should_emit_struct_debug().

static void dwarf2out_imported_module_or_decl_1 ( tree  decl,
tree  name,
tree  lexical_block,
dw_die_ref  lexical_block_die 
)
static
Output debug information for imported module or decl DECL.
   NAME is non-NULL name in the lexical block if the decl has been renamed.
   LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
   that DECL belongs to.
   LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.   

References add_AT_die_ref(), add_AT_file(), add_AT_string(), add_AT_unsigned(), DINFO_USAGE_DIR_USE, expand_location(), force_decl_die(), force_type_die(), gen_type_die_for_member(), gen_typedef_die(), get_context_die(), input_location, lookup_decl_die(), lookup_filename(), lookup_type_die(), new_die(), and should_emit_struct_debug().

Referenced by dwarf2out_imported_module_or_decl(), and process_scope_var().

static void dwarf2out_init ( const char *  )
static
static void dwarf2out_note_section_used ( )
static
Note that the current function section is being used for code.   

References cold_text_section_used, current_function_section(), text_section, and text_section_used.

Referenced by dwarf2out_begin_function(), and dwarf2out_switch_text_section().

void dwarf2out_set_demangle_name_func ( const char *(*)(const char *)  func)

References demangle_name_func.

static void dwarf2out_set_name ( tree  ,
tree   
)
static
static void dwarf2out_set_name ( )
static
static void dwarf2out_source_line ( unsigned int  line,
const char *  filename,
int  discriminator,
bool  is_stmt 
)
static
@verbatim Output Dwarf2 format symbol table information from GCC.

Copyright (C) 1992-2013 Free Software Foundation, Inc. Contributed by Gary Funck (gary@.nosp@m.intr.nosp@m.epid..nosp@m.com). Derived from DWARF 1 implementation of Ron Guilmette (rfg@m.nosp@m.onke.nosp@m.ys.co.nosp@m.m). Extensively modified by Jason Merrill (jason.nosp@m.@cyg.nosp@m.nus.c.nosp@m.om).

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  
Output a label to mark the beginning of a source code line entry
   and record information relating to this source line, in
   'line_info_table' for later output of the .debug_line section.   
??? The discriminator parameter ought to be unsigned.   

References asm_out_file, cur_line_info_table, current_function_section(), DINFO_LEVEL_NORMAL, dw_line_info_table_struct::discrim_num, discriminator, dw_line_info_table_struct::file_num, fprint_ul(), dw_line_info_table_struct::in_use, dw_line_info_table_struct::is_stmt, LI_negate_stmt, LI_set_address, LI_set_discriminator, LI_set_file, LI_set_line, line_info_label_num, dw_line_info_table_struct::line_num, lookup_filename(), maybe_emit_file(), push_dw_line_info_entry(), switch_to_section(), table, and targetm.

Referenced by dwarf2out_begin_prologue().

static void dwarf2out_start_source_file ( unsigned  ,
const char *   
)
static
static void dwarf2out_start_source_file ( )
static
static void dwarf2out_type_decl ( tree  ,
int   
)
static
static void dwarf2out_type_decl ( )
static
Output debug information for type decl DECL.  Called from toplev.c
   and from language front ends (to record built-in types).   

References dwarf2out_decl().

static void dwarf2out_undef ( unsigned int  lineno,
const char *  buffer 
)
static
Called from debug_undef in toplev.c.  The `buffer' parameter contains
   the tail part of the directive line, i.e. the part which is past the
   initial whitespace, #, whitespace, directive-name, whitespace part.   

References buffer, macinfo_struct::code, DINFO_LEVEL_VERBOSE, macinfo_struct::info, macinfo_struct::lineno, and vec_safe_push().

static void dwarf2out_var_location ( rtx  )
static
void dwarf2out_vms_begin_epilogue ( unsigned int  line,
const char *  file 
)
Output a marker (i.e. a label) for the beginning of the generated code
   for a function epilogue.  This gets called *before* the prologue code has
   been generated.   

References asm_out_file, cfun, dw_fde_struct::dw_fde_vms_begin_epilogue, and function::fde.

void dwarf2out_vms_debug_main_pointer ( )
void dwarf2out_vms_end_prologue ( unsigned int  line,
const char *  file 
)
Output a marker (i.e. a label) for the end of the generated code
   for a function prologue.  This gets called *after* the prologue code has
   been generated.   

References asm_out_file, cfun, dw_fde_struct::dw_fde_vms_end_prologue, and function::fde.

static const char* dwarf_attr_name ( unsigned  )
static
static const char* dwarf_attr_name ( )
static
Convert a DWARF attribute code into its string name.   
static const char* dwarf_form_name ( unsigned  )
static

Referenced by output_value_format().

static const char* dwarf_form_name ( )
static
Convert a DWARF value form code into its string name.   
static const char* dwarf_stack_op_name ( )
static
Convert a DWARF stack opcode into its string name.   

Referenced by output_loc_sequence().

static const char* dwarf_tag_name ( unsigned  )
static
static const char* dwarf_tag_name ( )
static
Convert a DIE tag into its string name.   
static void equate_decl_number_to_die ( )
static
Equate a DIE to a particular declaration.   

References decl_die_table, and die_struct::decl_id.

static void equate_type_number_to_die ( )
inlinestatic
Equate a DIE to a given type specifier.   
static void expansion_failed ( )
static
static HOST_WIDE_INT extract_int ( const unsigned char *  ,
unsigned   
)
static

Referenced by output_die(), and output_loc_operands().

static HOST_WIDE_INT extract_int ( )
static
Reads integers from dw_vec_const array.  Inverse of insert_int.   
static bool fde_needed_for_eh_p ( )
static
Return true if frame description entry FDE is needed for EH.   

References dw_fde_struct::all_throwers_are_sibcalls, dw_fde_struct::decl, dw_fde_struct::nothrow, and dw_fde_struct::uses_eh_lsda.

Referenced by output_call_frame_info().

static HOST_WIDE_INT field_byte_offset ( const_tree  )
static
static HOST_WIDE_INT field_byte_offset ( )
static
Given a pointer to a FIELD_DECL, compute and return the byte offset of the
   lowest addressed byte of the "containing object" for the given FIELD_DECL,
   or return 0 if we are unable to determine what that offset is, either
   because the argument turns out to be a pointer to an ERROR_MARK node, or
   because the offset is actually variable.  (We can't handle the latter case
   just yet).   

References bit_position(), double_int::div(), double_int_type_size_in_bits(), field_type(), double_int::from_uhwi(), round_up_to_align(), simple_decl_align_in_bits(), simple_type_align_in_bits(), double_int::to_shwi(), tree_to_double_int(), type(), and double_int::ugt().

static tree field_type ( )
inlinestatic
Given a pointer to what is assumed to be a FIELD_DECL node, return a
   pointer to the declared type for the relevant field variable, or return
   `integer_type_node' if the given node turns out to be an
   ERROR_MARK node.   

References type().

static int file_info_cmp ( const void *  ,
const void *   
)
static

Referenced by output_file_names().

static int file_info_cmp ( )
static
Callback function for file_info comparison.  We sort by looking at
   the directories in the path.   

References file_info::fname, and file_info::path.

static int file_table_eq ( )
static
Hash table routines for file_hash.   

References dwarf_file_data::filename.

Referenced by dwarf2out_init().

static hashval_t file_table_hash ( )
static

References dwarf_file_data::filename.

Referenced by dwarf2out_init().

static int file_table_relative_p ( )
static
Set the parameter to true if there are any relative pathnames in
   the file table.   

References dwarf_file_data::filename.

Referenced by dwarf2out_finish().

static struct indirect_string_node* find_AT_string ( )
staticread
static struct indirect_string_node* find_AT_string_in_table ( )
staticread
Add STR to the given string hash table.   

References indirect_string_node::refcount, and indirect_string_node::str.

Referenced by add_skeleton_AT_string(), and find_AT_string().

static int find_empty_loc_ranges_at_text_label ( )
static
Helper function of dwarf2out_end_function, called only after emitting
   the very first function into assembly.  Check if some .debug_loc range
   might end with a .LVL* label that could be equal to .Ltext0.
   In that case we must force using absolute addresses in .debug_loc ranges,
   because this range could be .LVLN-.Ltext0 .. .LVLM-.Ltext0 for
   .LVLN == .LVLM == .Ltext0, thus 0 .. 0, which is a .debug_loc
   list terminator.
   Set have_multiple_function_sections to true in that case and
   terminate htab traversal.   

References var_loc_list_def::first, first_loclabel_num_not_at_text_label, have_multiple_function_sections, var_loc_node::label, and var_loc_node::next.

Referenced by dwarf2out_end_function().

static enum dwarf_form find_string_form ( )
static
Find out whether a string should be output inline in DIE
   or out-of-line in .debug_str section.   

References indirect_string_node::form, len, indirect_string_node::refcount, set_indirect_string(), indirect_string_node::str, and strlen().

Referenced by add_skeleton_AT_string(), AT_string_form(), index_string(), and output_indirect_string().

static dw_die_ref force_decl_die ( )
static
Returns the DIE for decl.  A DIE will always be returned.   

References comp_unit_die(), current_function_decl, dwarf2out_decl(), gen_decl_die(), gen_subprogram_die(), get_context_die(), and lookup_decl_die().

static dw_die_ref force_type_die ( tree  )
static
static dw_die_ref force_type_die ( )
static
Returns the DIE for TYPE, that must not be a base type.  A DIE is
   always returned.   

References get_context_die(), lookup_type_die(), and modified_type_die().

static tree fortran_common ( )
static
Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
   returned.  If so, the decl for the COMMON block is returned, and the
   value is the offset into the common block for the symbol.   

References get_inner_reference(), host_integerp(), is_fortran(), offset, and tree_low_cst().

Referenced by gen_variable_die().

static void gen_array_type_die ( tree  ,
dw_die_ref   
)
static

Referenced by gen_type_die_with_usage().

static void gen_array_type_die ( )
static
These routines generate the internal representation of the DIE's for
   the compilation unit.  Debugging information is collected by walking
   the declaration trees passed in from dwarf2out_decl().   

References add_AT_flag(), add_AT_location_description(), add_AT_unsigned(), add_bound_info(), add_gnat_descriptive_type_attribute(), add_name_attribute(), add_pubtype(), add_subscript_info(), add_type_attribute(), equate_type_number_to_die(), get_AT(), int_size_in_bytes(), is_ada(), is_fortran(), loc_list_from_tree(), new_die(), scope_die_for(), and type_tag().

static void gen_block_die ( tree  ,
dw_die_ref  ,
int   
)
static

Referenced by decls_for_scope(), and gen_block_die().

static void gen_block_die ( )
static
Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
   things which are local to the given block.   

References decls_for_scope(), DINFO_LEVEL_TERSE, dwarf2out_ignore_block(), gen_block_die(), gen_inlined_subroutine_die(), gen_lexical_block_die(), and inlined_function_outer_scope_p().

static dw_die_ref gen_call_site_die ( tree  decl,
dw_die_ref  subr_die,
struct call_arg_loc_node ca_loc 
)
static
Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
   for CA_LOC call arg loc node.   

References add_AT_addr(), add_AT_die_ref(), add_AT_flag(), add_AT_lbl_id(), call_arg_loc_node::block, block_map, call_arg_loc_node::label, lookup_decl_die(), new_die(), call_arg_loc_node::symbol_ref, and call_arg_loc_node::tail_call_p.

Referenced by gen_subprogram_die().

static dw_die_ref gen_compile_unit_die ( const char *  )
static
static dw_die_ref gen_compile_unit_die ( )
static
static void gen_const_die ( tree  ,
dw_die_ref   
)
static

Referenced by gen_decl_die().

static void gen_const_die ( )
static
static void gen_entry_point_die ( tree  ,
dw_die_ref   
)
static
static dw_die_ref gen_enumeration_type_die ( tree  ,
dw_die_ref   
)
static

Referenced by gen_tagged_type_die().

static dw_die_ref gen_enumeration_type_die ( )
static
Generate a DIE to represent an enumeration type.  Note that these DIEs
   include all of the information about the enumeration values also. Each
   enumerated type name/value is listed as a child of the enumerated type
   DIE.   

References add_accessibility_attribute(), add_AT_double(), add_AT_flag(), add_AT_int(), add_byte_size_attribute(), add_child_die(), add_gnat_descriptive_type_attribute(), add_name_attribute(), add_pubtype(), add_src_coords_attributes(), die_struct::die_parent, equate_type_number_to_die(), HOST_BITS_PER_WIDE_INT, host_integerp(), lookup_type_die(), new_die(), remove_AT(), scope_die_for(), simple_type_size_in_bits(), and type_tag().

static void gen_field_die ( tree  ,
dw_die_ref   
)
static
static dw_die_ref gen_formal_parameter_die ( tree  node,
tree  origin,
bool  emit_name_p,
dw_die_ref  context_die 
)
static
Generate a DIE to represent either a real live formal parameter decl or to
   represent just the type of some formal parameter position in some function
   type.

   Note that this routine is a bit unusual because its argument may be a
   ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
   represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
   node.  If it's the former then this function is being called to output a
   DIE to represent a formal parameter object (or some inlining thereof).  If
   it's the latter, then this function is only being called to output a
   DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
   argument type of some subprogram type.
   If EMIT_NAME_P is true, name and source coordinate attributes
   are emitted.   

References add_abstract_origin_attribute(), add_AT_flag(), add_location_or_const_value_attribute(), add_name_and_src_coords_attributes(), add_type_attribute(), decl_by_reference_p(), decl_function_context(), decl_ultimate_origin(), equate_decl_number_to_die(), new_die(), tcc_declaration, tcc_type, and variably_modified_type_p().

Referenced by gen_decl_die(), gen_formal_parameter_pack_die(), and gen_formal_types_die().

static dw_die_ref gen_formal_parameter_pack_die ( tree  parm_pack,
tree  pack_arg,
dw_die_ref  subr_die,
tree next_arg 
)
static
Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
   children DW_TAG_formal_parameter DIEs representing the arguments of the
   parameter pack.

   PARM_PACK must be a function parameter pack.
   PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
   must point to the subsequent arguments of the function PACK_ARG belongs to.
   SUBR_DIE is the DIE of the function PACK_ARG belongs to.
   If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
   following the last one for which a DIE was generated.   

References add_src_coords_attributes(), lang_hooks::decls, lang_hooks::function_parameter_pack_p, lang_hooks_for_decls::function_parm_expanded_from_pack_p, gen_formal_parameter_die(), and new_die().

Referenced by gen_subprogram_die().

static void gen_formal_types_die ( tree  ,
dw_die_ref   
)
static
static void gen_formal_types_die ( )
static
Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
   DW_TAG_unspecified_parameters DIE) to represent the types of the formal
   parameters as specified in some function type specification (except for
   those which appear as part of a function *definition*).   

References add_AT_die_ref(), add_AT_flag(), gen_formal_parameter_die(), gen_type_die(), and gen_unspecified_parameters_die().

static void gen_generic_params_dies ( tree  )
static
static void gen_generic_params_dies ( )
static
Generate DIEs for the generic parameters of T.
   T must be either a generic type or a generic function.
   See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.   

References add_AT_flag(), generic_parameter_die(), lang_hooks_for_types::get_argument_pack_elems, lang_hooks::get_innermost_generic_args, lang_hooks::get_innermost_generic_parms, int_cst_value(), lookup_decl_die(), lookup_type_die(), template_parameter_pack_die(), and lang_hooks::types.

static void gen_inheritance_die ( tree  ,
tree  ,
dw_die_ref   
)
static

Referenced by gen_member_die().

static void gen_inheritance_die ( )
static
static void gen_inlined_subroutine_die ( tree  ,
dw_die_ref  ,
int   
)
static

Referenced by gen_block_die().

static char* gen_internal_sym ( const char *  )
static

Referenced by assign_symbol_names(), and gen_llsym().

static char* gen_internal_sym ( )
static
static void gen_label_die ( tree  ,
dw_die_ref   
)
static

Referenced by gen_decl_die().

static void gen_label_die ( )
static
static void gen_lexical_block_die ( tree  ,
dw_die_ref  ,
int   
)
static

Referenced by gen_block_die().

static void gen_lexical_block_die ( )
static
Generate a DIE for a lexical block.   

References add_high_low_attributes(), block_map, call_arg_locations, decls_for_scope(), and new_die().

static void gen_llsym ( )
inlinestatic
Generate a new internal symbol for this location list node, if it
   hasn't got one yet.   

References gen_internal_sym(), and dw_loc_list_struct::ll_symbol.

Referenced by convert_cfa_to_fb_loc_list(), and dw_loc_list().

static void gen_member_die ( tree  ,
dw_die_ref   
)
static
static void gen_member_die ( )
static
Generate a DIE for a class member.   

References gen_decl_die(), gen_inheritance_die(), lookup_decl_die(), and splice_child_die().

static void gen_namespace_die ( tree  ,
dw_die_ref   
)
static

Referenced by gen_decl_die().

static void gen_pointer_type_die ( )
static
Don't generate either pointer_type DIEs or reference_type DIEs here.
   Use modified_type_die instead.
   We keep this code here just in case these types of DIEs may be needed to
   represent certain things in other languages (e.g. Pascal) someday.   

References add_AT_unsigned(), add_type_attribute(), equate_type_number_to_die(), new_die(), and scope_die_for().

static char* gen_producer_string ( )
static
Return a heap allocated producer string including command line options
   if -grecord-gcc-switches.   

References cl_options, len, memcpy(), lang_hooks::name, save_decoded_options, save_decoded_options_count, strlen(), switches, version_string, and vNULL.

Referenced by dwarf2out_finish().

static void gen_ptr_to_mbr_type_die ( tree  ,
dw_die_ref   
)
static

Referenced by gen_type_die_with_usage().

static void gen_ptr_to_mbr_type_die ( )
static
Generate a DIE for a pointer to a member type.   

References add_AT_die_ref(), add_type_attribute(), equate_type_number_to_die(), lookup_type_die(), new_die(), and scope_die_for().

static void gen_reference_type_die ( )
static
Don't generate either pointer_type DIEs or reference_type DIEs here.
   Use modified_type_die instead.
   We keep this code here just in case these types of DIEs may be needed to
   represent certain things in other languages (e.g. Pascal) someday.   

References add_AT_unsigned(), add_type_attribute(), equate_type_number_to_die(), new_die(), and scope_die_for().

static void gen_remaining_tmpl_value_param_die_attribute ( )
static
Add a DW_AT_const_value attribute to DIEs that were scheduled
   by append_entry_to_tmpl_value_parm_die_table. This function must
   be called after function DIEs have been generated.   

References die_arg_entry_struct::arg, die_arg_entry_struct::die, and tree_add_const_value_attribute().

Referenced by dwarf2out_finish().

static void gen_scheduled_generic_parms_dies ( )
static
Generate generic parameters DIEs for instances of generic types
   that have been previously scheduled by
   schedule_generic_params_dies_gen. This function must be called
   after all the types of the CU have been laid out.   

References gen_generic_params_dies().

Referenced by dwarf2out_finish().

static void gen_subprogram_die ( tree  ,
dw_die_ref   
)
static
static void gen_subprogram_die ( )
static
Generate a DIE to represent a declared function (either file-scope or
   block-local).   

References add_abstract_origin_attribute(), add_accessibility_attribute(), add_AT_die_ref(), add_AT_file(), add_AT_flag(), add_AT_loc(), add_AT_loc_list(), add_AT_location_description(), add_AT_low_high_pc(), add_AT_specification(), add_AT_unsigned(), add_AT_vms_delta(), add_calling_convention_attribute(), add_child_die(), add_linkage_name(), add_name_and_src_coords_attributes(), add_name_attribute(), add_prototyped_attribute(), add_pubname(), add_pubname_string(), add_pure_or_virtual_attribute(), add_ranges(), add_ranges_by_labels(), add_src_coords_attributes(), add_type_attribute(), call_arg_loc_last, call_arg_loc_node::call_arg_loc_note, call_arg_locations, call_site_count, cgraph_function_possibly_inlined_p(), class_or_namespace_scope_p(), compute_frame_pointer_to_fb_displacement(), convert_cfa_to_fb_loc_list(), current_function_decl, decl_name(), decl_ultimate_origin(), lang_hooks::decls, decls_for_scope(), die_struct::die_parent, DINFO_LEVEL_TERSE, dw_fde_struct::dw_fde_begin, dw_fde_struct::dw_fde_end, dw_fde_struct::dw_fde_second_begin, dw_fde_struct::dw_fde_second_end, dw_fde_struct::dw_fde_vms_begin_epilogue, dw_fde_struct::dw_fde_vms_end_prologue, dw_loc_list_struct::dw_loc_next, dwarf2_name(), equate_decl_number_to_die(), expand_location(), dw_loc_list_struct::expr, force_decl_die(), lang_hooks_for_decls::function_decl_explicit_p, lang_hooks::function_parameter_pack_p, gen_call_site_die(), gen_decl_die(), gen_formal_parameter_pack_die(), gen_formal_types_die(), gen_generic_params_dies(), gen_unspecified_parameters_die(), get_address_mode(), get_AT(), get_AT_file(), get_AT_flag(), get_AT_unsigned(), lang_hooks_for_decls::get_generic_function_decl, is_cu_die(), loc_list_from_tree(), local_scope_p(), lookup_attribute(), lookup_decl_die(), lookup_filename(), mem_loc_descriptor(), new_die(), new_loc_descr(), call_arg_loc_node::next, pc_rtx, premark_used_types(), prototype_p(), reg_loc_descriptor(), remove_AT(), remove_child_TAG(), stdarg_p(), call_arg_loc_node::symbol_ref, call_arg_loc_node::tail_call_p, tail_call_site_count, targetm, UI_DWARF2, VAR_INIT_STATUS_INITIALIZED, and want_pubnames().

static void gen_subroutine_type_die ( tree  ,
dw_die_ref   
)
static

Referenced by gen_type_die_with_usage().

static void gen_subroutine_type_die ( )
static
static void gen_tagged_type_die ( tree  type,
dw_die_ref  context_die,
enum debug_info_usage  usage 
)
static
static void gen_type_die ( )
static
static void gen_type_die_for_member ( tree  ,
tree  ,
dw_die_ref   
)
static
static void gen_type_die_for_member ( )
static
We want to generate the DIE for TYPE so that we can generate the
   die for MEMBER, which has been defined; we will need to refer back
   to the member declaration nested within TYPE.  If we're trying to
   generate minimal debug info for TYPE, processing TYPE won't do the
   trick; we need to attach the member declaration by hand.   

References decl_ultimate_origin(), gen_field_die(), gen_subprogram_die(), gen_type_die(), gen_variable_die(), lookup_decl_die(), lookup_type_die_strip_naming_typedef(), member_declared_type(), pop_decl_scope(), and push_decl_scope().

static void gen_typedef_die ( tree  ,
dw_die_ref   
)
static
static void gen_unspecified_parameters_die ( tree  ,
dw_die_ref   
)
static
static void gen_unspecified_parameters_die ( )
static
Generate a special type of DIE used as a stand-in for a trailing ellipsis
   at the end of an (ANSI prototyped) formal parameters list.   

References new_die().

static void gen_variable_die ( tree  ,
tree  ,
dw_die_ref   
)
static
static dw_die_ref generate_skeleton ( dw_die_ref  )
static
static void generate_skeleton_ancestor_tree ( skeleton_chain_node )
static
static void generate_skeleton_ancestor_tree ( )
static
Generate the skeleton ancestor tree for the given NODE, then clone
   the DIE and add the clone into the tree.   

References add_child_die(), clone_as_declaration(), generate_skeleton_ancestor_tree(), skeleton_chain_struct::new_die, skeleton_chain_struct::old_die, and skeleton_chain_struct::parent.

static void generate_skeleton_bottom_up ( skeleton_chain_node )
static
static void generate_skeleton_bottom_up ( )
static
Generate a skeleton tree of DIEs containing any declarations that are
   found in the original tree.  We traverse the tree looking for declaration
   DIEs, and construct the skeleton from the bottom up whenever we find one.   

References add_child_die(), clone_die(), die_struct::die_child, die_struct::die_sib, first, generate_skeleton_ancestor_tree(), generate_skeleton_bottom_up(), is_declaration_die(), is_template_instantiation(), move_all_children(), skeleton_chain_struct::new_die, skeleton_chain_struct::old_die, skeleton_chain_struct::parent, remove_child_with_prev(), and replace_child().

static void generate_type_signature ( dw_die_ref  ,
comdat_type_node  
)
static

Referenced by break_out_comdat_types().

static void generate_type_signature ( )
static
Generate the type signature for DIE.  This is computed by generating an
   MD5 checksum over the DIE's tag, its relevant attributes, and its
   children.  Attributes that are references to other DIEs are processed
   by recursion, using the MARK field to prevent infinite recursion.
   If the DIE is nested inside a namespace or another type, we also
   need to include that context in the signature.  The lower 64 bits
   of the resulting MD5 checksum comprise the signature.   

References add_AT_data8(), checksum_die_context(), die_struct::comdat_type_p, die_checksum_ordered(), die_struct::die_id, die_struct::die_mark, die_odr_checksum(), die_struct::die_tag, die_struct::die_symbol_or_type_node::die_type_node, get_AT_ref(), get_AT_string(), get_die_parent(), is_cxx(), memcpy(), comdat_type_struct::root_die, comdat_type_struct::signature, comdat_type_struct::type_die, and unmark_all_dies().

static dw_die_ref generic_parameter_die ( tree  parm,
tree  arg,
bool  emit_name_p,
dw_die_ref  parent_die 
)
static
Create and return a DIE for PARM which should be
   the representation of a generic type parameter.
   For instance, in the C++ front end, PARM would be a template parameter.
   ARG is the argument to PARM.
   EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
   name of the PARM.
   PARENT_DIE is the parent DIE which the new created DIE should be added to,
   as a child node.   

References add_AT_string(), add_type_attribute(), append_entry_to_tmpl_value_parm_die_table(), lang_hooks::decls, dwarf2_name(), lang_hooks_for_decls::generic_generic_parameter_decl_p, and new_die().

Referenced by gen_generic_params_dies(), and template_parameter_pack_die().

static bool generic_type_p ( tree  )
static
static bool generic_type_p ( )
static
Return TRUE if T is an instance of generic type, FALSE
   otherwise.   

References lang_hooks::get_innermost_generic_parms.

static dw_attr_ref get_AT ( )
static
Get the attribute of type attr_kind.   

References AT_ref(), die_struct::die_attr, dw_attr_struct::dw_attr, and get_AT().

static struct dwarf_file_data* get_AT_file ( )
staticread

References AT_file(), and get_AT().

Referenced by gen_subprogram_die(), and gen_variable_die().

static int get_AT_flag ( dw_die_ref  ,
enum  dwarf_attribute 
)
static
static int get_AT_flag ( )
inlinestatic
Return the value of the flag attribute designated by ATTR_KIND, or -1
   if it is not present.   

References AT_flag(), and get_AT().

static const char* get_AT_hi_pc ( dw_die_ref  )
static
static const char* get_AT_hi_pc ( )
inlinestatic
Return the "high pc" attribute value, typically associated with a subprogram
   DIE.  Return null if the "high pc" attribute is either not present, or if it
   cannot be represented as an assembler label identifier.   

References AT_lbl(), and get_AT().

static const char* get_AT_low_pc ( dw_die_ref  )
static

Referenced by output_die().

static const char* get_AT_low_pc ( )
inlinestatic
Return the "low pc" attribute value, typically associated with a subprogram
   DIE.  Return null if the "low pc" attribute is either not present, or if it
   cannot be represented as an assembler label identifier.   

References AT_lbl(), and get_AT().

static dw_die_ref get_AT_ref ( )
inlinestatic

References AT_ref(), and get_AT().

static const char* get_AT_string ( dw_die_ref  ,
enum  dwarf_attribute 
)
static
static const char* get_AT_string ( )
inlinestatic
Return the value of the string attribute designated by ATTR_KIND, or
   NULL if it is not present.   

References AT_string(), and get_AT().

static unsigned get_AT_unsigned ( )
inlinestatic
Return the value of the unsigned attribute designated by ATTR_KIND, or 0
   if it is not present.   

References AT_unsigned(), and get_AT().

static unsigned long int get_base_type_offset ( dw_die_ref  )
static
static unsigned long int get_base_type_offset ( )
static
Return die_offset of a DIE reference to a base type.   

References calc_base_type_die_sizes(), comp_unit_die(), and die_struct::die_offset.

static dw_die_ref get_context_die ( )
inlinestatic
Returns the DIE for a context.   

References comp_unit_die(), force_decl_die(), force_type_die(), and strip_naming_typedef().

static dw_die_ref get_die_parent ( )
static
Returns the parent of the declaration of DIE.   

References die_struct::die_parent, and get_AT_ref().

Referenced by generate_type_signature().

static unsigned long int get_ref_die_offset ( dw_die_ref  )
static

Referenced by output_loc_operands().

static unsigned long int get_ref_die_offset ( )
static
Return die_offset of a DIE reference other than base type.   

References die_struct::die_offset.

static void get_ref_die_offset_label ( char *  ,
dw_die_ref   
)
static

Referenced by output_loc_operands().

static void get_ref_die_offset_label ( )
static
Set label to debug_info_section_label + die_offset of a DIE reference.   

References die_struct::die_offset.

static dw_die_ref get_skeleton_type_unit ( )
static
Return the single type-unit die for skeleton type units.   

References add_top_level_skeleton_die_attrs(), die_struct::die_abbrev, and new_die().

Referenced by dwarf2out_finish(), output_comdat_type_unit(), and output_skeleton_debug_sections().

static void hash_loc_list ( )
inlinestatic
static hashval_t hash_loc_operands ( dw_loc_descr_ref  ,
hashval_t   
)
static
static hashval_t hash_locs ( )
inlinestatic
Iteratively hash the whole DWARF location expression LOC.   

References dw_loc_descr_struct::dw_loc_next, hash_loc_operands(), and size_of_locs().

Referenced by hash_loc_list().

static bool include_pubname_in_output ( )
static
Calculate if the entry should appear in the final output file.  It may be
   from a pruned a type.   

References pubname_struct::die, die_struct::die_offset, die_struct::die_parent, die_struct::die_perennial_p, and die_struct::die_tag.

Referenced by output_pubnames(), and size_of_pubnames().

static int index_addr_table_entry ( )
static
A helper function for dwarf2out_finish called through
   htab_traverse.  Assign an addr_table_entry its index.  All entries
   must be collected into the table when this function is called,
   because the indexing code relies on htab_traverse to traverse nodes
   in the same order for each run.  

References addr_table_entry_struct::index, and addr_table_entry_struct::refcount.

Referenced by dwarf2out_finish().

static void index_location_lists ( )
static
static int index_string ( )
static
A helper function for dwarf2out_finish called through
   htab_traverse.  Assign a string its index.  All strings must be
   collected into the table by the time index_string is called,
   because the indexing code relies on htab_traverse to traverse nodes
   in the same order for each run.  

References find_string_form(), indirect_string_node::form, indirect_string_node::index, and indirect_string_node::refcount.

Referenced by dwarf2out_finish().

static void insert_double ( double_int  ,
unsigned char *   
)
static
static void insert_double ( )
static
Writes double_int values to dw_vec_const array.   

References double_int::high, HOST_WIDE_INT, insert_int(), and double_int::low.

static void insert_float ( const_rtx  ,
unsigned char *   
)
static
static void insert_float ( )
static
Writes floating point values to dw_vec_const array.   

References insert_int(), and real_to_target().

static void insert_int ( HOST_WIDE_INT  ,
unsigned  ,
unsigned char *   
)
static
static void insert_int ( )
static
Writes integer values to dw_vec_const array.   
static dw_loc_descr_ref int_loc_descriptor ( )
static
static dw_loc_descr_ref int_shift_loc_descriptor ( )
static
Return a location descriptor that designates a constant i,
   as a compound operation from constant (i >> shift), constant shift
   and DW_OP_shl.   

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

Referenced by int_loc_descriptor().

static bool is_ada ( )
inlinestatic
Return TRUE if the language is Ada.   

References comp_unit_die(), and get_AT_unsigned().

Referenced by dwarf2out_decl(), gen_array_type_die(), and gen_decl_die().

static int is_base_type ( tree  )
static

Referenced by modified_type_die().

static int is_base_type ( )
inlinestatic
Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
   given input type is a Dwarf "fundamental" type.  Otherwise return null.   
static int is_based_loc ( const_rtx  )
static

Referenced by mem_loc_descriptor().

static int is_based_loc ( )
inlinestatic
Return true if this RTL expression describes a base+offset calculation.   
static bool is_class_die ( )
inlinestatic
Returns true iff C is a class or structure DIE.   

References die_struct::die_tag.

static int is_comdat_die ( dw_die_ref  )
static
static int is_comdat_die ( )
static
Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
   Basically, we want to choose the bits that are likely to be shared between
   compilations (types) and leave out the bits that are specific to individual
   compilations (functions).   

References die_struct::die_tag, get_AT_ref(), is_comdat_die(), and is_type_die().

static bool is_cu_die ( )
inlinestatic
Returns true iff C is a compile-unit DIE.   

References die_struct::die_tag.

Referenced by add_pubname(), add_pubtype(), dwarf2out_finish(), gen_struct_or_union_type_die(), and gen_subprogram_die().

static bool is_cxx ( )
inlinestatic
static int is_declaration_die ( )
static
Return non-zero if this DIE is a declaration.   

References die_struct::die_attr, and dw_attr_struct::dw_attr.

static bool is_namespace_die ( )
inlinestatic
Returns true iff C is a namespace DIE.   

References die_struct::die_tag.

Referenced by add_pubname(), and add_pubtype().

static bool is_naming_typedef_decl ( const_tree  )
static
static bool is_naming_typedef_decl ( )
static
Return TRUE if TYPE is a typedef that names a type for linkage
   purposes. This kind of typedefs is produced by the C++ FE for
   constructs like:

   typedef struct {...} foo;

   In that case, there is no typedef variant type produced for foo.
   Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
   struct type.   

References is_cxx(), is_redundant_typedef(), and is_tagged_type().

static int is_nested_in_subprogram ( )
static
Return non-zero if this DIE is nested inside a subprogram.   

References get_AT_ref(), and local_scope_p().

Referenced by should_move_die_to_comdat().

static int is_pseudo_reg ( const_rtx  )
static
Forward declarations for functions defined in this file.   

Referenced by rtl_for_decl_location().

static int is_pseudo_reg ( )
inlinestatic
Test if rtl node points to a pseudo register.   
static int is_redundant_typedef ( const_tree  )
inlinestatic
static int is_redundant_typedef ( )
inlinestatic
Is this a typedef we can avoid emitting?   

References is_tagged_type().

static int is_symbol_die ( dw_die_ref  )
static

Referenced by assign_symbol_names().

static int is_symbol_die ( )
static
Returns 1 iff C is the sort of DIE that might be referred to from another
   compilation unit.   

References die_struct::die_tag, is_declaration_die(), and is_type_die().

static int is_tagged_type ( const_tree  )
static
static int is_tagged_type ( )
inlinestatic
Return nonzero if the given type node represents a tagged type.   
static bool is_template_instantiation ( dw_die_ref  )
inlinestatic
static bool is_template_instantiation ( )
inlinestatic
Return non-zero if this DIE represents a template instantiation.   

References die_struct::die_tag, is_template_parameter(), and is_type_die().

static bool is_template_parameter ( )
inlinestatic
Return non-zero if this DIE is a template parameter.   

References die_struct::die_tag.

Referenced by is_template_instantiation(), and prune_unused_types_mark_generic_parms_dies().

static int is_type_die ( )
static
Returns nonzero if DIE represents a type, in the sense of TYPE_P.   

References die_struct::die_tag.

static bool is_unit_die ( )
inlinestatic
Returns true iff C is a unit DIE of some sort.   

References die_struct::die_tag.

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

static void loc_checksum ( dw_loc_descr_ref  ,
struct md5_ctx *   
)
static

Referenced by attr_checksum().

static void loc_checksum ( )
inlinestatic
Calculate the checksum of a location expression.   

References dw_loc_descr_struct::dtprel, and hash_loc_operands().

static void loc_checksum_ordered ( dw_loc_descr_ref  ,
struct md5_ctx *   
)
static

Referenced by attr_checksum_ordered().

static void loc_checksum_ordered ( )
inlinestatic
bool loc_descr_equal_p ( )
Compare two complete location expressions for exact equality.   

References dw_loc_descr_struct::dw_loc_next, and loc_descr_equal_p_1().

Referenced by cfi_oprnd_equal_p().

static bool loc_descr_equal_p_1 ( )
static
Compare two location atoms for exact equality.   

References dw_loc_descr_struct::dtprel, dw_loc_descr_struct::dw_loc_oprnd1, dw_loc_descr_struct::dw_loc_oprnd2, and dw_val_equal_p().

Referenced by loc_descr_equal_p().

static dw_loc_descr_ref loc_descriptor ( rtx  rtl,
enum machine_mode  mode,
enum var_init_status  initialized 
)
static
Output a proper Dwarf location descriptor for a variable or parameter
   which is either allocated in a register or in a memory location.  For a
   register, we just generate an OP_REG and the register number.  For a
   memory location we provide a Dwarf postfix expression describing how to
   generate the (dynamic) address of the object onto the address stack.

   MODE is mode of the decl if this loc_descriptor is going to be used in
   .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
   allowed, VOIDmode otherwise.

   If we don't know how to describe it, return 0.   

References add_loc_descr(), add_loc_descr_op_piece(), address_of_int_loc_descriptor(), dw_vec_struct::array, avoid_constant_pool_reference(), concat_loc_descriptor(), concatn_loc_descriptor(), const_ok_for_output(), dtprel_false, dw_loc_descr_struct::dw_loc_oprnd2, dw_val_class_const_double, dw_val_class_vec, dw_vec_struct::elt_size, get_address_mode(), implicit_ptr_descriptor(), insert_double(), insert_float(), insert_int(), dw_vec_struct::length, mem_loc_descriptor(), new_addr_loc_descr(), new_loc_descr(), reg_loc_descriptor(), rtx_to_double_int(), subreg_lowpart_p(), tls_mem_loc_descriptor(), double_int::to_shwi(), dw_val_struct::v, dw_val_struct::val_class, dw_val_struct::dw_val_struct_union::val_double, dw_val_struct::dw_val_struct_union::val_vec, and vec_safe_push().

Referenced by concat_loc_descriptor(), concatn_loc_descriptor(), dw_loc_list_1(), and loc_list_from_tree().

static dw_loc_descr_ref loc_descriptor_from_tree ( tree  ,
int   
)
static
static dw_loc_descr_ref loc_descriptor_from_tree ( )
static
Same as above but return only single location expression.   

References dw_loc_list_struct::dw_loc_next, expansion_failed(), dw_loc_list_struct::expr, and loc_list_from_tree().

static dw_loc_list_ref loc_list_for_address_of_addr_expr_of_indirect_ref ( )
static
Return dw_loc_list representing address of addr_expr LOC
   by looking for inner INDIRECT_REF expression and turning
   it into simple arithmetics.   

References add_loc_descr_to_each(), add_loc_list(), expansion_failed(), get_inner_reference(), int_size_in_bytes(), loc_list_from_tree(), loc_list_plus_const(), new_loc_descr(), and offset.

Referenced by loc_list_from_tree().

static void loc_list_plus_const ( )
static
static int local_scope_p ( dw_die_ref  )
inlinestatic
static int local_scope_p ( )
inlinestatic
Returns nonzero if CONTEXT_DIE is internal to a function.   

References die_struct::die_parent, and die_struct::die_tag.

static dw_die_ref lookup_decl_die ( )
inlinestatic
Return the DIE associated with a given declaration.   

References decl_die_table.

static var_loc_list* lookup_decl_loc ( const_tree  )
static
static var_loc_list* lookup_decl_loc ( )
inlinestatic
Return the var_loc list associated with a given declaration.   

References decl_loc_table.

static struct external_ref* lookup_external_ref ( )
staticread
Return a pointer to the external_ref for references to DIE.   

References hash_table< Descriptor, Allocator >::find_slot(), and external_ref::type.

Referenced by build_abbrev_table(), and optimize_external_refs_1().

static struct dwarf_file_data* lookup_filename ( )
staticread
Lookup FILE_NAME (in the list of filenames that we know about here in
   dwarf2out.c) and return its "index".  The index of each (known) filename is
   just a unique number which is associated with only that one filename.  We
   need such numbers for the sake of generating labels (in the .debug_sfnames
   section) and references to those files numbers (in the .debug_srcinfo
   and.debug_macinfo sections).  If the filename given as an argument is not
   found in our current list, add it to the list and assign it the next
   available unique index number.  In order to speed up searches, we remember
   the index of the filename was looked up last.  This handles the majority of
   all searches.   

References dwarf_file_data::emitted_number, file_table, file_table_last_lookup, and dwarf_file_data::filename.

static dw_die_ref lookup_type_die ( )
inlinestatic
Return the DIE associated with the given type specifier.   
static dw_die_ref lookup_type_die_strip_naming_typedef ( tree  )
static
static dw_die_ref lookup_type_die_strip_naming_typedef ( )
inlinestatic
Like lookup_type_die, but if type is an anonymous type named by a
   typedef[1], return the DIE of the anonymous type instead the one of
   the naming typedef.  This is because in gen_typedef_die, we did
   equate the anonymous struct named by the typedef with the DIE of
   the naming typedef. So by default, lookup_type_die on an anonymous
   struct yields the DIE of the naming typedef.

   [1]: Read the comment of is_naming_typedef_decl to learn about what
   a naming typedef is.   

References lookup_type_die(), and strip_naming_typedef().

static int lower_bound_default ( )
static
Return the default for DW_AT_lower_bound, or -1 if there is not any
   default.   

References comp_unit_die(), and get_AT_unsigned().

Referenced by add_bound_info(), and gen_descr_array_type_die().

static void mark_dies ( )
static
Set the marks for a die and its children.  We do this so
   that we know whether or not a reference needs to use FORM_ref_addr; only
   DIEs in the same CU will be marked.  We used to clear out the offset
   and use that as the flag, but ran into ordering problems.   

References die_struct::die_mark, and mark_dies().

static int matches_main_base ( )
static
Match the base name of a file to the base name of a compilation unit.  

References base_of_path(), and path.

Referenced by should_emit_struct_debug().

static int maybe_emit_file ( struct dwarf_file_data fd)
static
static int maybe_emit_file ( )
static
If the assembler will construct the file table, then translate the compiler
   internal file table number into the assembler file table number, and emit
   a .file directive if we haven't already emitted one yet.  The file table
   numbers are different because we prune debug info for unused variables and
   types, which may include filenames.   

References asm_out_file, dwarf_file_data::emitted_number, dwarf_file_data::filename, output_quoted_string(), and remap_debug_filename().

dw_loc_descr_ref mem_loc_descriptor ( rtx  rtl,
enum machine_mode  mode,
enum machine_mode  mem_mode,
enum var_init_status  initialized 
)
read
The following routine converts the RTL for a variable or parameter
   (resident in memory) into an equivalent Dwarf representation of a
   mechanism for getting the address of that same variable onto the top of a
   hypothetical "address evaluation" stack.

   When creating memory location descriptors, we are effectively transforming
   the RTL for a memory-resident object into its Dwarf postfix expression
   equivalent.  This routine recursively descends an RTL tree, turning
   it into Dwarf postfix code as it goes.

   MODE is the mode that should be assumed for the rtl if it is VOIDmode.

   MEM_MODE is the mode of the memory reference, needed to handle some
   autoincrement addressing modes.

   Return 0 if we can't represent the location.   

References add_loc_descr(), dw_vec_struct::array, avoid_constant_pool_reference(), base_type_for_mode(), based_loc_descr(), bswap_loc_descriptor(), clz_loc_descriptor(), const_ok_for_output(), convert_descriptor_to_mode(), dbx_reg_number(), dw_val_struct::dw_val_struct_union::dw_val_die_union::die, do_binop(), do_unop(), dtprel_false, dtprel_true, dw_loc_descr_struct::dw_loc_oprnd1, dw_loc_descr_struct::dw_loc_oprnd2, dw_val_class_const, dw_val_class_const_double, dw_val_class_die_ref, dw_val_class_loc, dw_val_class_vec, dw_vec_struct::elt_size, expansion_failed(), dw_val_struct::dw_val_struct_union::dw_val_die_union::external, double_int::from_shwi(), get_address_mode(), HOST_BITS_PER_WIDE_INT, insert_float(), int_loc_descriptor(), is_based_loc(), dw_vec_struct::length, loc_descr_plus_const(), mem_loc_descriptor(), minmax_loc_descriptor(), mode_for_size(), new_addr_loc_descr(), new_loc_descr(), one_reg_loc_descriptor(), parameter_ref_descriptor(), popcount_loc_descriptor(), print_rtl(), ptr_mode, resolve_one_addr(), rotate_loc_descriptor(), rtx_to_double_int(), scompare_loc_descriptor(), shift, size_of_int_loc_descriptor(), subreg_lowpart_p(), targetm, tls_mem_loc_descriptor(), TLS_MODEL_NONE, trunc_int_for_mode(), typed_binop(), ucompare_loc_descriptor(), dw_val_struct::v, dw_val_struct::val_class, dw_val_struct::dw_val_struct_union::val_die_ref, dw_val_struct::dw_val_struct_union::val_double, dw_val_struct::dw_val_struct_union::val_loc, dw_val_struct::dw_val_struct_union::val_vec, VAR_INIT_STATUS_INITIALIZED, VAR_INIT_STATUS_UNINITIALIZED, vec_safe_push(), and word_mode.

Referenced by bswap_loc_descriptor(), clz_loc_descriptor(), cst_pool_loc_descr(), dw_loc_list_1(), dwarf2out_frame_debug_cfa_expression(), gen_subprogram_die(), loc_descriptor(), loc_list_from_tree(), mem_loc_descriptor(), minmax_loc_descriptor(), popcount_loc_descriptor(), reg_loc_descriptor(), rotate_loc_descriptor(), scompare_loc_descriptor(), typed_binop(), and ucompare_loc_descriptor().

static tree member_declared_type ( const_tree  )
static
static tree member_declared_type ( )
inlinestatic
Return the type associated with a data member, make a special check
   for bit field types.   
static dw_die_ref modified_type_die ( tree  type,
int  is_const_type,
int  is_volatile_type,
dw_die_ref  context_die 
)
static
static void move_all_children ( )
static
Move all children from OLD_PARENT to NEW_PARENT.   

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

Referenced by generate_skeleton_bottom_up().

static void move_linkage_attr ( )
inlinestatic
Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
   to the location it would have been added, should we know its
   DECL_ASSEMBLER_NAME when we added other attributes.  This will
   probably improve compactness of debug info, removing equivalent
   abbrevs, and hide any differences caused by deferring the
   computation of the assembler name, triggered by e.g. PCH.   

References die_struct::die_attr, dw_attr_struct::dw_attr, and vec_safe_length().

Referenced by dwarf2out_finish().

static void move_marked_base_types ( )
static
Move base types marked by mark_base_types as early as possible
   in the CU, sorted by decreasing usage count both to make the
   uleb128 references as small as possible and to make sure they
   will have die_offset already computed by calc_die_sizes when
   sizes of typed stack loc ops is computed.   

References base_type_cmp(), comp_unit_die(), die_struct::die_child, die_struct::die_mark, die_struct::die_sib, and remove_child_with_prev().

Referenced by dwarf2out_finish().

static dw_loc_descr_ref multiple_reg_loc_descriptor ( rtx  rtl,
rtx  regs,
enum var_init_status  initialized 
)
static
Given an RTL of a register, return a location descriptor that
   designates a value that spans more than one register.   

References add_loc_descr(), add_loc_descr_op_piece(), dbx_reg_number(), new_loc_descr(), one_reg_loc_descriptor(), VAR_INIT_STATUS_INITIALIZED, and VAR_INIT_STATUS_UNINITIALIZED.

Referenced by reg_loc_descriptor().

static bool native_encode_initializer ( )
static
Helper function for tree_add_const_value_attribute.  Natively encode
   initializer INIT into an array.  Return true if successful.   

References count, host_integerp(), constructor_elt_d::index, int_byte_position(), int_size_in_bytes(), memcpy(), memset(), native_encode_expr(), tree_low_cst(), type(), and constructor_elt_d::value.

Referenced by tree_add_const_value_attribute().

static dw_loc_descr_ref new_addr_loc_descr ( )
inlinestatic
static dw_die_ref new_die ( )
inlinestatic
static dw_line_info_table * new_line_info_table ( )
static
static dw_loc_descr_ref new_loc_descr ( enum dwarf_location_atom  op,
unsigned HOST_WIDE_INT  oprnd1,
unsigned HOST_WIDE_INT  oprnd2 
)
inlinestatic
Return a pointer to a newly allocated location description.  Location
   descriptions are simple expression terms that can be strung
   together to form more complicated location (address) descriptions.   

References dw_loc_descr_struct::dw_loc_oprnd1, dw_loc_descr_struct::dw_loc_oprnd2, dw_val_class_unsigned_const, dw_val_struct::v, dw_val_struct::val_class, dw_val_struct::val_entry, and dw_val_struct::dw_val_struct_union::val_unsigned.

Referenced by add_const_value_attribute(), add_data_member_location_attribute(), add_loc_descr_op_piece(), add_pure_or_virtual_attribute(), address_of_int_loc_descriptor(), based_loc_descr(), bswap_loc_descriptor(), build_cfa_aligned_loc(), build_cfa_loc(), clz_loc_descriptor(), compare_loc_descriptor(), concat_loc_descriptor(), concatn_loc_descriptor(), convert_descriptor_to_mode(), descr_info_loc(), dw_loc_list_1(), gen_subprogram_die(), implicit_ptr_descriptor(), int_loc_descriptor(), int_shift_loc_descriptor(), loc_descr_plus_const(), loc_descriptor(), loc_list_for_address_of_addr_expr_of_indirect_ref(), loc_list_from_tree(), mem_loc_descriptor(), minmax_loc_descriptor(), multiple_reg_loc_descriptor(), new_addr_loc_descr(), new_loc_descr_op_bit_piece(), new_reg_loc_descr(), one_reg_loc_descriptor(), optimize_location_into_implicit_ptr(), parameter_ref_descriptor(), popcount_loc_descriptor(), reg_loc_descriptor(), resolve_addr_in_expr(), rotate_loc_descriptor(), scompare_loc_descriptor(), string_cst_pool_decl(), typed_binop(), and ucompare_loc_descriptor().

static dw_loc_descr_ref new_loc_descr_op_bit_piece ( )
static
Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
   if it is not possible.   

References new_loc_descr().

Referenced by dw_sra_loc_expr().

static dw_loc_list_ref new_loc_list ( dw_loc_descr_ref  expr,
const char *  begin,
const char *  end,
const char *  section 
)
inlinestatic
Return a new location list, given the begin and end range, and the
   expression.   

References dw_loc_list_struct::begin, dw_loc_list_struct::begin_entry, dw_loc_list_struct::end, dw_loc_list_struct::expr, and dw_loc_list_struct::section.

Referenced by convert_cfa_to_fb_loc_list(), dw_loc_list(), and loc_list_from_tree().

static dw_loc_descr_ref new_reg_loc_descr ( )
inlinestatic
Return a pointer to a newly allocated location description for
   REG and OFFSET.   

References new_loc_descr().

Referenced by based_loc_descr(), build_cfa_aligned_loc(), and build_cfa_loc().

static dw_loc_descr_ref one_reg_loc_descriptor ( unsigned  int,
enum  var_init_status 
)
static
static dw_loc_descr_ref one_reg_loc_descriptor ( )
static
Return a location descriptor that designates a machine register for
   a given hard register number.   

References add_loc_descr(), new_loc_descr(), and VAR_INIT_STATUS_UNINITIALIZED.

static external_ref_hash_type optimize_external_refs ( )
static
DIE is a unit; look through all the DIE references to see if there are
   any external references to types, and if so, create local stubs for
   them which will be applied in build_abbrev_table.  This is useful because
   references to local DIEs are smaller.   

References hash_table< Descriptor, Allocator >::create(), dwarf2_build_local_stub(), map, optimize_external_refs_1(), and hash_table< Descriptor, Allocator >::traverse().

Referenced by output_comdat_type_unit(), and output_comp_unit().

static void optimize_external_refs_1 ( )
static
Subroutine of optimize_external_refs, below.

   If we see a type skeleton, record it as our stub.  If we see external
   references, remember how many we've seen.   

References AT_class(), AT_ref(), die_struct::die_attr, dw_val_class_die_ref, get_AT_ref(), is_type_die(), lookup_external_ref(), external_ref::n_refs, and external_ref::stub.

Referenced by optimize_external_refs().

static void optimize_location_into_implicit_ptr ( )
static
Helper function of resolve_addr.  DIE had DW_AT_location of
   DW_OP_addr alone, which referred to DECL in DW_OP_addr's operand
   and DW_OP_addr couldn't be resolved.  resolve_addr has already
   removed the DW_AT_location attribute.  This function attempts to
   add a new DW_AT_location attribute with DW_OP_GNU_implicit_pointer
   to it or DW_AT_const_value attribute, if possible.   

References add_AT_loc(), dw_val_struct::dw_val_struct_union::dw_val_die_union::die, dw_loc_descr_struct::dw_loc_oprnd1, dw_val_class_die_ref, dw_val_struct::dw_val_struct_union::dw_val_die_union::external, get_AT(), host_integerp(), lookup_decl_die(), new_loc_descr(), offset, string_cst_pool_decl(), tree_add_const_value_attribute(), tree_low_cst(), dw_val_struct::v, dw_val_struct::val_class, and dw_val_struct::dw_val_struct_union::val_die_ref.

Referenced by resolve_addr().

static void optimize_location_lists ( )
static
Optimize location lists referenced from DIE
   children and share them whenever possible.   

References hash_table< Descriptor, Allocator >::create(), hash_table< Descriptor, Allocator >::dispose(), and optimize_location_lists_1().

Referenced by dwarf2out_finish().

static void optimize_location_lists_1 ( )
static
static unsigned optimize_macinfo_range ( unsigned int  idx,
vec< macinfo_entry, va_gc > *  files,
macinfo_hash_type macinfo_htab 
)
static
Attempt to make a sequence of define/undef macinfo ops shareable with
   other compilation unit .debug_macinfo sections.  IDX is the first
   index of a define/undef, return the number of ops that should be
   emitted in a comdat .debug_macinfo section and emit
   a DW_MACRO_GNU_transparent_include entry referencing it.
   If the define/undef entry should be emitted normally, return 0.   

References checksum_uleb128(), macinfo_struct::code, count, hash_table< Descriptor, Allocator >::create(), hash_table< Descriptor, Allocator >::elements(), hash_table< Descriptor, Allocator >::find_slot(), first, HOST_WIDE_INT, HOST_WIDE_INT_PRINT_UNSIGNED, macinfo_struct::info, hash_table< Descriptor, Allocator >::is_created(), macinfo_struct::lineno, memcpy(), output_macinfo_op(), strlen(), and vec_safe_is_empty().

Referenced by output_macinfo().

static bool optimize_one_addr_into_implicit_ptr ( )
static
Helper function of resolve_addr_in_expr.  LOC is
   a DW_OP_addr followed by DW_OP_stack_value, either at the start
   of exprloc or after DW_OP_{,bit_}piece, and val_addr can't be
   resolved.  Replace it (both DW_OP_addr and DW_OP_stack_value)
   with DW_OP_GNU_implicit_pointer if possible
   and return true, if unsuccessful, return false.   

References build_array_type(), build_index_type(), build_string(), dw_val_struct::dw_val_struct_union::dw_val_die_union::die, dw_loc_descr_struct::dw_loc_next, dw_loc_descr_struct::dw_loc_oprnd1, dw_loc_descr_struct::dw_loc_oprnd2, dw_val_class_die_ref, dw_val_struct::dw_val_struct_union::dw_val_die_union::external, get_AT(), len, lookup_decl_die(), offset, string_cst_pool_decl(), strlen(), dw_val_struct::v, dw_val_struct::dw_val_struct_union::val_addr, dw_val_struct::val_class, dw_val_struct::dw_val_struct_union::val_die_ref, dw_val_struct::val_entry, and dw_val_struct::dw_val_struct_union::val_int.

Referenced by resolve_addr_in_expr().

static void output_abbrev_section ( )
static
Output the .debug_abbrev section which defines the DIE abbreviation
   table.   

References abbrev_die_table_in_use, dw2_asm_output_data(), and output_die_abbrevs().

Referenced by dwarf2out_finish().

static void output_addr_table ( )
static
Produce the .debug_addr section.   

References addr_index_table, output_addr_table_entry(), and switch_to_section().

Referenced by dwarf2out_finish().

static void output_aranges ( unsigned  long)
static

Referenced by dwarf2out_finish().

static void output_aranges ( )
static
static void output_call_frame_info ( int  )
static

Referenced by dwarf2out_frame_finish().

static void output_comdat_type_unit ( comdat_type_node )
static

Referenced by dwarf2out_finish().

static void output_comp_unit ( dw_die_ref  ,
int   
)
static

Referenced by dwarf2out_finish().

static void output_compilation_unit_header ( )
static
Output the compilation unit that appears at the beginning of the
   .debug_info section, and precedes the DIE descriptions.   

References dw2_asm_output_data(), and dw2_asm_output_offset().

Referenced by output_comdat_type_unit(), and output_comp_unit().

static void output_die ( )
static
Output the DIE and its attributes.  Called recursively to generate
   the definitions of each child DIE.   

References dw_vec_struct::array, asm_out_file, AT_class(), AT_flag(), AT_index(), AT_int(), AT_lbl(), AT_loc(), AT_ref(), AT_ref_external(), AT_string(), AT_unsigned(), AT_vms_delta1(), AT_vms_delta2(), die_struct::comdat_type_p, constant_size(), die_struct::die_abbrev, die_struct::die_attr, die_struct::die_child, die_struct::die_id, die_struct::die_offset, die_struct::die_symbol_or_type_node::die_symbol, die_struct::die_tag, die_struct::die_symbol_or_type_node::die_type_node, dw2_asm_output_data(), dw2_asm_output_data_sleb128(), dw2_asm_output_data_uleb128(), dw2_asm_output_delta(), dw2_asm_output_nstring(), dw2_asm_output_offset(), dw2_asm_output_vms_delta(), dw_attr_struct::dw_attr, dw_attr_struct::dw_attr_val, dw_val_class_addr, dw_val_class_const, dw_val_class_const_double, dw_val_class_data8, dw_val_class_die_ref, dw_val_class_fde_ref, dw_val_class_file, dw_val_class_flag, dw_val_class_high_pc, dw_val_class_lbl_id, dw_val_class_lineptr, dw_val_class_loc, dw_val_class_loc_list, dw_val_class_macptr, dw_val_class_offset, dw_val_class_range_list, dw_val_class_str, dw_val_class_unsigned_const, dw_val_class_vec, dw_val_class_vms_delta, dwarf_attr_name(), dwarf_tag_name(), dw_vec_struct::elt_size, extract_int(), dwarf_file_data::filename, first, indirect_string_node::form, get_AT_low_pc(), double_int::high, HOST_BITS_PER_CHAR, HOST_BITS_PER_WIDE_INT, indirect_string_node::label, len, dw_vec_struct::length, double_int::low, maybe_emit_file(), output_attr_index_or_value(), output_die(), output_die_symbol(), output_loc_sequence(), output_range_list_offset(), output_signature(), comdat_type_struct::signature, size_of_locs(), dw_val_struct::v, dw_val_struct::dw_val_struct_union::val_data8, dw_val_struct::dw_val_struct_union::val_double, dw_val_struct::dw_val_struct_union::val_fde_index, dw_val_struct::dw_val_struct_union::val_file, dw_val_struct::dw_val_struct_union::val_offset, dw_val_struct::dw_val_struct_union::val_str, and dw_val_struct::dw_val_struct_union::val_vec.

static void output_die_abbrevs ( unsigned  long,
dw_die_ref   
)
static
static void output_die_abbrevs ( )
static
static void output_die_symbol ( dw_die_ref  )
static

Referenced by output_die().

static void output_die_symbol ( )
inlinestatic
Output a symbol we can use to refer to this DIE from another CU.   

References asm_out_file, die_struct::comdat_type_p, die_struct::die_id, die_struct::die_symbol_or_type_node::die_symbol, and targetm.

static void output_file_names ( )
static
static int output_index_string ( )
static
A helper function for dwarf2out_finish called through
   htab_traverse.  Output the indexed string.   

References assemble_string(), indirect_string_node::form, indirect_string_node::index, indirect_string_node::refcount, indirect_string_node::str, and strlen().

Referenced by output_indirect_strings().

static int output_index_string_offset ( )
static
A helper function for output_indirect_strings called through
   htab_traverse.  Output the offset to a string and update the
   current offset.   

References dw2_asm_output_data(), indirect_string_node::form, indirect_string_node::index, offset, indirect_string_node::refcount, indirect_string_node::str, and strlen().

Referenced by output_indirect_strings().

static int output_indirect_string ( void **  ,
void *   
)
static
And now, the support for symbolic debugging information.   
.debug_str support.   

Referenced by output_indirect_strings().

static int output_indirect_string ( )
static
A helper function for dwarf2out_finish called through
   htab_traverse.  Emit one queued .debug_str string.   

References asm_out_file, assemble_string(), find_string_form(), indirect_string_node::form, indirect_string_node::label, indirect_string_node::refcount, indirect_string_node::str, and strlen().

static void output_indirect_strings ( )
static
static void output_line_info ( bool  )
static

Referenced by dwarf2out_finish().

static void output_line_info ( )
static
Output the source line number correspondence information.  This
   information goes into the .debug_line section.   

References asm_out_file, dw2_asm_output_data(), dw2_asm_output_delta(), dw_line_info_table_struct::in_use, output_file_names(), output_one_line_info_table(), and table.

static void output_loc_list ( dw_loc_list_ref  )
static

Referenced by output_location_lists().

static void output_loc_list_offset ( )
static
static void output_loc_operands ( )
static
Output location description stack opcode's operands (if any).
   The for_eh_or_skip parameter controls whether register numbers are
   converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
   hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
   info).  This should be suppressed for the cases that have not been converted
   (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.   

References dw_vec_struct::array, asm_out_file, dw_val_struct::dw_val_struct_union::dw_val_die_union::die, dw_loc_descr_struct::dtprel, dw2_asm_output_addr_rtx(), dw2_asm_output_data(), dw2_asm_output_data_sleb128(), dw2_asm_output_data_uleb128(), dw2_asm_output_offset(), dw_loc_descr_struct::dw_loc_addr, dw_loc_descr_struct::dw_loc_oprnd1, dw_loc_descr_struct::dw_loc_oprnd2, dw_val_class_addr, dw_val_class_const, dw_val_class_const_double, dw_val_class_die_ref, dw_val_class_loc, dw_val_class_unsigned_const, dw_val_class_vec, dw_vec_struct::elt_size, extract_int(), first, get_base_type_offset(), get_ref_die_offset(), get_ref_die_offset_label(), double_int::high, HOST_BITS_PER_CHAR, HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, addr_table_entry_struct::index, len, dw_vec_struct::length, double_int::low, offset, output_loc_sequence(), size_of_locs(), size_of_uleb128(), targetm, dw_val_struct::v, dw_val_struct::dw_val_struct_union::val_addr, dw_val_struct::val_class, dw_val_struct::dw_val_struct_union::val_die_ref, dw_val_struct::dw_val_struct_union::val_double, dw_val_struct::val_entry, dw_val_struct::dw_val_struct_union::val_int, dw_val_struct::dw_val_struct_union::val_loc, dw_val_struct::dw_val_struct_union::val_unsigned, and dw_val_struct::dw_val_struct_union::val_vec.

Referenced by output_loc_sequence().

void output_loc_sequence ( )
Output a sequence of location operations.  
   The for_eh_or_skip parameter controls whether register numbers are
   converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
   hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
   info).  This should be suppressed for the cases that have not been converted
   (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.   

References dw2_asm_output_data(), dw_loc_descr_struct::dw_loc_next, dwarf_stack_op_name(), and output_loc_operands().

Referenced by output_cfa_loc(), output_die(), output_loc_list(), and output_loc_operands().

void output_loc_sequence_raw ( )
static void output_location_lists ( dw_die_ref  )
static
static void output_location_lists ( )
static
Output all location lists for the DIE and its children.   

References AT_class(), AT_loc_list(), die_struct::die_attr, dw_val_class_loc_list, output_loc_list(), and output_location_lists().

static void output_pubnames ( vec< pubname_entry, va_gc > *  )
static

Referenced by dwarf2out_finish().

static void output_range_list_offset ( )
static
Output a range_list offset into the debug_range section.  Emit a
   relocated reference if val_entry is NULL, otherwise, emit an
   indirect reference.   

References dw2_asm_output_data(), dw2_asm_output_offset(), dw_attr_struct::dw_attr, dw_attr_struct::dw_attr_val, dwarf_attr_name(), HOST_WIDE_INT_PRINT_HEX, dw_val_struct::v, dw_val_struct::val_entry, and dw_val_struct::dw_val_struct_union::val_offset.

Referenced by output_die().

static void output_signature ( )
inlinestatic
Output a type signature.   

References dw2_asm_output_data().

Referenced by output_comdat_type_unit(), and output_die().

static void output_skeleton_debug_sections ( )
static
static void output_value_format ( dw_attr_ref  )
static

Referenced by output_die_abbrevs().

static void output_value_format ( )
static
Output the encoding of an attribute value.   

References dw2_asm_output_data_uleb128(), dwarf_form_name(), and value_format().

static dw_die_ref pop_compile_unit ( dw_die_ref  )
static

Referenced by break_out_includes().

static dw_die_ref pop_compile_unit ( )
static
Close an include-file CU and reopen the enclosing one.   

References die_struct::die_sib.

static void pop_decl_scope ( )
inlinestatic
static dw_loc_descr_ref popcount_loc_descriptor ( rtx  rtl,
enum machine_mode  mode,
enum machine_mode  mem_mode 
)
static
POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
   const1 is DW_OP_lit1 or corresponding typed constant):
       const0 DW_OP_swap
   L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
       DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
   L2: DW_OP_drop

   PARITY is similar:
   L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
       DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
   L2: DW_OP_drop   

References add_loc_descr(), dw_loc_descr_struct::dw_loc_oprnd1, dw_val_class_loc, mem_loc_descriptor(), new_loc_descr(), dw_val_struct::v, dw_val_struct::val_class, dw_val_struct::dw_val_struct_union::val_loc, and VAR_INIT_STATUS_INITIALIZED.

Referenced by mem_loc_descriptor().

static void premark_types_used_by_global_vars ( )
static
Mark all members of types_used_by_vars_entry as perennial.   

References premark_types_used_by_global_vars_helper(), and types_used_by_vars_hash.

Referenced by prune_unused_types().

static int premark_types_used_by_global_vars_helper ( void **  slot,
void *  data 
)
static
Helper function of premark_types_used_by_global_vars which gets called
   through htab_traverse.

   Marks the DIE of a given type in *SLOT as perennial, so it never gets
   marked as unused by prune_unused_types. The DIE of the type is marked
   only if the global variable using the type will actually be emitted.   

References symtab_node_base::definition, die_struct::die_parent, die_struct::die_perennial_p, lookup_type_die(), varpool_node::symbol, types_used_by_vars_entry::type, types_used_by_vars_entry::var_decl, and varpool_get_node().

Referenced by premark_types_used_by_global_vars().

static void premark_used_types ( )
static
Mark all members of used_types_hash as perennial.   

References premark_used_types_helper().

Referenced by gen_subprogram_die().

static int premark_used_types_helper ( )
static
Helper function of premark_used_types() which gets called through
   htab_traverse.

   Marks the DIE of a given type in *SLOT as perennial, so it never gets
   marked as unused by prune_unused_types.   

References die_struct::die_perennial_p, lookup_type_die(), and type().

Referenced by premark_used_types().

static void print_die ( dw_die_ref  ,
FILE *   
)
static
static void print_signature ( )
inlinestatic
Print a type signature in hex.   

Referenced by print_die().

static void print_spaces ( FILE *  )
static

Referenced by print_die().

static void print_spaces ( )
inlinestatic
Indent the line the number of spaces given by print_indent.   
static void process_scope_var ( )
static
Process variable DECL (or variable with origin ORIGIN) within
   block STMT and add it to CONTEXT_DIE.   

References add_child_die(), die_struct::die_parent, dwarf2out_imported_module_or_decl_1(), gen_decl_die(), lookup_decl_die(), and lookup_type_die().

Referenced by decls_for_scope().

static void prune_unmark_dies ( dw_die_ref  )
static
static void prune_unmark_dies ( )
static
Clear the marks for a die and its children.
   Be cool if the mark isn't set.   

References die_struct::die_mark, and prune_unmark_dies().

static void prune_unused_types_mark_generic_parms_dies ( dw_die_ref  )
static

Referenced by prune_unused_types_mark().

static void prune_unused_types_mark_generic_parms_dies ( )
static
Mark the generic parameters and arguments children DIEs of DIE.   

References die_struct::die_child, die_struct::die_sib, is_template_parameter(), and prune_unused_types_mark().

static void prune_unused_types_prune ( dw_die_ref  )
static
static void prune_unused_types_prune ( )
static
static void prune_unused_types_update_strings ( )
static
static void prune_unused_types_walk ( dw_die_ref  )
static
static void prune_unused_types_walk ( )
static
static void prune_unused_types_walk_attribs ( dw_die_ref  )
static
static void prune_unused_types_walk_local_classes ( )
static
For local classes, look if any static member functions were emitted
   and if so, mark them.   

References die_struct::die_definition, die_struct::die_mark, die_struct::die_tag, get_AT_flag(), and prune_unused_types_mark().

Referenced by prune_unused_types_walk().

static void push_decl_scope ( tree  )
static
static void push_decl_scope ( )
static
Push a new declaration scope.   

References vec_safe_push().

static void push_dw_line_info_entry ( dw_line_info_table table,
enum dw_line_info_opcode  opcode,
unsigned int  val 
)
static
Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.   

References dw_line_info_table_struct::entries, dw_line_info_struct::opcode, dw_line_info_struct::val, and vec_safe_push().

Referenced by dwarf2out_source_line().

static dw_die_ref push_new_compile_unit ( dw_die_ref  ,
dw_die_ref   
)
static

Referenced by break_out_includes().

static dw_die_ref push_new_compile_unit ( )
static
Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
   for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
   DIE that marks the start of the DIEs for this include file.   

References die_struct::die_sib, gen_compile_unit_die(), and get_AT_string().

static void record_comdat_symbol_number ( dw_die_ref  cu,
cu_hash_type  htable,
unsigned int  sym_num 
)
static
static enum dwarf_tag record_type_tag ( )
static
static tree reference_to_unused ( tree tp,
int *  walk_subtrees,
void *  data 
)
static
Determine whether the evaluation of EXPR references any variables
   or functions which aren't otherwise used (and therefore may not be
   output).   

References cgraph_get_node(), cgraph_global_info_ready, symtab_node_base::definition, varpool_node::symbol, and varpool_get_node().

Referenced by rtl_for_decl_init().

static dw_loc_descr_ref reg_loc_descriptor ( rtx  ,
enum  var_init_status 
)
static
static dw_loc_descr_ref reg_loc_descriptor ( )
static
Return a location descriptor that designates a machine register or
   zero if there is none.   

References add_loc_descr(), dbx_reg_number(), eliminate_regs(), mem_loc_descriptor(), multiple_reg_loc_descriptor(), new_loc_descr(), one_reg_loc_descriptor(), and targetm.

static void remove_addr_table_entry ( addr_table_entry )
static
static void remove_addr_table_entry ( )
static
Remove an entry from the addr table by decrementing its refcount.
   Strictly, decrementing the refcount would be enough, but the
   assertion that the entry is actually in the table has found
   bugs.   

References addr_index_table, addr_table_entry_struct::index, and addr_table_entry_struct::refcount.

static dw_die_ref remove_child_or_replace_with_skeleton ( dw_die_ref  unit,
dw_die_ref  child,
dw_die_ref  prev 
)
static
Remove the CHILD DIE from its parent, possibly replacing it with a cloned
   declaration.  The original DIE is moved to a new compile unit so that
   existing references to it follow it to the new location.  If any of the
   original DIE's descendants is a declaration, we need to replace the
   original DIE with a skeleton tree and move the declarations back into the
   skeleton tree.   

References add_child_die(), die_struct::comdat_type_p, copy_declaration_context(), die_struct::die_id, die_struct::die_symbol_or_type_node::die_type_node, generate_skeleton(), remove_child_with_prev(), and replace_child().

Referenced by break_out_comdat_types().

static void remove_child_TAG ( dw_die_ref  ,
enum  dwarf_tag 
)
static

Referenced by gen_subprogram_die().

static void remove_child_TAG ( )
static
Remove child DIE whose die_tag is TAG.  Do nothing if no child
   matches TAG.   

References die_struct::die_child, die_struct::die_sib, die_struct::die_tag, and remove_child_with_prev().

static void remove_child_with_prev ( )
static
Remove CHILD from its parent.  PREV must have the property that
   PREV->DIE_SIB == CHILD.  Does not alter CHILD.   

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

Referenced by break_out_includes(), generate_skeleton_bottom_up(), move_marked_base_types(), remove_child_or_replace_with_skeleton(), remove_child_TAG(), and splice_child_die().

static void remove_loc_list_addr_table_entries ( )
static
Given a location list, remove all addresses it refers to from the
   address_table.   

References dw_loc_descr_struct::dw_loc_next, dw_loc_descr_struct::dw_loc_oprnd1, addr_table_entry_struct::index, remove_addr_table_entry(), and dw_val_struct::val_entry.

Referenced by resolve_addr().

static void replace_child ( )
static
Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
   PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.   

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

Referenced by generate_skeleton_bottom_up(), and remove_child_or_replace_with_skeleton().

static bool resolve_addr_in_expr ( )
static
Helper function for resolve_addr, handle one location
   expression, return false if at least one CONST_STRING or SYMBOL_REF in
   the location list couldn't be resolved.   

References add_loc_descr(), die_struct::die_tag, dw_val_class_addr, dw_val_class_decl_ref, dw_val_class_die_ref, dw_val_class_unsigned_const, get_AT_unsigned(), int_loc_descriptor(), lookup_decl_die(), new_loc_descr(), optimize_one_addr_into_implicit_ptr(), resolve_one_addr(), size_of_int_loc_descriptor(), and size_of_loc_descr().

Referenced by resolve_addr().

static int resolve_one_addr ( rtx ,
void *   
)
static
static int resolve_one_addr ( )
static
Helper function for resolve_addr, attempt to resolve
   one CONST_STRING, return non-zero if not successful.  Similarly verify that
   SYMBOL_REFs refer to variables emitted in the current CU.   

References build_array_type(), build_index_type(), build_string(), for_each_rtx(), len, lookup_constant_def(), resolve_one_addr(), strlen(), and vec_safe_push().

static void retry_incomplete_types ( )
static
Walk through the list of incomplete types again, trying once more to
   emit full debugging info for them.   

References comp_unit_die(), DINFO_USAGE_DIR_USE, gen_type_die(), should_emit_struct_debug(), and vec_safe_length().

Referenced by dwarf2out_finish().

static dw_loc_descr_ref rotate_loc_descriptor ( rtx  rtl,
enum machine_mode  mode,
enum machine_mode  mem_mode 
)
static
ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
   DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
   [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
   DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or

   ROTATERT is similar:
   DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
   DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
   [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or   

References add_loc_descr(), HOST_BITS_PER_WIDE_INT, mem_loc_descriptor(), new_loc_descr(), and VAR_INIT_STATUS_INITIALIZED.

Referenced by mem_loc_descriptor().

static double_int round_up_to_align ( )
inlinestatic
Return the result of rounding T up to ALIGN.   

References double_int::div(), and double_int::from_uhwi().

Referenced by field_byte_offset().

static rtx rtl_for_decl_init ( )
static
Generate an RTL constant from a decl initializer INIT with decl type TYPE,
   for use in a later add_const_value_attribute call.   

References build_vector_from_ctor(), compare_tree_int(), expand_expr(), EXPAND_INITIALIZER, gen_rtx_MEM(), initializer_constant_valid_p(), integer_zerop(), reference_to_unused(), and strlen().

Referenced by rtl_for_decl_location(), and tree_add_const_value_attribute().

static rtx rtl_for_decl_location ( tree  )
static
static rtx rtl_for_decl_location ( )
static
static int same_attr_p ( dw_attr_ref  ,
dw_attr_ref  ,
int *   
)
static

Referenced by same_die_p().

static int same_attr_p ( )
static
Do the attributes look the same?   

References dw_attr_struct::dw_attr, dw_attr_struct::dw_attr_val, and same_dw_val_p().

static int same_die_p ( dw_die_ref  ,
dw_die_ref  ,
int *   
)
static
static int same_die_p_wrap ( dw_die_ref  ,
dw_die_ref   
)
static

Referenced by check_duplicate_cu().

static int same_die_p_wrap ( )
static
Do the dies look the same?  Wrapper around same_die_p.   

References same_die_p(), and unmark_all_dies().

static int same_dw_val_p ( const dw_val_node ,
const dw_val_node ,
int *   
)
static

Referenced by same_attr_p(), and same_loc_p().

static int same_loc_p ( dw_loc_descr_ref  ,
dw_loc_descr_ref  ,
int *   
)
static

Referenced by same_dw_val_p().

static int same_loc_p ( )
inlinestatic
Do the location expressions look same?   

References dw_loc_descr_struct::dw_loc_oprnd1, dw_loc_descr_struct::dw_loc_oprnd2, and same_dw_val_p().

static void save_macinfo_strings ( )
static
Save any strings needed by the macinfo table in the debug str
   table.  All strings must be collected into the table by the time
   index_string is called.   

References macinfo_struct::code, find_AT_string(), macinfo_struct::info, len, set_indirect_string(), and strlen().

Referenced by dwarf2out_finish().

static void schedule_generic_params_dies_gen ( tree  t)
static
static void schedule_generic_params_dies_gen ( )
static
Schedule the generation of the generic parameter dies for the
  instance of generic type T. The proper generation itself is later
  done by gen_scheduled_generic_parms_dies.  

References generic_type_p(), vec_alloc(), and vec_safe_push().

static dw_die_ref scope_die_for ( )
static
Return the DIE for the scope that immediately contains this type.
   Non-named types that do not involve a function-local type get global
   scope.  Named types nested in namespaces or other types get their
   containing scope.  All other types (i.e. function-local named types) get
   the current active scope.   

References comp_unit_die(), current_function_decl, DINFO_LEVEL_TERSE, get_context_die(), lookup_decl_die(), lookup_type_die_strip_naming_typedef(), and uses_local_type().

static const char* secname_for_decl ( )
static
We need to figure out what section we should use as the base for the
   address ranges where a given location is valid.
   1. If this particular DECL has a section associated with it, use that.
   2. If this function has a section associated with it, use that.
   3. Otherwise, use the text section.
   XXX: If you split a variable across multiple sections, we won't notice.   

References cfun, current_function_decl, in_cold_section_p, and text_section_label.

Referenced by convert_cfa_to_fb_loc_list(), and dw_loc_list().

static void set_AT_ref_external ( dw_attr_ref  ,
int   
)
inlinestatic

Referenced by build_abbrev_table().

static void set_block_abstract_flags ( )
static
Given a pointer to some BLOCK node, and a boolean value to set the
   "abstract" flags to, set that value into the BLOCK_ABSTRACT flag for
   the given block, and for all local decls and all local sub-blocks
   (recursively) which are contained therein.   

References set_decl_abstract_flags().

Referenced by set_decl_abstract_flags().

static void set_block_origin_self ( )
static
Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
   given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
   that it points to the node itself, thus indicating that the node is its
   own (abstract) origin.  Additionally, if the BLOCK_ABSTRACT_ORIGIN for
   the given node is NULL, recursively descend the decl/block tree which
   it is the root of, and for each other ..._DECL or BLOCK node contained
   therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
   still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
   values to point to themselves.   

References set_decl_origin_self().

Referenced by set_decl_origin_self().

static void set_cur_line_info_table ( section )
static
static void set_cur_line_info_table ( )
static
Lookup the "current" table into which we emit line info, so
   that we don't have to do it for every source line.   

References cold_end_label, cold_text_section_line_info, dw_line_info_table_struct::end_label, in_cold_section_p, dw_line_info_table_struct::is_stmt, new_line_info_table(), table, text_section, text_section_line_info, and vec_safe_push().

static void set_decl_abstract_flags ( tree  ,
int   
)
static
static void set_decl_abstract_flags ( )
static
Given a pointer to some ..._DECL node, and a boolean value to set the
   "abstract" flags to, set that value into the DECL_ABSTRACT flag for the
   given decl, and (in the case where the decl is a FUNCTION_DECL) also
   set the abstract flags for all of the parameters, local vars, local
   blocks and sub-blocks (recursively) to the same setting.   

References set_block_abstract_flags().

static void set_decl_origin_self ( tree  )
static
Forward declare these functions, because they are mutually recursive
  with their set_block_* pairing functions.   

Referenced by gen_decl_die(), and set_block_origin_self().

static void set_decl_origin_self ( )
static
Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
   the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
   node to so that it points to the node itself, thus indicating that the
   node represents its own (abstract) origin.  Additionally, if the
   DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
   the decl/block tree of which the given node is the root of, and for
   each other ..._DECL or BLOCK node contained therein whose
   DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
   set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
   point to themselves.   

References set_block_origin_self().

static void set_indirect_string ( )
static
Call this function directly to bypass AT_string_form's logic to put
   the string inline in the die.  

References dw2_string_counter, indirect_string_node::form, indirect_string_node::index, and indirect_string_node::label.

Referenced by find_string_form(), and save_macinfo_strings().

static dw_die_ref setup_namespace_context ( tree  ,
dw_die_ref   
)
static
static dw_die_ref setup_namespace_context ( )
static
Force out any required namespaces to be able to output DECL,
   and return the new context_die for it, if it's changed.   

References force_decl_die().

static int should_move_die_to_comdat ( dw_die_ref  )
static

Referenced by break_out_comdat_types().

static int should_move_die_to_comdat ( )
static
Return non-zero if this is a type DIE that should be moved to a
   COMDAT .debug_types section.   

References contains_subprogram_definition(), die_struct::die_tag, get_AT(), is_declaration_die(), and is_nested_in_subprogram().

static unsigned int simple_decl_align_in_bits ( const_tree  )
static

Referenced by field_byte_offset().

static unsigned simple_decl_align_in_bits ( )
inlinestatic
static unsigned int simple_type_align_in_bits ( const_tree  )
static

Referenced by field_byte_offset().

static unsigned simple_type_align_in_bits ( )
inlinestatic
Given a pointer to a tree node, return the alignment in bits for
   it, or else return BITS_PER_WORD if the node actually turns out to
   be an ERROR_MARK node.   
static unsigned HOST_WIDE_INT simple_type_size_in_bits ( )
inlinestatic
Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
   node, return the size in bits for the type if it is a constant, or else
   return the alignment for the type if the type's size is not constant, or
   else return BITS_PER_WORD if the type actually turns out to be an
   ERROR_MARK node.   

References host_integerp(), and tree_low_cst().

static bool single_element_loc_list_p ( )
static
Return if the loc_list has only single element and thus can be represented
   as location description.    

References dw_loc_list_struct::dw_loc_next, and dw_loc_list_struct::ll_symbol.

Referenced by add_AT_location_description(), add_bound_info(), and gen_variable_die().

static unsigned long size_of_aranges ( )
static
static unsigned long size_of_die ( dw_die_ref  )
static
static unsigned long size_of_int_loc_descriptor ( )
static
Return size_of_locs (int_loc_descriptor (i)) without
   actually allocating it.   

References clz_hwi(), ctz_hwi(), HOST_BITS_PER_WIDE_INT, size_of_int_loc_descriptor(), size_of_int_shift_loc_descriptor(), size_of_sleb128(), and size_of_uleb128().

static unsigned long size_of_int_shift_loc_descriptor ( )
static
Return size_of_locs (int_shift_loc_descriptor (i, shift))
   without actually allocating it.   

References size_of_int_loc_descriptor().

Referenced by size_of_int_loc_descriptor().

static unsigned long size_of_pubnames ( vec< pubname_entry, va_gc > *  )
static

Referenced by output_pubnames().

static unsigned long size_of_pubnames ( )
static
Return the size of the .debug_pubnames or .debug_pubtypes table
   generated for the compilation unit.   

References include_pubname_in_output(), pubname_struct::name, and strlen().

static void splice_child_die ( dw_die_ref  ,
dw_die_ref   
)
static

Referenced by gen_member_die().

static void splice_child_die ( )
static
Move CHILD, which must be a child of PARENT or the DIE for which PARENT
   is the specification, to the end of PARENT's list of children.
   This is done by removing and re-adding it.   

References add_child_die(), die_struct::die_child, die_struct::die_parent, die_struct::die_sib, get_AT_ref(), and remove_child_with_prev().

static rtx string_cst_pool_decl ( )
static
static dw_die_ref strip_naming_typedef ( tree  ,
dw_die_ref   
)
static
static dw_die_ref strip_naming_typedef ( )
inlinestatic
Given a TYPE_DIE representing the type TYPE, if TYPE is an
   anonymous type named by the typedef TYPE_DIE, return the DIE of the
   anonymous type instead the one of the naming typedef.   

References die_struct::die_tag, get_AT_ref(), and is_naming_typedef_decl().

static char* stripattributes ( const char *  )
static
Forward declarations for functions defined in this file.   
static char* stripattributes ( )
inlinestatic
Return a pointer to a copy of the section string name S with all
   attributes stripped off, and an asterisk prepended (for assemble_name).   

References strlen().

static dw_die_ref subrange_type_die ( tree  ,
tree  ,
tree  ,
dw_die_ref   
)
static

Referenced by modified_type_die().

static dw_die_ref subrange_type_die ( )
static
Given a pointer to a tree node for a subrange type, return a pointer
    to a DIE that describes the given type.   

References add_AT_unsigned(), add_bound_info(), comp_unit_die(), int_size_in_bytes(), new_die(), and size_in_bytes().

static void switch_to_eh_frame_section ( )
static
Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
   switch to the data section instead, and write out a synthetic start label
   for collect2 the first time around.   

References asm_out_file, data_section, eh_frame_section, floor_log2(), get_file_function_name(), get_section(), switch_to_section(), and targetm.

Referenced by switch_to_frame_table_section().

static void switch_to_frame_table_section ( )
static
Switch [BACK] to the eh or debug frame table section, depending on
   FOR_EH.   

References get_section(), switch_to_eh_frame_section(), and switch_to_section().

Referenced by output_call_frame_info(), and output_fde().

static dw_die_ref template_parameter_pack_die ( tree  parm_pack,
tree  parm_pack_args,
dw_die_ref  parent_die 
)
static
Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
   PARM_PACK must be a template parameter pack. The returned DIE
   will be child DIE of PARENT_DIE.   

References add_name_and_src_coords_attributes(), generic_parameter_die(), and new_die().

Referenced by gen_generic_params_dies().

static dw_loc_descr_ref tls_mem_loc_descriptor ( )
static
Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
   failed.   

References get_base_address(), loc_descr_plus_const(), and loc_descriptor_from_tree().

Referenced by loc_descriptor(), and mem_loc_descriptor().

static bool tree_add_const_value_attribute ( )
static
Attach a DW_AT_const_value attribute to DIE. The value of the
   attribute is the const value T.   

References add_AT_vec(), add_const_value_attribute(), ggc_free(), initializer_constant_valid_p(), int_size_in_bytes(), native_encode_initializer(), and rtl_for_decl_init().

static bool tree_add_const_value_attribute_for_decl ( dw_die_ref  ,
tree   
)
static
static bool tree_add_const_value_attribute_for_decl ( )
static
Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
   attribute is the const value of T, where T is an integral constant
   variable with static storage duration
   (so it can't be a PARM_DECL or a RESULT_DECL).   

References get_AT(), and tree_add_const_value_attribute().

static int type_is_enum ( const_tree  )
static
static int type_is_enum ( )
inlinestatic
Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
   an enumerated type.   
static tree type_main_variant ( tree  )
static
static tree type_main_variant ( )
inlinestatic
Return a reference to a type, with its const and volatile qualifiers
   removed.   

References type().

static const char* type_tag ( )
static
Given a tree pointer to a struct, class, union, or enum type node, return
   a pointer to the (string) tag name for the given type, or zero if the type
   was declared without a tag.   

References lang_hooks::dwarf_name.

static dw_loc_descr_ref typed_binop ( enum dwarf_location_atom  op,
rtx  rtl,
dw_die_ref  type_die,
enum machine_mode  mode,
enum machine_mode  mem_mode 
)
static
static dw_loc_descr_ref ucompare_loc_descriptor ( enum dwarf_location_atom  op,
rtx  rtl,
enum machine_mode  mem_mode 
)
static
static void unmark_all_dies ( )
static
Clear the marks for a die, its children and referred dies.   

References AT_class(), AT_ref(), die_struct::die_attr, die_struct::die_mark, dw_val_class_die_ref, and unmark_all_dies().

static void unmark_dies ( dw_die_ref  )
static
static void unmark_dies ( )
static
Clear the marks for a die and its children.   

References die_struct::die_mark, and unmark_dies().

static tree uses_local_type ( )
static
If TYPE involves a function-local type (including a local typedef to a
   non-local type), returns that type; otherwise returns NULL_TREE.   

References uses_local_type_r().

Referenced by scope_die_for().

static tree uses_local_type_r ( )
static
walk_tree helper function for uses_local_type, below.   

References decl_function_context().

Referenced by uses_local_type().

static enum dwarf_form value_format ( dw_attr_ref  )
static
static void var_location_switch_text_section ( )
static
Note in all location lists that text section has changed.   

References decl_loc_table, and var_location_switch_text_section_1().

Referenced by dwarf2out_switch_text_section().

static int var_location_switch_text_section_1 ( )
static
Note in one location list that text section has changed.   

References var_loc_list_def::first, var_loc_list_def::last, var_loc_list_def::last_before_switch, and var_loc_node::next.

Referenced by var_location_switch_text_section().

static void verify_marks_clear ( )
static
Verify that all marks are clear.   

References die_struct::die_mark.

Referenced by prune_unused_types().

int vms_file_stats_name ( const char *  ,
long long *  ,
long *  ,
char *  ,
int *   
)
Return VMS file date, size, format, version given a name.   

References vstring::length, memset(), IOSB::status, vstring::string, strlen(), to_vms_file_spec(), and tryfile.

Referenced by lookup_filename(), and output_file_names().

static bool want_pubnames ( )
inlinestatic
Whether to generate the DWARF accelerator tables in .debug_pubnames
   and .debug_pubtypes.  This is configured per-target, but can be
   overridden by the -gpubnames or -gno-pubnames options.   

References targetm.

Referenced by add_AT_pubnames(), add_pubname(), add_pubtype(), gen_namespace_die(), gen_subprogram_die(), gen_variable_die(), and output_pubnames().


Variable Documentation

dw_die_ref* abbrev_die_table
static
A pointer to the base of a list of references to DIE's that
   are uniquely identified by their tag, presence/absence of
   children DIE's, and list of attribute/value pairs.   
unsigned abbrev_die_table_allocated
static
Number of elements currently allocated for abbrev_die_table.   
unsigned abbrev_die_table_in_use
static
Number of elements in type_die_table currently in use.   

Referenced by build_abbrev_table(), and output_abbrev_section().

char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
htab_t addr_index_table
static
Table of entries into the .debug_addr section.   

Referenced by add_addr_table_entry(), dwarf2out_finish(), output_addr_table(), and remove_addr_table_entry().

vec<dw_die_ref> base_types
static
vec<dw_die_ref> block_map
static
Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine}
   DIEs.   

Referenced by dwarf2out_function_decl(), gen_call_site_die(), gen_inlined_subroutine_die(), and gen_lexical_block_die().

htab_t cached_dw_loc_list_table
static
Table of cached location lists.   

Referenced by dwarf2out_abstract_function().

rtx cached_next_real_insn
static
struct call_arg_loc_node* call_arg_loc_last
static
int call_site_count = -1
static
char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES]
static

Referenced by set_cur_line_info_table().

section* cold_text_section
static
The default cold text section.   

Referenced by dwarf2out_begin_prologue(), and dwarf2out_switch_text_section().

char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
dw_line_info_table* cold_text_section_line_info
static

Referenced by set_cur_line_info_table().

bool cold_text_section_used = false
static
const char* comdat_symbol_id
static
The prefix to attach to symbols on DIEs in the current comdat debug
   info section.   
unsigned int comdat_symbol_number
static
The index of the current symbol within the current comdat CU.   
comdat_type_node* comdat_type_list
static
A list of type DIEs that have been separated into comdat sections.   

Referenced by break_out_comdat_types(), dwarf2out_finish(), and prune_unused_types().

htab_t common_block_die_table
static
A hash table of references to DIE's that describe COMMON blocks.
   The key is DECL_UID() ^ die_parent.   

Referenced by gen_variable_die().

dw_line_info_table* cur_line_info_table
static
The current table to which we should emit line number information
   for the current function.  This will be set up at the beginning of
   assembly for the function.   

Referenced by dwarf2out_source_line().

int current_function_has_inlines
static
Record whether the function being analyzed contains inlined functions.   
rtx current_unit_personality
static
Personality decl of current unit.  Used only when assembler does not support
   personality CFI.   

Referenced by output_call_frame_info().

section* debug_abbrev_section
static
section* debug_addr_section
static
char debug_addr_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
section* debug_aranges_section
static
section* debug_frame_section
static
section* debug_info_section
static
Pointers to various DWARF2 sections.   
char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
section* debug_line_section
static
char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
section* debug_loc_section
static
section* debug_macinfo_section
static
section* debug_pubnames_section
static
section* debug_pubtypes_section
static
section* debug_ranges_section
static
section* debug_skeleton_abbrev_section
static
char debug_skeleton_abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
section* debug_skeleton_info_section
static
char debug_skeleton_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
section* debug_skeleton_line_section
static
char debug_skeleton_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
section* debug_str_dwo_section
static
htab_t debug_str_hash
static
section* debug_str_offsets_section
static
section* debug_str_section
static
htab_t decl_die_table
static
A hash table of references to DIE's that describe declarations.
   The key is a DECL_UID() which is a unique number identifying each decl.   

Referenced by dwarf2out_init(), equate_decl_number_to_die(), and lookup_decl_die().

vec<tree, va_gc>* decl_scope_table
static
A pointer to the base of a table of references to declaration
   scopes.  This table is a display which tracks the nesting
   of declaration scopes at the current scope and containing
   scopes.  This table is used to find the proper place to
   define type declaration DIE's.   
limbo_die_node* deferred_asm_name
static
A list of DIEs for which we may have to generate
   DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.   

Referenced by add_linkage_name(), and dwarf2out_finish().

vec<deferred_locations, va_gc>* deferred_locations_list
static

Referenced by defer_location(), and dwarf2out_finish().

const char*(* demangle_name_func)(const char *)
static
We allow a language front-end to designate a function that is to be
   called to "demangle" any name before it is put into a DIE.   

Referenced by add_name_attribute(), and dwarf2out_set_demangle_name_func().

int dw2_string_counter
static

Referenced by set_indirect_string().

htab_t file_table
static
Filenames referenced by this compilation unit.   

Referenced by dwarf2out_finish(), dwarf2out_init(), lookup_filename(), and output_file_names().

struct dwarf_file_data* file_table_last_lookup
static
Cached result of previous call to lookup_filename.   

Referenced by lookup_filename().

unsigned int first_loclabel_num_not_at_text_label
static
One above highest N where .LVLN label might be equal to .Ltext0 label.   

Referenced by find_empty_loc_ranges_at_text_label().

HOST_WIDE_INT frame_pointer_fb_offset
static
Offset from the "steady-state frame pointer" to the frame base,
   within the current function.   

Referenced by based_loc_descr().

bool frame_pointer_fb_offset_valid
static
vec<tree, va_gc>* generic_type_instances
static
Instances of generic types for which we need to generate debug
   info that describe their generic parameters and arguments. That
   generation needs to happen once all types are properly laid out so
   we do it at the end of compilation.   
bool have_location_lists
static
Whether we have location lists that need outputting  
bool have_multiple_function_sections = false
static
bool in_first_function_p = true
static
True if before or during processing of the first function being emitted.   
vec<tree, va_gc>* incomplete_types
static
A pointer to the base of a list of incomplete types which might be
   completed at some later time.  incomplete_types_list needs to be a
   vec<tree, va_gc> *because we want to tell the garbage collector about
   it.   
bool info_section_emitted
static
A flag to tell pubnames/types export if there is an info section to
   refer to.   
int label_num
static
Number of internal labels generated by gen_internal_sym().   
struct dwarf_file_data* last_emitted_file
static
The last file entry emitted by maybe_emit_file().   
rtx last_var_location_insn
static
limbo_die_node* limbo_die_list
static
A list of DIEs with a NULL parent waiting to be relocated.   

Referenced by break_out_includes(), dwarf2out_finish(), new_die(), and prune_unused_types().

unsigned int line_info_label_num
static
A global counter for generating labels for line number data.   

Referenced by dwarf2out_source_line().

char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
unsigned int loclabel_num
static
Unique label counter.   

Referenced by dwarf2out_var_location().

char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
vec<macinfo_entry, va_gc>* macinfo_table
static
A pointer to the base of a table that contains a list of macro
   defines/undefines (and file start/end markers).   
bool maybe_at_text_label_p = true
static
True if loc_note during dwarf2out_var_location call might still be
   before first real instruction at address equal to .Ltext0.   
unsigned long next_die_offset
static
This location is used by calc_die_sizes() to keep track
   the offset of each DIE within the .debug_info section.   

Referenced by calc_die_sizes().

unsigned int poc_label_num
static
Unique label counter for point-of-call tables.   
int print_indent
static
Keep track of the number of spaces used to indent the
   output of the debugging routines that print the structure of
   the DIE internal representation.   
char* producer_string
static
vec<pubname_entry, va_gc>* pubname_table
static
A pointer to the base of a table that contains a list of publicly
   accessible names.   
vec<pubname_entry, va_gc>* pubtype_table
static
A pointer to the base of a table that contains a list of publicly
   accessible types.   
dw_ranges_by_label_ref ranges_by_label
static
Array of pairs of labels referenced in ranges_table.   
unsigned ranges_by_label_allocated
static
Number of elements currently allocated for ranges_by_label.   
unsigned ranges_by_label_in_use
static
Number of elements in ranges_by_label currently in use.   

Referenced by add_ranges_by_labels().

char ranges_section_label[2 *MAX_ARTIFICIAL_LABEL_BYTES]
static
dw_ranges_ref ranges_table
static
Array of dies for which we should generate .debug_ranges info.   
unsigned ranges_table_allocated
static
Number of elements currently allocated for ranges_table.   
unsigned ranges_table_in_use
static
Number of elements in ranges_table currently in use.   

Referenced by add_ranges_num(), and output_ranges().

vec<dw_line_info_table_p, va_gc>* separate_line_info
static
The set of all non-default tables of line number info.   
dw_die_ref single_comp_unit_die
static
Record the root of the DIE's built for the current compilation unit.   

Referenced by comp_unit_die().

htab_t skeleton_debug_str_hash
static
With split_debug_info, both the comp_dir and dwo_name go in the
   main object file, rather than the dwo, similar to the force_direct
   parameter elsewhere but with additional complications:

   1) The string is needed in both the main object file and the dwo.
   That is, the comp_dir and dwo_name will appear in both places.

   2) Strings can use three forms: DW_FORM_string, DW_FORM_strp or
   DW_FORM_GNU_str_index.

   3) GCC chooses the form to use late, depending on the size and
   reference count.

   Rather than forcing the all debug string handling functions and
   callers to deal with these complications, simply use a separate,
   special-cased string table for any attribute that should go in the
   main object file.  This limits the complexity to just the places
   that need it.   
int tail_call_site_count = -1
static
char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES]
static
Definitions of defaults for formats and names of various special
   (artificial) labels which may be generated within this file (when the -g
   options is used and DWARF2_DEBUGGING_INFO is in effect.
   If necessary, these may be overridden from within the tm.h file, but
   typically, overriding these defaults is unnecessary.   

Referenced by dw_loc_list(), and dwarf2out_init().

char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES]
static

Referenced by secname_for_decl().

dw_line_info_table* text_section_line_info
static
The two default tables of line number info.   

Referenced by set_cur_line_info_table().

bool text_section_used = false
static
Whether the default text and cold text sections have been used at all.   

Referenced by dwarf2out_finish(), dwarf2out_note_section_used(), output_aranges(), and size_of_aranges().

vec<die_arg_entry, va_gc>* tmpl_value_parm_die_table
static
vec<rtx, va_gc>* used_rtx_array
static
Array of RTXes referenced by the debugging information, which therefore
   must be kept around forever.