herman ten bruggeAdd dwarf support2f2708a4 years agoHistory
1046 lines · 30.7 KB · C
RawDownload
/* This file defines standard DWARF types, structures, and macros.   Copyright (C) 2000-2011, 2014, 2016, 2017, 2018 Red Hat, Inc.   This file is part of elfutils.    This file is free software; you can redistribute it and/or modify   it under the terms of either      * the GNU Lesser General Public License as published by the Free       Software Foundation; either version 3 of the License, or (at       your option) any later version    or      * the GNU General Public License as published by the Free       Software Foundation; either version 2 of the License, or (at       your option) any later version    or both in parallel, as here.    elfutils 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 copies of the GNU General Public License and   the GNU Lesser General Public License along with this program.  If   not, see <http://www.gnu.org/licenses/>.  */ #ifndef _DWARF_H#define	_DWARF_H 1 /* DWARF Unit Header Types.  */enum  {    DW_UT_compile = 0x01,    DW_UT_type = 0x02,    DW_UT_partial = 0x03,    DW_UT_skeleton = 0x04,    DW_UT_split_compile = 0x05,    DW_UT_split_type = 0x06,     DW_UT_lo_user = 0x80,    DW_UT_hi_user = 0xff  }; /* DWARF tags.  */enum  {    DW_TAG_array_type = 0x01,    DW_TAG_class_type = 0x02,    DW_TAG_entry_point = 0x03,    DW_TAG_enumeration_type = 0x04,    DW_TAG_formal_parameter = 0x05,    /* 0x06 reserved.  */    /* 0x07 reserved.  */    DW_TAG_imported_declaration = 0x08,    /* 0x09 reserved.  */    DW_TAG_label = 0x0a,    DW_TAG_lexical_block = 0x0b,    /* 0x0c reserved.  */    DW_TAG_member = 0x0d,    /* 0x0e reserved.  */    DW_TAG_pointer_type = 0x0f,    DW_TAG_reference_type = 0x10,    DW_TAG_compile_unit = 0x11,    DW_TAG_string_type = 0x12,    DW_TAG_structure_type = 0x13,    /* 0x14 reserved.  */    DW_TAG_subroutine_type = 0x15,    DW_TAG_typedef = 0x16,    DW_TAG_union_type = 0x17,    DW_TAG_unspecified_parameters = 0x18,    DW_TAG_variant = 0x19,    DW_TAG_common_block = 0x1a,    DW_TAG_common_inclusion = 0x1b,    DW_TAG_inheritance = 0x1c,    DW_TAG_inlined_subroutine = 0x1d,    DW_TAG_module = 0x1e,    DW_TAG_ptr_to_member_type = 0x1f,    DW_TAG_set_type = 0x20,    DW_TAG_subrange_type = 0x21,    DW_TAG_with_stmt = 0x22,    DW_TAG_access_declaration = 0x23,    DW_TAG_base_type = 0x24,    DW_TAG_catch_block = 0x25,    DW_TAG_const_type = 0x26,    DW_TAG_constant = 0x27,    DW_TAG_enumerator = 0x28,    DW_TAG_file_type = 0x29,    DW_TAG_friend = 0x2a,    DW_TAG_namelist = 0x2b,    DW_TAG_namelist_item = 0x2c,    DW_TAG_packed_type = 0x2d,    DW_TAG_subprogram = 0x2e,    DW_TAG_template_type_parameter = 0x2f,    DW_TAG_template_value_parameter = 0x30,    DW_TAG_thrown_type = 0x31,    DW_TAG_try_block = 0x32,    DW_TAG_variant_part = 0x33,    DW_TAG_variable = 0x34,    DW_TAG_volatile_type = 0x35,    DW_TAG_dwarf_procedure = 0x36,    DW_TAG_restrict_type = 0x37,    DW_TAG_interface_type = 0x38,    DW_TAG_namespace = 0x39,    DW_TAG_imported_module = 0x3a,    DW_TAG_unspecified_type = 0x3b,    DW_TAG_partial_unit = 0x3c,    DW_TAG_imported_unit = 0x3d,    /* 0x3e reserved.  Was DW_TAG_mutable_type.  */    DW_TAG_condition = 0x3f,    DW_TAG_shared_type = 0x40,    DW_TAG_type_unit = 0x41,    DW_TAG_rvalue_reference_type = 0x42,    DW_TAG_template_alias = 0x43,    DW_TAG_coarray_type = 0x44,    DW_TAG_generic_subrange = 0x45,    DW_TAG_dynamic_type = 0x46,    DW_TAG_atomic_type = 0x47,    DW_TAG_call_site = 0x48,    DW_TAG_call_site_parameter = 0x49,    DW_TAG_skeleton_unit = 0x4a,    DW_TAG_immutable_type = 0x4b,     DW_TAG_lo_user = 0x4080,     DW_TAG_MIPS_loop = 0x4081,    DW_TAG_format_label = 0x4101,    DW_TAG_function_template = 0x4102,    DW_TAG_class_template = 0x4103,     DW_TAG_GNU_BINCL = 0x4104,    DW_TAG_GNU_EINCL = 0x4105,     DW_TAG_GNU_template_template_param = 0x4106,    DW_TAG_GNU_template_parameter_pack = 0x4107,    DW_TAG_GNU_formal_parameter_pack = 0x4108,    DW_TAG_GNU_call_site = 0x4109,    DW_TAG_GNU_call_site_parameter = 0x410a,     DW_TAG_hi_user = 0xffff  };  /* Children determination encodings.  */enum  {    DW_CHILDREN_no = 0,    DW_CHILDREN_yes = 1  };  /* DWARF attributes encodings.  */enum  {    DW_AT_sibling = 0x01,    DW_AT_location = 0x02,    DW_AT_name = 0x03,    /* 0x04 reserved.  */    /* 0x05 reserved.  */    /* 0x06 reserved.  */    /* 0x07 reserved.  */    /* 0x08 reserved.  */    DW_AT_ordering = 0x09,    /* 0x0a reserved.  */    DW_AT_byte_size = 0x0b,    DW_AT_bit_offset = 0x0c,  /* Deprecated in DWARF4.  */    DW_AT_bit_size = 0x0d,    /* 0x0e reserved.  */    /* 0x0f reserved.  */    DW_AT_stmt_list = 0x10,    DW_AT_low_pc = 0x11,    DW_AT_high_pc = 0x12,    DW_AT_language = 0x13,    /* 0x14 reserved.  */    DW_AT_discr = 0x15,    DW_AT_discr_value = 0x16,    DW_AT_visibility = 0x17,    DW_AT_import = 0x18,    DW_AT_string_length = 0x19,    DW_AT_common_reference = 0x1a,    DW_AT_comp_dir = 0x1b,    DW_AT_const_value = 0x1c,    DW_AT_containing_type = 0x1d,    DW_AT_default_value = 0x1e,    /* 0x1f reserved.  */    DW_AT_inline = 0x20,    DW_AT_is_optional = 0x21,    DW_AT_lower_bound = 0x22,    /* 0x23 reserved.  */    /* 0x24 reserved.  */    DW_AT_producer = 0x25,    /* 0x26 reserved.  */    DW_AT_prototyped = 0x27,    /* 0x28 reserved.  */    /* 0x29 reserved.  */    DW_AT_return_addr = 0x2a,    /* 0x2b reserved.  */    DW_AT_start_scope = 0x2c,    /* 0x2d reserved.  */    DW_AT_bit_stride = 0x2e,    DW_AT_upper_bound = 0x2f,    /* 0x30 reserved.  */    DW_AT_abstract_origin = 0x31,    DW_AT_accessibility = 0x32,    DW_AT_address_class = 0x33,    DW_AT_artificial = 0x34,    DW_AT_base_types = 0x35,    DW_AT_calling_convention = 0x36,    DW_AT_count = 0x37,    DW_AT_data_member_location = 0x38,    DW_AT_decl_column = 0x39,    DW_AT_decl_file = 0x3a,    DW_AT_decl_line = 0x3b,    DW_AT_declaration = 0x3c,    DW_AT_discr_list = 0x3d,    DW_AT_encoding = 0x3e,    DW_AT_external = 0x3f,    DW_AT_frame_base = 0x40,    DW_AT_friend = 0x41,    DW_AT_identifier_case = 0x42,    DW_AT_macro_info = 0x43, /* Deprecated in DWARF5.  */    DW_AT_namelist_item = 0x44,    DW_AT_priority = 0x45,    DW_AT_segment = 0x46,    DW_AT_specification = 0x47,    DW_AT_static_link = 0x48,    DW_AT_type = 0x49,    DW_AT_use_location = 0x4a,    DW_AT_variable_parameter = 0x4b,    DW_AT_virtuality = 0x4c,    DW_AT_vtable_elem_location = 0x4d,    DW_AT_allocated = 0x4e,    DW_AT_associated = 0x4f,    DW_AT_data_location = 0x50,    DW_AT_byte_stride = 0x51,    DW_AT_entry_pc = 0x52,    DW_AT_use_UTF8 = 0x53,    DW_AT_extension = 0x54,    DW_AT_ranges = 0x55,    DW_AT_trampoline = 0x56,    DW_AT_call_column = 0x57,    DW_AT_call_file = 0x58,    DW_AT_call_line = 0x59,    DW_AT_description = 0x5a,    DW_AT_binary_scale = 0x5b,    DW_AT_decimal_scale = 0x5c,    DW_AT_small = 0x5d,    DW_AT_decimal_sign = 0x5e,    DW_AT_digit_count = 0x5f,    DW_AT_picture_string = 0x60,    DW_AT_mutable = 0x61,    DW_AT_threads_scaled = 0x62,    DW_AT_explicit = 0x63,    DW_AT_object_pointer = 0x64,    DW_AT_endianity = 0x65,    DW_AT_elemental = 0x66,    DW_AT_pure = 0x67,    DW_AT_recursive = 0x68,    DW_AT_signature = 0x69,    DW_AT_main_subprogram = 0x6a,    DW_AT_data_bit_offset = 0x6b,    DW_AT_const_expr = 0x6c,    DW_AT_enum_class = 0x6d,    DW_AT_linkage_name = 0x6e,    DW_AT_string_length_bit_size = 0x6f,    DW_AT_string_length_byte_size = 0x70,    DW_AT_rank = 0x71,    DW_AT_str_offsets_base = 0x72,    DW_AT_addr_base = 0x73,    DW_AT_rnglists_base = 0x74,    /* 0x75 reserved.  */    DW_AT_dwo_name = 0x76,    DW_AT_reference = 0x77,    DW_AT_rvalue_reference = 0x78,    DW_AT_macros = 0x79,    DW_AT_call_all_calls = 0x7a,    DW_AT_call_all_source_calls = 0x7b,    DW_AT_call_all_tail_calls = 0x7c,    DW_AT_call_return_pc = 0x7d,    DW_AT_call_value = 0x7e,    DW_AT_call_origin = 0x7f,    DW_AT_call_parameter = 0x80,    DW_AT_call_pc = 0x81,    DW_AT_call_tail_call = 0x82,    DW_AT_call_target = 0x83,    DW_AT_call_target_clobbered = 0x84,    DW_AT_call_data_location = 0x85,    DW_AT_call_data_value = 0x86,    DW_AT_noreturn = 0x87,    DW_AT_alignment = 0x88,    DW_AT_export_symbols = 0x89,    DW_AT_deleted = 0x8a,    DW_AT_defaulted = 0x8b,    DW_AT_loclists_base = 0x8c,     DW_AT_lo_user = 0x2000,     DW_AT_MIPS_fde = 0x2001,    DW_AT_MIPS_loop_begin = 0x2002,    DW_AT_MIPS_tail_loop_begin = 0x2003,    DW_AT_MIPS_epilog_begin = 0x2004,    DW_AT_MIPS_loop_unroll_factor = 0x2005,    DW_AT_MIPS_software_pipeline_depth = 0x2006,    DW_AT_MIPS_linkage_name = 0x2007,    DW_AT_MIPS_stride = 0x2008,    DW_AT_MIPS_abstract_name = 0x2009,    DW_AT_MIPS_clone_origin = 0x200a,    DW_AT_MIPS_has_inlines = 0x200b,    DW_AT_MIPS_stride_byte = 0x200c,    DW_AT_MIPS_stride_elem = 0x200d,    DW_AT_MIPS_ptr_dopetype = 0x200e,    DW_AT_MIPS_allocatable_dopetype = 0x200f,    DW_AT_MIPS_assumed_shape_dopetype = 0x2010,    DW_AT_MIPS_assumed_size = 0x2011,     /* GNU extensions.  */    DW_AT_sf_names = 0x2101,    DW_AT_src_info = 0x2102,    DW_AT_mac_info = 0x2103,    DW_AT_src_coords = 0x2104,    DW_AT_body_begin = 0x2105,    DW_AT_body_end = 0x2106,    DW_AT_GNU_vector = 0x2107,    DW_AT_GNU_guarded_by = 0x2108,    DW_AT_GNU_pt_guarded_by = 0x2109,    DW_AT_GNU_guarded = 0x210a,    DW_AT_GNU_pt_guarded = 0x210b,    DW_AT_GNU_locks_excluded = 0x210c,    DW_AT_GNU_exclusive_locks_required = 0x210d,    DW_AT_GNU_shared_locks_required = 0x210e,    DW_AT_GNU_odr_signature = 0x210f,    DW_AT_GNU_template_name = 0x2110,    DW_AT_GNU_call_site_value = 0x2111,    DW_AT_GNU_call_site_data_value = 0x2112,    DW_AT_GNU_call_site_target = 0x2113,    DW_AT_GNU_call_site_target_clobbered = 0x2114,    DW_AT_GNU_tail_call = 0x2115,    DW_AT_GNU_all_tail_call_sites = 0x2116,    DW_AT_GNU_all_call_sites = 0x2117,    DW_AT_GNU_all_source_call_sites = 0x2118,    DW_AT_GNU_locviews = 0x2137,    DW_AT_GNU_entry_view = 0x2138,    DW_AT_GNU_macros = 0x2119,    DW_AT_GNU_deleted = 0x211a,    /* GNU Debug Fission extensions.  */    DW_AT_GNU_dwo_name = 0x2130,    DW_AT_GNU_dwo_id = 0x2131,    DW_AT_GNU_ranges_base = 0x2132,    DW_AT_GNU_addr_base = 0x2133,    DW_AT_GNU_pubnames = 0x2134,    DW_AT_GNU_pubtypes = 0x2135,     /* https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator  */    DW_AT_GNU_numerator = 0x2303,    DW_AT_GNU_denominator = 0x2304,    /* https://gcc.gnu.org/wiki/DW_AT_GNU_bias  */    DW_AT_GNU_bias = 0x2305,     DW_AT_hi_user = 0x3fff  }; /* Old unofficially attribute names.  Should not be used.   Will not appear in known-dwarf.h  */ /* DWARF1 array subscripts and element data types.  */#define DW_AT_subscr_data	0x0a/* DWARF1 enumeration literals.  */#define DW_AT_element_list	0x0f/* DWARF1 reference for variable to member structure, class or union.  */#define DW_AT_member		0x14 /* DWARF form encodings.  */enum  {    DW_FORM_addr = 0x01,    DW_FORM_block2 = 0x03,    DW_FORM_block4 = 0x04,    DW_FORM_data2 = 0x05,    DW_FORM_data4 = 0x06,    DW_FORM_data8 = 0x07,    DW_FORM_string = 0x08,    DW_FORM_block = 0x09,    DW_FORM_block1 = 0x0a,    DW_FORM_data1 = 0x0b,    DW_FORM_flag = 0x0c,    DW_FORM_sdata = 0x0d,    DW_FORM_strp = 0x0e,    DW_FORM_udata = 0x0f,    DW_FORM_ref_addr = 0x10,    DW_FORM_ref1 = 0x11,    DW_FORM_ref2 = 0x12,    DW_FORM_ref4 = 0x13,    DW_FORM_ref8 = 0x14,    DW_FORM_ref_udata = 0x15,    DW_FORM_indirect = 0x16,    DW_FORM_sec_offset = 0x17,    DW_FORM_exprloc = 0x18,    DW_FORM_flag_present = 0x19,    DW_FORM_strx = 0x1a,    DW_FORM_addrx = 0x1b,    DW_FORM_ref_sup4 = 0x1c,    DW_FORM_strp_sup = 0x1d,    DW_FORM_data16 = 0x1e,    DW_FORM_line_strp = 0x1f,    DW_FORM_ref_sig8 = 0x20,    DW_FORM_implicit_const = 0x21,    DW_FORM_loclistx = 0x22,    DW_FORM_rnglistx = 0x23,    DW_FORM_ref_sup8 = 0x24,    DW_FORM_strx1 = 0x25,    DW_FORM_strx2 = 0x26,    DW_FORM_strx3 = 0x27,    DW_FORM_strx4 = 0x28,    DW_FORM_addrx1 = 0x29,    DW_FORM_addrx2 = 0x2a,    DW_FORM_addrx3 = 0x2b,    DW_FORM_addrx4 = 0x2c,     /* GNU Debug Fission extensions.  */    DW_FORM_GNU_addr_index = 0x1f01,    DW_FORM_GNU_str_index = 0x1f02,     DW_FORM_GNU_ref_alt = 0x1f20, /* offset in alternate .debuginfo.  */    DW_FORM_GNU_strp_alt = 0x1f21 /* offset in alternate .debug_str. */  };  /* DWARF location operation encodings.  */enum  {    DW_OP_addr = 0x03,		/* Constant address.  */    DW_OP_deref = 0x06,    DW_OP_const1u = 0x08,	/* Unsigned 1-byte constant.  */    DW_OP_const1s = 0x09,	/* Signed 1-byte constant.  */    DW_OP_const2u = 0x0a,	/* Unsigned 2-byte constant.  */    DW_OP_const2s = 0x0b,	/* Signed 2-byte constant.  */    DW_OP_const4u = 0x0c,	/* Unsigned 4-byte constant.  */    DW_OP_const4s = 0x0d,	/* Signed 4-byte constant.  */    DW_OP_const8u = 0x0e,	/* Unsigned 8-byte constant.  */    DW_OP_const8s = 0x0f,	/* Signed 8-byte constant.  */    DW_OP_constu = 0x10,	/* Unsigned LEB128 constant.  */    DW_OP_consts = 0x11,	/* Signed LEB128 constant.  */    DW_OP_dup = 0x12,    DW_OP_drop = 0x13,    DW_OP_over = 0x14,    DW_OP_pick = 0x15,		/* 1-byte stack index.  */    DW_OP_swap = 0x16,    DW_OP_rot = 0x17,    DW_OP_xderef = 0x18,    DW_OP_abs = 0x19,    DW_OP_and = 0x1a,    DW_OP_div = 0x1b,    DW_OP_minus = 0x1c,    DW_OP_mod = 0x1d,    DW_OP_mul = 0x1e,    DW_OP_neg = 0x1f,    DW_OP_not = 0x20,    DW_OP_or = 0x21,    DW_OP_plus = 0x22,    DW_OP_plus_uconst = 0x23,	/* Unsigned LEB128 addend.  */    DW_OP_shl = 0x24,    DW_OP_shr = 0x25,    DW_OP_shra = 0x26,    DW_OP_xor = 0x27,    DW_OP_bra = 0x28,		/* Signed 2-byte constant.  */    DW_OP_eq = 0x29,    DW_OP_ge = 0x2a,    DW_OP_gt = 0x2b,    DW_OP_le = 0x2c,    DW_OP_lt = 0x2d,    DW_OP_ne = 0x2e,    DW_OP_skip = 0x2f,		/* Signed 2-byte constant.  */    DW_OP_lit0 = 0x30,		/* Literal 0.  */    DW_OP_lit1 = 0x31,		/* Literal 1.  */    DW_OP_lit2 = 0x32,		/* Literal 2.  */    DW_OP_lit3 = 0x33,		/* Literal 3.  */    DW_OP_lit4 = 0x34,		/* Literal 4.  */    DW_OP_lit5 = 0x35,		/* Literal 5.  */    DW_OP_lit6 = 0x36,		/* Literal 6.  */    DW_OP_lit7 = 0x37,		/* Literal 7.  */    DW_OP_lit8 = 0x38,		/* Literal 8.  */    DW_OP_lit9 = 0x39,		/* Literal 9.  */    DW_OP_lit10 = 0x3a,		/* Literal 10.  */    DW_OP_lit11 = 0x3b,		/* Literal 11.  */    DW_OP_lit12 = 0x3c,		/* Literal 12.  */    DW_OP_lit13 = 0x3d,		/* Literal 13.  */    DW_OP_lit14 = 0x3e,		/* Literal 14.  */    DW_OP_lit15 = 0x3f,		/* Literal 15.  */    DW_OP_lit16 = 0x40,		/* Literal 16.  */    DW_OP_lit17 = 0x41,		/* Literal 17.  */    DW_OP_lit18 = 0x42,		/* Literal 18.  */    DW_OP_lit19 = 0x43,		/* Literal 19.  */    DW_OP_lit20 = 0x44,		/* Literal 20.  */    DW_OP_lit21 = 0x45,		/* Literal 21.  */    DW_OP_lit22 = 0x46,		/* Literal 22.  */    DW_OP_lit23 = 0x47,		/* Literal 23.  */    DW_OP_lit24 = 0x48,		/* Literal 24.  */    DW_OP_lit25 = 0x49,		/* Literal 25.  */    DW_OP_lit26 = 0x4a,		/* Literal 26.  */

Lines 1–500 of 1046.