Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-03-31 08:34:18

0001 /* This file defines standard DWARF types, structures, and macros.
0002    Copyright (C) 2000-2011, 2014, 2016, 2017, 2018 Red Hat, Inc.
0003    Copyright (C) 2024, 2025 Mark J. Wielaard <mark@klomp.org>
0004    This file is part of elfutils.
0005 
0006    This file is free software; you can redistribute it and/or modify
0007    it under the terms of either
0008 
0009      * the GNU Lesser General Public License as published by the Free
0010        Software Foundation; either version 3 of the License, or (at
0011        your option) any later version
0012 
0013    or
0014 
0015      * the GNU General Public License as published by the Free
0016        Software Foundation; either version 2 of the License, or (at
0017        your option) any later version
0018 
0019    or both in parallel, as here.
0020 
0021    elfutils is distributed in the hope that it will be useful, but
0022    WITHOUT ANY WARRANTY; without even the implied warranty of
0023    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0024    General Public License for more details.
0025 
0026    You should have received copies of the GNU General Public License and
0027    the GNU Lesser General Public License along with this program.  If
0028    not, see <http://www.gnu.org/licenses/>.  */
0029 
0030 #ifndef _DWARF_H
0031 #define _DWARF_H 1
0032 
0033 /* DWARF Unit Header Types.  */
0034 enum
0035   {
0036     DW_UT_compile = 0x01,
0037     DW_UT_type = 0x02,
0038     DW_UT_partial = 0x03,
0039     DW_UT_skeleton = 0x04,
0040     DW_UT_split_compile = 0x05,
0041     DW_UT_split_type = 0x06,
0042 
0043     DW_UT_lo_user = 0x80,
0044     DW_UT_hi_user = 0xff
0045   };
0046 
0047 /* DWARF tags.  */
0048 enum
0049   {
0050     DW_TAG_array_type = 0x01,
0051     DW_TAG_class_type = 0x02,
0052     DW_TAG_entry_point = 0x03,
0053     DW_TAG_enumeration_type = 0x04,
0054     DW_TAG_formal_parameter = 0x05,
0055     /* 0x06 reserved.  */
0056     /* 0x07 reserved.  */
0057     DW_TAG_imported_declaration = 0x08,
0058     /* 0x09 reserved.  */
0059     DW_TAG_label = 0x0a,
0060     DW_TAG_lexical_block = 0x0b,
0061     /* 0x0c reserved.  */
0062     DW_TAG_member = 0x0d,
0063     /* 0x0e reserved.  */
0064     DW_TAG_pointer_type = 0x0f,
0065     DW_TAG_reference_type = 0x10,
0066     DW_TAG_compile_unit = 0x11,
0067     DW_TAG_string_type = 0x12,
0068     DW_TAG_structure_type = 0x13,
0069     /* 0x14 reserved.  */
0070     DW_TAG_subroutine_type = 0x15,
0071     DW_TAG_typedef = 0x16,
0072     DW_TAG_union_type = 0x17,
0073     DW_TAG_unspecified_parameters = 0x18,
0074     DW_TAG_variant = 0x19,
0075     DW_TAG_common_block = 0x1a,
0076     DW_TAG_common_inclusion = 0x1b,
0077     DW_TAG_inheritance = 0x1c,
0078     DW_TAG_inlined_subroutine = 0x1d,
0079     DW_TAG_module = 0x1e,
0080     DW_TAG_ptr_to_member_type = 0x1f,
0081     DW_TAG_set_type = 0x20,
0082     DW_TAG_subrange_type = 0x21,
0083     DW_TAG_with_stmt = 0x22,
0084     DW_TAG_access_declaration = 0x23,
0085     DW_TAG_base_type = 0x24,
0086     DW_TAG_catch_block = 0x25,
0087     DW_TAG_const_type = 0x26,
0088     DW_TAG_constant = 0x27,
0089     DW_TAG_enumerator = 0x28,
0090     DW_TAG_file_type = 0x29,
0091     DW_TAG_friend = 0x2a,
0092     DW_TAG_namelist = 0x2b,
0093     DW_TAG_namelist_item = 0x2c,
0094     DW_TAG_packed_type = 0x2d,
0095     DW_TAG_subprogram = 0x2e,
0096     DW_TAG_template_type_parameter = 0x2f,
0097     DW_TAG_template_value_parameter = 0x30,
0098     DW_TAG_thrown_type = 0x31,
0099     DW_TAG_try_block = 0x32,
0100     DW_TAG_variant_part = 0x33,
0101     DW_TAG_variable = 0x34,
0102     DW_TAG_volatile_type = 0x35,
0103     DW_TAG_dwarf_procedure = 0x36,
0104     DW_TAG_restrict_type = 0x37,
0105     DW_TAG_interface_type = 0x38,
0106     DW_TAG_namespace = 0x39,
0107     DW_TAG_imported_module = 0x3a,
0108     DW_TAG_unspecified_type = 0x3b,
0109     DW_TAG_partial_unit = 0x3c,
0110     DW_TAG_imported_unit = 0x3d,
0111     /* 0x3e reserved.  Was DW_TAG_mutable_type.  */
0112     DW_TAG_condition = 0x3f,
0113     DW_TAG_shared_type = 0x40,
0114     DW_TAG_type_unit = 0x41,
0115     DW_TAG_rvalue_reference_type = 0x42,
0116     DW_TAG_template_alias = 0x43,
0117     DW_TAG_coarray_type = 0x44,
0118     DW_TAG_generic_subrange = 0x45,
0119     DW_TAG_dynamic_type = 0x46,
0120     DW_TAG_atomic_type = 0x47,
0121     DW_TAG_call_site = 0x48,
0122     DW_TAG_call_site_parameter = 0x49,
0123     DW_TAG_skeleton_unit = 0x4a,
0124     DW_TAG_immutable_type = 0x4b,
0125 
0126     DW_TAG_lo_user = 0x4080,
0127 
0128     DW_TAG_MIPS_loop = 0x4081,
0129     DW_TAG_format_label = 0x4101,
0130     DW_TAG_function_template = 0x4102,
0131     DW_TAG_class_template = 0x4103,
0132 
0133     DW_TAG_GNU_BINCL = 0x4104,
0134     DW_TAG_GNU_EINCL = 0x4105,
0135 
0136     DW_TAG_GNU_template_template_param = 0x4106,
0137     DW_TAG_GNU_template_parameter_pack = 0x4107,
0138     DW_TAG_GNU_formal_parameter_pack = 0x4108,
0139     DW_TAG_GNU_call_site = 0x4109,
0140     DW_TAG_GNU_call_site_parameter = 0x410a,
0141 
0142     DW_TAG_hi_user = 0xffff
0143   };
0144 
0145 
0146 /* Children determination encodings.  */
0147 enum
0148   {
0149     DW_CHILDREN_no = 0,
0150     DW_CHILDREN_yes = 1
0151   };
0152 
0153 
0154 /* DWARF attributes encodings.  */
0155 enum
0156   {
0157     DW_AT_sibling = 0x01,
0158     DW_AT_location = 0x02,
0159     DW_AT_name = 0x03,
0160     /* 0x04 reserved.  */
0161     /* 0x05 reserved.  */
0162     /* 0x06 reserved.  */
0163     /* 0x07 reserved.  */
0164     /* 0x08 reserved.  */
0165     DW_AT_ordering = 0x09,
0166     /* 0x0a reserved.  */
0167     DW_AT_byte_size = 0x0b,
0168     DW_AT_bit_offset = 0x0c,  /* Deprecated in DWARF4.  */
0169     DW_AT_bit_size = 0x0d,
0170     /* 0x0e reserved.  */
0171     /* 0x0f reserved.  */
0172     DW_AT_stmt_list = 0x10,
0173     DW_AT_low_pc = 0x11,
0174     DW_AT_high_pc = 0x12,
0175     DW_AT_language = 0x13,
0176     /* 0x14 reserved.  */
0177     DW_AT_discr = 0x15,
0178     DW_AT_discr_value = 0x16,
0179     DW_AT_visibility = 0x17,
0180     DW_AT_import = 0x18,
0181     DW_AT_string_length = 0x19,
0182     DW_AT_common_reference = 0x1a,
0183     DW_AT_comp_dir = 0x1b,
0184     DW_AT_const_value = 0x1c,
0185     DW_AT_containing_type = 0x1d,
0186     DW_AT_default_value = 0x1e,
0187     /* 0x1f reserved.  */
0188     DW_AT_inline = 0x20,
0189     DW_AT_is_optional = 0x21,
0190     DW_AT_lower_bound = 0x22,
0191     /* 0x23 reserved.  */
0192     /* 0x24 reserved.  */
0193     DW_AT_producer = 0x25,
0194     /* 0x26 reserved.  */
0195     DW_AT_prototyped = 0x27,
0196     /* 0x28 reserved.  */
0197     /* 0x29 reserved.  */
0198     DW_AT_return_addr = 0x2a,
0199     /* 0x2b reserved.  */
0200     DW_AT_start_scope = 0x2c,
0201     /* 0x2d reserved.  */
0202     DW_AT_bit_stride = 0x2e,
0203     DW_AT_upper_bound = 0x2f,
0204     /* 0x30 reserved.  */
0205     DW_AT_abstract_origin = 0x31,
0206     DW_AT_accessibility = 0x32,
0207     DW_AT_address_class = 0x33,
0208     DW_AT_artificial = 0x34,
0209     DW_AT_base_types = 0x35,
0210     DW_AT_calling_convention = 0x36,
0211     DW_AT_count = 0x37,
0212     DW_AT_data_member_location = 0x38,
0213     DW_AT_decl_column = 0x39,
0214     DW_AT_decl_file = 0x3a,
0215     DW_AT_decl_line = 0x3b,
0216     DW_AT_declaration = 0x3c,
0217     DW_AT_discr_list = 0x3d,
0218     DW_AT_encoding = 0x3e,
0219     DW_AT_external = 0x3f,
0220     DW_AT_frame_base = 0x40,
0221     DW_AT_friend = 0x41,
0222     DW_AT_identifier_case = 0x42,
0223     DW_AT_macro_info = 0x43, /* Deprecated in DWARF5.  */
0224     DW_AT_namelist_item = 0x44,
0225     DW_AT_priority = 0x45,
0226     DW_AT_segment = 0x46,
0227     DW_AT_specification = 0x47,
0228     DW_AT_static_link = 0x48,
0229     DW_AT_type = 0x49,
0230     DW_AT_use_location = 0x4a,
0231     DW_AT_variable_parameter = 0x4b,
0232     DW_AT_virtuality = 0x4c,
0233     DW_AT_vtable_elem_location = 0x4d,
0234     DW_AT_allocated = 0x4e,
0235     DW_AT_associated = 0x4f,
0236     DW_AT_data_location = 0x50,
0237     DW_AT_byte_stride = 0x51,
0238     DW_AT_entry_pc = 0x52,
0239     DW_AT_use_UTF8 = 0x53,
0240     DW_AT_extension = 0x54,
0241     DW_AT_ranges = 0x55,
0242     DW_AT_trampoline = 0x56,
0243     DW_AT_call_column = 0x57,
0244     DW_AT_call_file = 0x58,
0245     DW_AT_call_line = 0x59,
0246     DW_AT_description = 0x5a,
0247     DW_AT_binary_scale = 0x5b,
0248     DW_AT_decimal_scale = 0x5c,
0249     DW_AT_small = 0x5d,
0250     DW_AT_decimal_sign = 0x5e,
0251     DW_AT_digit_count = 0x5f,
0252     DW_AT_picture_string = 0x60,
0253     DW_AT_mutable = 0x61,
0254     DW_AT_threads_scaled = 0x62,
0255     DW_AT_explicit = 0x63,
0256     DW_AT_object_pointer = 0x64,
0257     DW_AT_endianity = 0x65,
0258     DW_AT_elemental = 0x66,
0259     DW_AT_pure = 0x67,
0260     DW_AT_recursive = 0x68,
0261     DW_AT_signature = 0x69,
0262     DW_AT_main_subprogram = 0x6a,
0263     DW_AT_data_bit_offset = 0x6b,
0264     DW_AT_const_expr = 0x6c,
0265     DW_AT_enum_class = 0x6d,
0266     DW_AT_linkage_name = 0x6e,
0267     DW_AT_string_length_bit_size = 0x6f,
0268     DW_AT_string_length_byte_size = 0x70,
0269     DW_AT_rank = 0x71,
0270     DW_AT_str_offsets_base = 0x72,
0271     DW_AT_addr_base = 0x73,
0272     DW_AT_rnglists_base = 0x74,
0273     /* 0x75 reserved.  */
0274     DW_AT_dwo_name = 0x76,
0275     DW_AT_reference = 0x77,
0276     DW_AT_rvalue_reference = 0x78,
0277     DW_AT_macros = 0x79,
0278     DW_AT_call_all_calls = 0x7a,
0279     DW_AT_call_all_source_calls = 0x7b,
0280     DW_AT_call_all_tail_calls = 0x7c,
0281     DW_AT_call_return_pc = 0x7d,
0282     DW_AT_call_value = 0x7e,
0283     DW_AT_call_origin = 0x7f,
0284     DW_AT_call_parameter = 0x80,
0285     DW_AT_call_pc = 0x81,
0286     DW_AT_call_tail_call = 0x82,
0287     DW_AT_call_target = 0x83,
0288     DW_AT_call_target_clobbered = 0x84,
0289     DW_AT_call_data_location = 0x85,
0290     DW_AT_call_data_value = 0x86,
0291     DW_AT_noreturn = 0x87,
0292     DW_AT_alignment = 0x88,
0293     DW_AT_export_symbols = 0x89,
0294     DW_AT_deleted = 0x8a,
0295     DW_AT_defaulted = 0x8b,
0296     DW_AT_loclists_base = 0x8c,
0297 
0298     /* https://dwarfstd.org/languages-v6.html  */
0299     DW_AT_language_name = 0x90,
0300     DW_AT_language_version = 0x91,
0301 
0302     DW_AT_lo_user = 0x2000,
0303 
0304     DW_AT_MIPS_fde = 0x2001,
0305     DW_AT_MIPS_loop_begin = 0x2002,
0306     DW_AT_MIPS_tail_loop_begin = 0x2003,
0307     DW_AT_MIPS_epilog_begin = 0x2004,
0308     DW_AT_MIPS_loop_unroll_factor = 0x2005,
0309     DW_AT_MIPS_software_pipeline_depth = 0x2006,
0310     DW_AT_MIPS_linkage_name = 0x2007,
0311     DW_AT_MIPS_stride = 0x2008,
0312     DW_AT_MIPS_abstract_name = 0x2009,
0313     DW_AT_MIPS_clone_origin = 0x200a,
0314     DW_AT_MIPS_has_inlines = 0x200b,
0315     DW_AT_MIPS_stride_byte = 0x200c,
0316     DW_AT_MIPS_stride_elem = 0x200d,
0317     DW_AT_MIPS_ptr_dopetype = 0x200e,
0318     DW_AT_MIPS_allocatable_dopetype = 0x200f,
0319     DW_AT_MIPS_assumed_shape_dopetype = 0x2010,
0320     DW_AT_MIPS_assumed_size = 0x2011,
0321 
0322     /* GNU extensions.  */
0323     DW_AT_sf_names = 0x2101,
0324     DW_AT_src_info = 0x2102,
0325     DW_AT_mac_info = 0x2103,
0326     DW_AT_src_coords = 0x2104,
0327     DW_AT_body_begin = 0x2105,
0328     DW_AT_body_end = 0x2106,
0329     DW_AT_GNU_vector = 0x2107,
0330     DW_AT_GNU_guarded_by = 0x2108,
0331     DW_AT_GNU_pt_guarded_by = 0x2109,
0332     DW_AT_GNU_guarded = 0x210a,
0333     DW_AT_GNU_pt_guarded = 0x210b,
0334     DW_AT_GNU_locks_excluded = 0x210c,
0335     DW_AT_GNU_exclusive_locks_required = 0x210d,
0336     DW_AT_GNU_shared_locks_required = 0x210e,
0337     DW_AT_GNU_odr_signature = 0x210f,
0338     DW_AT_GNU_template_name = 0x2110,
0339     DW_AT_GNU_call_site_value = 0x2111,
0340     DW_AT_GNU_call_site_data_value = 0x2112,
0341     DW_AT_GNU_call_site_target = 0x2113,
0342     DW_AT_GNU_call_site_target_clobbered = 0x2114,
0343     DW_AT_GNU_tail_call = 0x2115,
0344     DW_AT_GNU_all_tail_call_sites = 0x2116,
0345     DW_AT_GNU_all_call_sites = 0x2117,
0346     DW_AT_GNU_all_source_call_sites = 0x2118,
0347     DW_AT_GNU_locviews = 0x2137,
0348     DW_AT_GNU_entry_view = 0x2138,
0349     DW_AT_GNU_macros = 0x2119,
0350     DW_AT_GNU_deleted = 0x211a,
0351     /* GNU Debug Fission extensions.  */
0352     DW_AT_GNU_dwo_name = 0x2130,
0353     DW_AT_GNU_dwo_id = 0x2131,
0354     DW_AT_GNU_ranges_base = 0x2132,
0355     DW_AT_GNU_addr_base = 0x2133,
0356     DW_AT_GNU_pubnames = 0x2134,
0357     DW_AT_GNU_pubtypes = 0x2135,
0358 
0359     /* https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator  */
0360     DW_AT_GNU_numerator = 0x2303,
0361     DW_AT_GNU_denominator = 0x2304,
0362     /* https://gcc.gnu.org/wiki/DW_AT_GNU_bias  */
0363     DW_AT_GNU_bias = 0x2305,
0364 
0365     DW_AT_hi_user = 0x3fff
0366   };
0367 
0368 /* Old unofficially attribute names.  Should not be used.
0369    Will not appear in known-dwarf.h  */
0370 
0371 /* DWARF1 array subscripts and element data types.  */
0372 #define DW_AT_subscr_data   0x0a
0373 /* DWARF1 enumeration literals.  */
0374 #define DW_AT_element_list  0x0f
0375 /* DWARF1 reference for variable to member structure, class or union.  */
0376 #define DW_AT_member        0x14
0377 
0378 /* DWARF form encodings.  */
0379 enum
0380   {
0381     DW_FORM_addr = 0x01,
0382     DW_FORM_block2 = 0x03,
0383     DW_FORM_block4 = 0x04,
0384     DW_FORM_data2 = 0x05,
0385     DW_FORM_data4 = 0x06,
0386     DW_FORM_data8 = 0x07,
0387     DW_FORM_string = 0x08,
0388     DW_FORM_block = 0x09,
0389     DW_FORM_block1 = 0x0a,
0390     DW_FORM_data1 = 0x0b,
0391     DW_FORM_flag = 0x0c,
0392     DW_FORM_sdata = 0x0d,
0393     DW_FORM_strp = 0x0e,
0394     DW_FORM_udata = 0x0f,
0395     DW_FORM_ref_addr = 0x10,
0396     DW_FORM_ref1 = 0x11,
0397     DW_FORM_ref2 = 0x12,
0398     DW_FORM_ref4 = 0x13,
0399     DW_FORM_ref8 = 0x14,
0400     DW_FORM_ref_udata = 0x15,
0401     DW_FORM_indirect = 0x16,
0402     DW_FORM_sec_offset = 0x17,
0403     DW_FORM_exprloc = 0x18,
0404     DW_FORM_flag_present = 0x19,
0405     DW_FORM_strx = 0x1a,
0406     DW_FORM_addrx = 0x1b,
0407     DW_FORM_ref_sup4 = 0x1c,
0408     DW_FORM_strp_sup = 0x1d,
0409     DW_FORM_data16 = 0x1e,
0410     DW_FORM_line_strp = 0x1f,
0411     DW_FORM_ref_sig8 = 0x20,
0412     DW_FORM_implicit_const = 0x21,
0413     DW_FORM_loclistx = 0x22,
0414     DW_FORM_rnglistx = 0x23,
0415     DW_FORM_ref_sup8 = 0x24,
0416     DW_FORM_strx1 = 0x25,
0417     DW_FORM_strx2 = 0x26,
0418     DW_FORM_strx3 = 0x27,
0419     DW_FORM_strx4 = 0x28,
0420     DW_FORM_addrx1 = 0x29,
0421     DW_FORM_addrx2 = 0x2a,
0422     DW_FORM_addrx3 = 0x2b,
0423     DW_FORM_addrx4 = 0x2c,
0424 
0425     /* GNU Debug Fission extensions.  */
0426     DW_FORM_GNU_addr_index = 0x1f01,
0427     DW_FORM_GNU_str_index = 0x1f02,
0428 
0429     DW_FORM_GNU_ref_alt = 0x1f20, /* offset in alternate .debuginfo.  */
0430     DW_FORM_GNU_strp_alt = 0x1f21 /* offset in alternate .debug_str. */
0431   };
0432 
0433 
0434 /* DWARF location operation encodings.  */
0435 enum
0436   {
0437     DW_OP_addr = 0x03,      /* Constant address.  */
0438     DW_OP_deref = 0x06,
0439     DW_OP_const1u = 0x08,   /* Unsigned 1-byte constant.  */
0440     DW_OP_const1s = 0x09,   /* Signed 1-byte constant.  */
0441     DW_OP_const2u = 0x0a,   /* Unsigned 2-byte constant.  */
0442     DW_OP_const2s = 0x0b,   /* Signed 2-byte constant.  */
0443     DW_OP_const4u = 0x0c,   /* Unsigned 4-byte constant.  */
0444     DW_OP_const4s = 0x0d,   /* Signed 4-byte constant.  */
0445     DW_OP_const8u = 0x0e,   /* Unsigned 8-byte constant.  */
0446     DW_OP_const8s = 0x0f,   /* Signed 8-byte constant.  */
0447     DW_OP_constu = 0x10,    /* Unsigned LEB128 constant.  */
0448     DW_OP_consts = 0x11,    /* Signed LEB128 constant.  */
0449     DW_OP_dup = 0x12,
0450     DW_OP_drop = 0x13,
0451     DW_OP_over = 0x14,
0452     DW_OP_pick = 0x15,      /* 1-byte stack index.  */
0453     DW_OP_swap = 0x16,
0454     DW_OP_rot = 0x17,
0455     DW_OP_xderef = 0x18,
0456     DW_OP_abs = 0x19,
0457     DW_OP_and = 0x1a,
0458     DW_OP_div = 0x1b,
0459     DW_OP_minus = 0x1c,
0460     DW_OP_mod = 0x1d,
0461     DW_OP_mul = 0x1e,
0462     DW_OP_neg = 0x1f,
0463     DW_OP_not = 0x20,
0464     DW_OP_or = 0x21,
0465     DW_OP_plus = 0x22,
0466     DW_OP_plus_uconst = 0x23,   /* Unsigned LEB128 addend.  */
0467     DW_OP_shl = 0x24,
0468     DW_OP_shr = 0x25,
0469     DW_OP_shra = 0x26,
0470     DW_OP_xor = 0x27,
0471     DW_OP_bra = 0x28,       /* Signed 2-byte constant.  */
0472     DW_OP_eq = 0x29,
0473     DW_OP_ge = 0x2a,
0474     DW_OP_gt = 0x2b,
0475     DW_OP_le = 0x2c,
0476     DW_OP_lt = 0x2d,
0477     DW_OP_ne = 0x2e,
0478     DW_OP_skip = 0x2f,      /* Signed 2-byte constant.  */
0479     DW_OP_lit0 = 0x30,      /* Literal 0.  */
0480     DW_OP_lit1 = 0x31,      /* Literal 1.  */
0481     DW_OP_lit2 = 0x32,      /* Literal 2.  */
0482     DW_OP_lit3 = 0x33,      /* Literal 3.  */
0483     DW_OP_lit4 = 0x34,      /* Literal 4.  */
0484     DW_OP_lit5 = 0x35,      /* Literal 5.  */
0485     DW_OP_lit6 = 0x36,      /* Literal 6.  */
0486     DW_OP_lit7 = 0x37,      /* Literal 7.  */
0487     DW_OP_lit8 = 0x38,      /* Literal 8.  */
0488     DW_OP_lit9 = 0x39,      /* Literal 9.  */
0489     DW_OP_lit10 = 0x3a,     /* Literal 10.  */
0490     DW_OP_lit11 = 0x3b,     /* Literal 11.  */
0491     DW_OP_lit12 = 0x3c,     /* Literal 12.  */
0492     DW_OP_lit13 = 0x3d,     /* Literal 13.  */
0493     DW_OP_lit14 = 0x3e,     /* Literal 14.  */
0494     DW_OP_lit15 = 0x3f,     /* Literal 15.  */
0495     DW_OP_lit16 = 0x40,     /* Literal 16.  */
0496     DW_OP_lit17 = 0x41,     /* Literal 17.  */
0497     DW_OP_lit18 = 0x42,     /* Literal 18.  */
0498     DW_OP_lit19 = 0x43,     /* Literal 19.  */
0499     DW_OP_lit20 = 0x44,     /* Literal 20.  */
0500     DW_OP_lit21 = 0x45,     /* Literal 21.  */
0501     DW_OP_lit22 = 0x46,     /* Literal 22.  */
0502     DW_OP_lit23 = 0x47,     /* Literal 23.  */
0503     DW_OP_lit24 = 0x48,     /* Literal 24.  */
0504     DW_OP_lit25 = 0x49,     /* Literal 25.  */
0505     DW_OP_lit26 = 0x4a,     /* Literal 26.  */
0506     DW_OP_lit27 = 0x4b,     /* Literal 27.  */
0507     DW_OP_lit28 = 0x4c,     /* Literal 28.  */
0508     DW_OP_lit29 = 0x4d,     /* Literal 29.  */
0509     DW_OP_lit30 = 0x4e,     /* Literal 30.  */
0510     DW_OP_lit31 = 0x4f,     /* Literal 31.  */
0511     DW_OP_reg0 = 0x50,      /* Register 0.  */
0512     DW_OP_reg1 = 0x51,      /* Register 1.  */
0513     DW_OP_reg2 = 0x52,      /* Register 2.  */
0514     DW_OP_reg3 = 0x53,      /* Register 3.  */
0515     DW_OP_reg4 = 0x54,      /* Register 4.  */
0516     DW_OP_reg5 = 0x55,      /* Register 5.  */
0517     DW_OP_reg6 = 0x56,      /* Register 6.  */
0518     DW_OP_reg7 = 0x57,      /* Register 7.  */
0519     DW_OP_reg8 = 0x58,      /* Register 8.  */
0520     DW_OP_reg9 = 0x59,      /* Register 9.  */
0521     DW_OP_reg10 = 0x5a,     /* Register 10.  */
0522     DW_OP_reg11 = 0x5b,     /* Register 11.  */
0523     DW_OP_reg12 = 0x5c,     /* Register 12.  */
0524     DW_OP_reg13 = 0x5d,     /* Register 13.  */
0525     DW_OP_reg14 = 0x5e,     /* Register 14.  */
0526     DW_OP_reg15 = 0x5f,     /* Register 15.  */
0527     DW_OP_reg16 = 0x60,     /* Register 16.  */
0528     DW_OP_reg17 = 0x61,     /* Register 17.  */
0529     DW_OP_reg18 = 0x62,     /* Register 18.  */
0530     DW_OP_reg19 = 0x63,     /* Register 19.  */
0531     DW_OP_reg20 = 0x64,     /* Register 20.  */
0532     DW_OP_reg21 = 0x65,     /* Register 21.  */
0533     DW_OP_reg22 = 0x66,     /* Register 22.  */
0534     DW_OP_reg23 = 0x67,     /* Register 24.  */
0535     DW_OP_reg24 = 0x68,     /* Register 24.  */
0536     DW_OP_reg25 = 0x69,     /* Register 25.  */
0537     DW_OP_reg26 = 0x6a,     /* Register 26.  */
0538     DW_OP_reg27 = 0x6b,     /* Register 27.  */
0539     DW_OP_reg28 = 0x6c,     /* Register 28.  */
0540     DW_OP_reg29 = 0x6d,     /* Register 29.  */
0541     DW_OP_reg30 = 0x6e,     /* Register 30.  */
0542     DW_OP_reg31 = 0x6f,     /* Register 31.  */
0543     DW_OP_breg0 = 0x70,     /* Base register 0.  */
0544     DW_OP_breg1 = 0x71,     /* Base register 1.  */
0545     DW_OP_breg2 = 0x72,     /* Base register 2.  */
0546     DW_OP_breg3 = 0x73,     /* Base register 3.  */
0547     DW_OP_breg4 = 0x74,     /* Base register 4.  */
0548     DW_OP_breg5 = 0x75,     /* Base register 5.  */
0549     DW_OP_breg6 = 0x76,     /* Base register 6.  */
0550     DW_OP_breg7 = 0x77,     /* Base register 7.  */
0551     DW_OP_breg8 = 0x78,     /* Base register 8.  */
0552     DW_OP_breg9 = 0x79,     /* Base register 9.  */
0553     DW_OP_breg10 = 0x7a,    /* Base register 10.  */
0554     DW_OP_breg11 = 0x7b,    /* Base register 11.  */
0555     DW_OP_breg12 = 0x7c,    /* Base register 12.  */
0556     DW_OP_breg13 = 0x7d,    /* Base register 13.  */
0557     DW_OP_breg14 = 0x7e,    /* Base register 14.  */
0558     DW_OP_breg15 = 0x7f,    /* Base register 15.  */
0559     DW_OP_breg16 = 0x80,    /* Base register 16.  */
0560     DW_OP_breg17 = 0x81,    /* Base register 17.  */
0561     DW_OP_breg18 = 0x82,    /* Base register 18.  */
0562     DW_OP_breg19 = 0x83,    /* Base register 19.  */
0563     DW_OP_breg20 = 0x84,    /* Base register 20.  */
0564     DW_OP_breg21 = 0x85,    /* Base register 21.  */
0565     DW_OP_breg22 = 0x86,    /* Base register 22.  */
0566     DW_OP_breg23 = 0x87,    /* Base register 23.  */
0567     DW_OP_breg24 = 0x88,    /* Base register 24.  */
0568     DW_OP_breg25 = 0x89,    /* Base register 25.  */
0569     DW_OP_breg26 = 0x8a,    /* Base register 26.  */
0570     DW_OP_breg27 = 0x8b,    /* Base register 27.  */
0571     DW_OP_breg28 = 0x8c,    /* Base register 28.  */
0572     DW_OP_breg29 = 0x8d,    /* Base register 29.  */
0573     DW_OP_breg30 = 0x8e,    /* Base register 30.  */
0574     DW_OP_breg31 = 0x8f,    /* Base register 31.  */
0575     DW_OP_regx = 0x90,      /* Unsigned LEB128 register.  */
0576     DW_OP_fbreg = 0x91,     /* Signed LEB128 offset.  */
0577     DW_OP_bregx = 0x92,     /* ULEB128 register followed by SLEB128 off. */
0578     DW_OP_piece = 0x93,     /* ULEB128 size of piece addressed. */
0579     DW_OP_deref_size = 0x94,    /* 1-byte size of data retrieved.  */
0580     DW_OP_xderef_size = 0x95,   /* 1-byte size of data retrieved.  */
0581     DW_OP_nop = 0x96,
0582     DW_OP_push_object_address = 0x97,
0583     DW_OP_call2 = 0x98,
0584     DW_OP_call4 = 0x99,
0585     DW_OP_call_ref = 0x9a,
0586     DW_OP_form_tls_address = 0x9b,/* TLS offset to address in current thread */
0587     DW_OP_call_frame_cfa = 0x9c,/* CFA as determined by CFI.  */
0588     DW_OP_bit_piece = 0x9d, /* ULEB128 size and ULEB128 offset in bits.  */
0589     DW_OP_implicit_value = 0x9e, /* DW_FORM_block follows opcode.  */
0590     DW_OP_stack_value = 0x9f,    /* No operands, special like DW_OP_piece.  */
0591 
0592     DW_OP_implicit_pointer = 0xa0,
0593     DW_OP_addrx = 0xa1,
0594     DW_OP_constx = 0xa2,
0595     DW_OP_entry_value = 0xa3,
0596     DW_OP_const_type = 0xa4,
0597     DW_OP_regval_type = 0xa5,
0598     DW_OP_deref_type = 0xa6,
0599     DW_OP_xderef_type = 0xa7,
0600     DW_OP_convert = 0xa8,
0601     DW_OP_reinterpret = 0xa9,
0602 
0603     /* GNU extensions.  */
0604     DW_OP_GNU_push_tls_address = 0xe0,
0605     DW_OP_GNU_uninit = 0xf0,
0606     DW_OP_GNU_encoded_addr = 0xf1,
0607     DW_OP_GNU_implicit_pointer = 0xf2,
0608     DW_OP_GNU_entry_value = 0xf3,
0609     DW_OP_GNU_const_type = 0xf4,
0610     DW_OP_GNU_regval_type = 0xf5,
0611     DW_OP_GNU_deref_type = 0xf6,
0612     DW_OP_GNU_convert = 0xf7,
0613     DW_OP_GNU_reinterpret = 0xf9,
0614     DW_OP_GNU_parameter_ref = 0xfa,
0615 
0616     /* GNU Debug Fission extensions.  */
0617     DW_OP_GNU_addr_index = 0xfb,
0618     DW_OP_GNU_const_index = 0xfc,
0619 
0620     DW_OP_GNU_variable_value = 0xfd,
0621 
0622     DW_OP_lo_user = 0xe0,   /* Implementation-defined range start.  */
0623     DW_OP_hi_user = 0xff    /* Implementation-defined range end.  */
0624   };
0625 
0626 
0627 /* DWARF base type encodings.  */
0628 enum
0629   {
0630     DW_ATE_void = 0x0,
0631     DW_ATE_address = 0x1,
0632     DW_ATE_boolean = 0x2,
0633     DW_ATE_complex_float = 0x3,
0634     DW_ATE_float = 0x4,
0635     DW_ATE_signed = 0x5,
0636     DW_ATE_signed_char = 0x6,
0637     DW_ATE_unsigned = 0x7,
0638     DW_ATE_unsigned_char = 0x8,
0639     DW_ATE_imaginary_float = 0x9,
0640     DW_ATE_packed_decimal = 0xa,
0641     DW_ATE_numeric_string = 0xb,
0642     DW_ATE_edited = 0xc,
0643     DW_ATE_signed_fixed = 0xd,
0644     DW_ATE_unsigned_fixed = 0xe,
0645     DW_ATE_decimal_float = 0xf,
0646     DW_ATE_UTF = 0x10,
0647     DW_ATE_UCS = 0x11,
0648     DW_ATE_ASCII = 0x12,
0649 
0650     DW_ATE_lo_user = 0x80,
0651     DW_ATE_hi_user = 0xff
0652   };
0653 
0654 
0655 /* DWARF decimal sign encodings.  */
0656 enum
0657   {
0658     DW_DS_unsigned = 1,
0659     DW_DS_leading_overpunch = 2,
0660     DW_DS_trailing_overpunch = 3,
0661     DW_DS_leading_separate = 4,
0662     DW_DS_trailing_separate = 5,
0663   };
0664 
0665 
0666 /* DWARF endianity encodings.  */
0667 enum
0668   {
0669     DW_END_default = 0,
0670     DW_END_big = 1,
0671     DW_END_little = 2,
0672 
0673     DW_END_lo_user = 0x40,
0674     DW_END_hi_user = 0xff
0675   };
0676 
0677 
0678 /* DWARF accessibility encodings.  */
0679 enum
0680   {
0681     DW_ACCESS_public = 1,
0682     DW_ACCESS_protected = 2,
0683     DW_ACCESS_private = 3
0684   };
0685 
0686 
0687 /* DWARF visibility encodings.  */
0688 enum
0689   {
0690     DW_VIS_local = 1,
0691     DW_VIS_exported = 2,
0692     DW_VIS_qualified = 3
0693   };
0694 
0695 
0696 /* DWARF virtuality encodings.  */
0697 enum
0698   {
0699     DW_VIRTUALITY_none = 0,
0700     DW_VIRTUALITY_virtual = 1,
0701     DW_VIRTUALITY_pure_virtual = 2
0702   };
0703 
0704 
0705 /* DWARF language encodings.
0706 
0707    See https://dwarfstd.org/languages.html for language code published
0708    after DWARF5 was published (but before DWARF6 has been released,
0709    which will introduce a new DW_AT_language_name/version scheme).  */
0710 enum
0711   {
0712     DW_LANG_C89 = 0x0001,        /* ISO C:1989 */
0713     DW_LANG_C = 0x0002,          /* C */
0714     DW_LANG_Ada83 = 0x0003,      /* ISO Ada:1983 */
0715     DW_LANG_C_plus_plus = 0x0004,    /* ISO C++:1998 */
0716     DW_LANG_Cobol74 = 0x0005,        /* ISO Cobol:1974 */
0717     DW_LANG_Cobol85 = 0x0006,        /* ISO Cobol:1985 */
0718     DW_LANG_Fortran77 = 0x0007,      /* ISO FORTRAN 77 */
0719     DW_LANG_Fortran90 = 0x0008,      /* ISO Fortran 90 */
0720     DW_LANG_Pascal83 = 0x0009,       /* ISO Pascal:1983 */
0721     DW_LANG_Modula2 = 0x000a,        /* ISO Modula-2:1996 */
0722     DW_LANG_Java = 0x000b,       /* Java */
0723     DW_LANG_C99 = 0x000c,        /* ISO C:1999 */
0724     DW_LANG_Ada95 = 0x000d,      /* ISO Ada:1995 */
0725     DW_LANG_Fortran95 = 0x000e,      /* ISO Fortran 95 */
0726     DW_LANG_PLI = 0x000f,        /* ISO PL/1:1976 */
0727     DW_LANG_ObjC = 0x0010,       /* Objective-C */
0728     DW_LANG_ObjC_plus_plus = 0x0011, /* Objective-C++ */
0729     DW_LANG_UPC = 0x0012,        /* Unified Parallel C */
0730     DW_LANG_D = 0x0013,          /* D */
0731     DW_LANG_Python = 0x0014,         /* Python */
0732     DW_LANG_OpenCL = 0x0015,         /* OpenCL */
0733     DW_LANG_Go = 0x0016,         /* Go */
0734     DW_LANG_Modula3 = 0x0017,        /* Modula-3 */
0735     DW_LANG_Haskell = 0x0018,        /* Haskell */
0736     DW_LANG_C_plus_plus_03 = 0x0019, /* ISO C++:2003 */
0737     DW_LANG_C_plus_plus_11 = 0x001a, /* ISO C++:2011 */
0738     DW_LANG_OCaml = 0x001b,      /* OCaml */
0739     DW_LANG_Rust = 0x001c,       /* Rust */
0740     DW_LANG_C11 = 0x001d,        /* ISO C:2011 */
0741     DW_LANG_Swift = 0x001e,      /* Swift */
0742     DW_LANG_Julia = 0x001f,      /* Julia */
0743     DW_LANG_Dylan = 0x0020,      /* Dylan */
0744     DW_LANG_C_plus_plus_14 = 0x0021, /* ISO C++:2014 */
0745     DW_LANG_Fortran03 = 0x0022,      /* ISO/IEC 1539-1:2004 */
0746     DW_LANG_Fortran08 = 0x0023,      /* ISO/IEC 1539-1:2010 */
0747     DW_LANG_RenderScript = 0x0024,   /* RenderScript Kernal Language */
0748     DW_LANG_BLISS = 0x0025,      /* BLISS */
0749 
0750     DW_LANG_Kotlin = 0x0026,         /* Kotlin */
0751     DW_LANG_Zig = 0x0027,        /* Zig */
0752     DW_LANG_Crystal = 0x0028,        /* Crystal */
0753     DW_LANG_C_plus_plus_17 = 0x002a, /* ISO C++:2017 */
0754     DW_LANG_C_plus_plus_20 = 0x002b, /* ISO C++:2018 */
0755     DW_LANG_C17 = 0x002c,        /* ISO C:2017 */
0756     DW_LANG_Fortran18 = 0x002d,      /* ISO/IEC 1539-1:2018 */
0757     DW_LANG_Ada2005 = 0x002e,        /* ISO Ada:2005 */
0758     DW_LANG_Ada2012 = 0x002f,        /* ISO Ada:2005 */
0759     DW_LANG_HIP = 0x0030,        /* HIP */
0760     DW_LANG_Assembly = 0x0031,       /* Assembly */
0761     DW_LANG_C_sharp = 0x0032,        /* C# */
0762     DW_LANG_Mojo = 0x0033,       /* Mojo */
0763     DW_LANG_GLSL = 0x0034,       /* OpenGL Shading Language */
0764     DW_LANG_GLSL_ES = 0x0035,        /* OpenGL ES Shading Language */
0765     DW_LANG_HLSL = 0x0036,       /* High-Level Shading Language */
0766     DW_LANG_OpenCL_CPP = 0x0037,     /* OpenCL C++ */
0767     DW_LANG_CPP_for_OpenCL = 0x0038, /* C++ for OpenCL */
0768     DW_LANG_SYCL = 0x0039,       /* SYCL */
0769     DW_LANG_C_plus_plus_23 = 0x003a, /* ISO C++:2023 */
0770     DW_LANG_Odin = 0x003b,       /* Odin */
0771     DW_LANG_P4 = 0x003c,         /* P4 */
0772     DW_LANG_Metal = 0x003d,      /* Metal */
0773     DW_LANG_C23 = 0x003e,        /* ISO C:2023 */
0774     DW_LANG_Fortran23 = 0x003f,      /* ISO/IEC 1539-1:2023 */
0775     DW_LANG_Ruby = 0x0040,       /* Ruby */
0776     DW_LANG_Move = 0x0041,       /* Move */
0777     DW_LANG_Hylo = 0x0042,       /* Hylo */
0778     DW_LANG_V = 0x0043,          /* V Programming Language */
0779     DW_LANG_Algol68 = 0x0044,        /* Algol68 */
0780     DW_LANG_Nim = 0x0045,        /* Nim */
0781 
0782     DW_LANG_lo_user = 0x8000,
0783     DW_LANG_Mips_Assembler = 0x8001, /* Assembler */
0784     DW_LANG_hi_user = 0xffff
0785   };
0786 
0787 /* Old (typo) '1' != 'I'.  */
0788 #define DW_LANG_PL1 DW_LANG_PLI
0789 
0790 /* https://dwarfstd.org/languages-v6.html  */
0791 enum
0792   {
0793     DW_LNAME_Ada = 0x0001,
0794     DW_LNAME_BLISS = 0x0002,
0795     DW_LNAME_C = 0x0003,
0796     DW_LNAME_C_plus_plus = 0x0004,
0797     DW_LNAME_Cobol = 0x0005,
0798     DW_LNAME_Crystal = 0x0006,
0799     DW_LNAME_D = 0x0007,
0800     DW_LNAME_Dylan = 0x0008,
0801     DW_LNAME_Fortran = 0x0009,
0802     DW_LNAME_Go = 0x000a,
0803     DW_LNAME_Haskell = 0x000b,
0804     DW_LNAME_Java = 0x000c,
0805     DW_LNAME_Julia = 0x000d,
0806     DW_LNAME_Kotlin = 0x000e,
0807     DW_LNAME_Modula2 = 0x000f,
0808     DW_LNAME_Modula3 = 0x0010,
0809     DW_LNAME_ObjC = 0x0011,
0810     DW_LNAME_ObjC_plus_plus = 0x0012,
0811     DW_LNAME_OCaml = 0x0013,
0812     DW_LNAME_OpenCL_C = 0x0014,
0813     DW_LNAME_Pascal = 0x0015,
0814     DW_LNAME_PLI = 0x0016,
0815     DW_LNAME_Python = 0x0017,
0816     DW_LNAME_RenderScript = 0x0018,
0817     DW_LNAME_Rust = 0x0019,
0818     DW_LNAME_Swift = 0x001a,
0819     DW_LNAME_UPC = 0x001b,
0820     DW_LNAME_Zig = 0x001c,
0821     DW_LNAME_Assembly = 0x001d,
0822     DW_LNAME_C_sharp = 0x001e,
0823     DW_LNAME_Mojo = 0x001f,
0824     DW_LNAME_GLSL = 0x0020,
0825     DW_LNAME_GLSL_ES = 0x0021,
0826     DW_LNAME_HLSL = 0x0022,
0827     DW_LNAME_OpenCL_CPP = 0x0023,
0828     DW_LNAME_CPP_for_OpenCL = 0x0024,
0829     DW_LNAME_SYCL = 0x0025,
0830     DW_LNAME_Ruby = 0x0026,
0831     DW_LNAME_Move = 0x0027,
0832     DW_LNAME_Hylo = 0x0028,
0833     DW_LNAME_HIP = 0x0029,
0834     DW_LNAME_Odin = 0x002a,
0835     DW_LNAME_P4 = 0x002b,
0836     DW_LNAME_Metal = 0x002c,
0837     DW_LNAME_V = 0x002d,
0838     DW_LNAME_Algol68 = 0x002e,
0839     DW_LNAME_Nim = 0x002f,
0840 
0841     DW_LNAME_lo_user = 0x8000,
0842     DW_LNAME_hi_user = 0xffff
0843   };
0844 
0845 /* DWARF identifier case encodings.  */
0846 enum
0847   {
0848     DW_ID_case_sensitive = 0,
0849     DW_ID_up_case = 1,
0850     DW_ID_down_case = 2,
0851     DW_ID_case_insensitive = 3
0852   };
0853 
0854 
0855 /* DWARF calling conventions encodings.
0856    Used as values of DW_AT_calling_convention for subroutines
0857    (normal, program or nocall) or structures, unions and class types
0858    (normal, reference or value).  */
0859 enum
0860   {
0861     DW_CC_normal = 0x1,
0862     DW_CC_program = 0x2,
0863     DW_CC_nocall = 0x3,
0864     DW_CC_pass_by_reference = 0x4,
0865     DW_CC_pass_by_value = 0x5,
0866     DW_CC_lo_user = 0x40,
0867     DW_CC_hi_user = 0xff
0868   };
0869 
0870 
0871 /* DWARF inline encodings.  */
0872 enum
0873   {
0874     DW_INL_not_inlined = 0,
0875     DW_INL_inlined = 1,
0876     DW_INL_declared_not_inlined = 2,
0877     DW_INL_declared_inlined = 3
0878   };
0879 
0880 
0881 /* DWARF ordering encodings.  */
0882 enum
0883   {
0884     DW_ORD_row_major = 0,
0885     DW_ORD_col_major = 1
0886   };
0887 
0888 
0889 /* DWARF discriminant descriptor encodings.  */
0890 enum
0891   {
0892     DW_DSC_label = 0,
0893     DW_DSC_range = 1
0894   };
0895 
0896 /* DWARF defaulted member function encodings.  */
0897 enum
0898   {
0899     DW_DEFAULTED_no = 0,
0900     DW_DEFAULTED_in_class = 1,
0901     DW_DEFAULTED_out_of_class = 2
0902   };
0903 
0904 /* DWARF line content descriptions.  */
0905 enum
0906   {
0907     DW_LNCT_path = 0x1,
0908     DW_LNCT_directory_index = 0x2,
0909     DW_LNCT_timestamp = 0x3,
0910     DW_LNCT_size = 0x4,
0911     DW_LNCT_MD5 = 0x5,
0912     DW_LNCT_lo_user = 0x2000,
0913     DW_LNCT_hi_user = 0x3fff
0914   };
0915 
0916 /* DWARF standard opcode encodings.  */
0917 enum
0918   {
0919     DW_LNS_copy = 1,
0920     DW_LNS_advance_pc = 2,
0921     DW_LNS_advance_line = 3,
0922     DW_LNS_set_file = 4,
0923     DW_LNS_set_column = 5,
0924     DW_LNS_negate_stmt = 6,
0925     DW_LNS_set_basic_block = 7,
0926     DW_LNS_const_add_pc = 8,
0927     DW_LNS_fixed_advance_pc = 9,
0928     DW_LNS_set_prologue_end = 10,
0929     DW_LNS_set_epilogue_begin = 11,
0930     DW_LNS_set_isa = 12
0931   };
0932 
0933 
0934 /* DWARF extended opcode encodings.  */
0935 enum
0936   {
0937     DW_LNE_end_sequence = 1,
0938     DW_LNE_set_address = 2,
0939     DW_LNE_define_file = 3,
0940     DW_LNE_set_discriminator = 4,
0941 
0942     DW_LNE_lo_user = 128,
0943 
0944     DW_LNE_NVIDIA_inlined_call = 144,
0945     DW_LNE_NVIDIA_set_function_name = 145,
0946 
0947     DW_LNE_hi_user = 255
0948   };
0949 
0950 
0951 /* DWARF macinfo type encodings.  */
0952 enum
0953   {
0954     DW_MACINFO_define = 1,
0955     DW_MACINFO_undef = 2,
0956     DW_MACINFO_start_file = 3,
0957     DW_MACINFO_end_file = 4,
0958     DW_MACINFO_vendor_ext = 255
0959   };
0960 
0961 
0962 /* DWARF debug_macro type encodings.  */
0963 enum
0964   {
0965     DW_MACRO_define = 0x01,
0966     DW_MACRO_undef = 0x02,
0967     DW_MACRO_start_file = 0x03,
0968     DW_MACRO_end_file = 0x04,
0969     DW_MACRO_define_strp = 0x05,
0970     DW_MACRO_undef_strp = 0x06,
0971     DW_MACRO_import = 0x07,
0972     DW_MACRO_define_sup = 0x08,
0973     DW_MACRO_undef_sup = 0x09,
0974     DW_MACRO_import_sup = 0x0a,
0975     DW_MACRO_define_strx = 0x0b,
0976     DW_MACRO_undef_strx = 0x0c,
0977     DW_MACRO_lo_user = 0xe0,
0978     DW_MACRO_hi_user = 0xff
0979   };
0980 
0981 /* Old GNU extension names for DWARF5 debug_macro type encodings.
0982    There are no equivalents for the supplementary object file (sup)
0983    and indirect string references (strx).  */
0984 #define DW_MACRO_GNU_define      DW_MACRO_define
0985 #define DW_MACRO_GNU_undef       DW_MACRO_undef
0986 #define DW_MACRO_GNU_start_file      DW_MACRO_start_file
0987 #define DW_MACRO_GNU_end_file        DW_MACRO_end_file
0988 #define DW_MACRO_GNU_define_indirect     DW_MACRO_define_strp
0989 #define DW_MACRO_GNU_undef_indirect  DW_MACRO_undef_strp
0990 #define DW_MACRO_GNU_transparent_include DW_MACRO_import
0991 #define DW_MACRO_GNU_lo_user         DW_MACRO_lo_user
0992 #define DW_MACRO_GNU_hi_user         DW_MACRO_hi_user
0993 
0994 
0995 /* Range list entry encoding.  */
0996 enum
0997   {
0998     DW_RLE_end_of_list = 0x0,
0999     DW_RLE_base_addressx = 0x1,
1000     DW_RLE_startx_endx = 0x2,
1001     DW_RLE_startx_length = 0x3,
1002     DW_RLE_offset_pair = 0x4,
1003     DW_RLE_base_address = 0x5,
1004     DW_RLE_start_end = 0x6,
1005     DW_RLE_start_length = 0x7
1006   };
1007 
1008 
1009 /* Location list entry encoding.  */
1010 enum
1011   {
1012     DW_LLE_end_of_list = 0x0,
1013     DW_LLE_base_addressx = 0x1,
1014     DW_LLE_startx_endx = 0x2,
1015     DW_LLE_startx_length = 0x3,
1016     DW_LLE_offset_pair = 0x4,
1017     DW_LLE_default_location = 0x5,
1018     DW_LLE_base_address = 0x6,
1019     DW_LLE_start_end = 0x7,
1020     DW_LLE_start_length = 0x8
1021   };
1022 
1023 
1024 /* GNU DebugFission list entry encodings (.debug_loc.dwo).  */
1025 enum
1026   {
1027     DW_LLE_GNU_end_of_list_entry = 0x0,
1028     DW_LLE_GNU_base_address_selection_entry = 0x1,
1029     DW_LLE_GNU_start_end_entry = 0x2,
1030     DW_LLE_GNU_start_length_entry = 0x3,
1031 
1032     // http://www.fsfla.org/~lxoliva/papers/sfn/dwarf6-sfn-lvu.txt
1033     // https://dwarfstd.org/ShowIssue.php?issue=170427.1
1034     DW_LLE_GNU_view_pair = 0x9
1035   };
1036 
1037 /* DWARF5 package file section identifiers.  */
1038 enum
1039   {
1040     DW_SECT_INFO = 1,
1041     DW_SECT_TYPES = 2, /* Only DWARF4 GNU DebugFission. Reserved in DWARF5.  */
1042     DW_SECT_ABBREV = 3,
1043     DW_SECT_LINE = 4,
1044     DW_SECT_LOCLISTS = 5,
1045     DW_SECT_STR_OFFSETS = 6,
1046     DW_SECT_MACRO = 7,
1047     DW_SECT_RNGLISTS = 8,
1048   };
1049 
1050 
1051 /* DWARF call frame instruction encodings.  */
1052 enum
1053   {
1054     DW_CFA_advance_loc = 0x40,
1055     DW_CFA_offset = 0x80,
1056     DW_CFA_restore = 0xc0,
1057     DW_CFA_extended = 0,
1058 
1059     DW_CFA_nop = 0x00,
1060     DW_CFA_set_loc = 0x01,
1061     DW_CFA_advance_loc1 = 0x02,
1062     DW_CFA_advance_loc2 = 0x03,
1063     DW_CFA_advance_loc4 = 0x04,
1064     DW_CFA_offset_extended = 0x05,
1065     DW_CFA_restore_extended = 0x06,
1066     DW_CFA_undefined = 0x07,
1067     DW_CFA_same_value = 0x08,
1068     DW_CFA_register = 0x09,
1069     DW_CFA_remember_state = 0x0a,
1070     DW_CFA_restore_state = 0x0b,
1071     DW_CFA_def_cfa = 0x0c,
1072     DW_CFA_def_cfa_register = 0x0d,
1073     DW_CFA_def_cfa_offset = 0x0e,
1074     DW_CFA_def_cfa_expression = 0x0f,
1075     DW_CFA_expression = 0x10,
1076     DW_CFA_offset_extended_sf = 0x11,
1077     DW_CFA_def_cfa_sf = 0x12,
1078     DW_CFA_def_cfa_offset_sf = 0x13,
1079     DW_CFA_val_offset = 0x14,
1080     DW_CFA_val_offset_sf = 0x15,
1081     DW_CFA_val_expression = 0x16,
1082 
1083     DW_CFA_low_user = 0x1c,
1084     DW_CFA_MIPS_advance_loc8 = 0x1d,
1085     DW_CFA_GNU_window_save = 0x2d,
1086     DW_CFA_AARCH64_negate_ra_state = 0x2d,
1087     DW_CFA_GNU_args_size = 0x2e,
1088     DW_CFA_GNU_negative_offset_extended = 0x2f,
1089     DW_CFA_high_user = 0x3f
1090   };
1091 
1092 /* ID indicating CIE as opposed to FDE in .debug_frame.  */
1093 enum
1094   {
1095     DW_CIE_ID_32 = 0xffffffffU,      /* In 32-bit format CIE header.  */
1096     DW_CIE_ID_64 = 0xffffffffffffffffULL /* In 64-bit format CIE header.  */
1097   };
1098 
1099 
1100 /* Information for GNU unwind information.  */
1101 enum
1102   {
1103     DW_EH_PE_absptr = 0x00,
1104     DW_EH_PE_omit = 0xff,
1105 
1106     /* FDE data encoding.  */
1107     DW_EH_PE_uleb128 = 0x01,
1108     DW_EH_PE_udata2 = 0x02,
1109     DW_EH_PE_udata4 = 0x03,
1110     DW_EH_PE_udata8 = 0x04,
1111     DW_EH_PE_sleb128 = 0x09,
1112     DW_EH_PE_sdata2 = 0x0a,
1113     DW_EH_PE_sdata4 = 0x0b,
1114     DW_EH_PE_sdata8 = 0x0c,
1115     DW_EH_PE_signed = 0x08,
1116 
1117     /* FDE flags.  */
1118     DW_EH_PE_pcrel = 0x10,
1119     DW_EH_PE_textrel = 0x20,
1120     DW_EH_PE_datarel = 0x30,
1121     DW_EH_PE_funcrel = 0x40,
1122     DW_EH_PE_aligned = 0x50,
1123 
1124     DW_EH_PE_indirect = 0x80
1125   };
1126 
1127 
1128 /* DWARF XXX.  */
1129 #define DW_ADDR_none    0
1130 
1131 /* Section 7.2.2 of the DWARF3 specification defines a range of escape
1132    codes that can appear in the length field of certain DWARF structures.
1133 
1134    These defines enumerate the minimum and maximum values of this range.
1135    Currently only the maximum value is used (to indicate that 64-bit
1136    values are going to be used in the dwarf data that accompanies the
1137    structure).  The other values are reserved.
1138 
1139    Note: There is a typo in DWARF3 spec (published Dec 20, 2005).  In
1140    sections 7.4, 7.5.1, 7.19, 7.20 the minimum escape code is referred to
1141    as 0xffffff00 whereas in fact it should be 0xfffffff0.  */
1142 #define DWARF3_LENGTH_MIN_ESCAPE_CODE 0xfffffff0u
1143 #define DWARF3_LENGTH_MAX_ESCAPE_CODE 0xffffffffu
1144 #define DWARF3_LENGTH_64_BIT          DWARF3_LENGTH_MAX_ESCAPE_CODE
1145 
1146 #endif  /* dwarf.h */