dxil-reader 0.12.0

DXIL reader: decodes Direct3D Shader Model 6 programs (LLVM bitcode in a DXBC container) to modules, with resource, signature and RDAT reflection records
Documentation
//! The names LLVM 3.7 gives DWARF constants when it prints debug information (`llvm::dwarf::TagString` and the
//! others), as dxc 1.9.2609 carries them: transcribed from its `include/llvm/Support/Dwarf.def`. A value without a
//! name prints as its number.

/// A DWARF tag's name, where LLVM names it.
pub(crate) fn tag(value: u64) -> Option<&'static str> {
    Some(match value {
        0x1 => "DW_TAG_array_type",
        0x2 => "DW_TAG_class_type",
        0x3 => "DW_TAG_entry_point",
        0x4 => "DW_TAG_enumeration_type",
        0x5 => "DW_TAG_formal_parameter",
        0x8 => "DW_TAG_imported_declaration",
        0xa => "DW_TAG_label",
        0xb => "DW_TAG_lexical_block",
        0xd => "DW_TAG_member",
        0xf => "DW_TAG_pointer_type",
        0x10 => "DW_TAG_reference_type",
        0x11 => "DW_TAG_compile_unit",
        0x12 => "DW_TAG_string_type",
        0x13 => "DW_TAG_structure_type",
        0x15 => "DW_TAG_subroutine_type",
        0x16 => "DW_TAG_typedef",
        0x17 => "DW_TAG_union_type",
        0x18 => "DW_TAG_unspecified_parameters",
        0x19 => "DW_TAG_variant",
        0x1a => "DW_TAG_common_block",
        0x1b => "DW_TAG_common_inclusion",
        0x1c => "DW_TAG_inheritance",
        0x1d => "DW_TAG_inlined_subroutine",
        0x1e => "DW_TAG_module",
        0x1f => "DW_TAG_ptr_to_member_type",
        0x20 => "DW_TAG_set_type",
        0x21 => "DW_TAG_subrange_type",
        0x22 => "DW_TAG_with_stmt",
        0x23 => "DW_TAG_access_declaration",
        0x24 => "DW_TAG_base_type",
        0x25 => "DW_TAG_catch_block",
        0x26 => "DW_TAG_const_type",
        0x27 => "DW_TAG_constant",
        0x28 => "DW_TAG_enumerator",
        0x29 => "DW_TAG_file_type",
        0x2a => "DW_TAG_friend",
        0x2b => "DW_TAG_namelist",
        0x2c => "DW_TAG_namelist_item",
        0x2d => "DW_TAG_packed_type",
        0x2e => "DW_TAG_subprogram",
        0x2f => "DW_TAG_template_type_parameter",
        0x30 => "DW_TAG_template_value_parameter",
        0x31 => "DW_TAG_thrown_type",
        0x32 => "DW_TAG_try_block",
        0x33 => "DW_TAG_variant_part",
        0x34 => "DW_TAG_variable",
        0x35 => "DW_TAG_volatile_type",
        0x36 => "DW_TAG_dwarf_procedure",
        0x37 => "DW_TAG_restrict_type",
        0x38 => "DW_TAG_interface_type",
        0x39 => "DW_TAG_namespace",
        0x3a => "DW_TAG_imported_module",
        0x3b => "DW_TAG_unspecified_type",
        0x3c => "DW_TAG_partial_unit",
        0x3d => "DW_TAG_imported_unit",
        0x3f => "DW_TAG_condition",
        0x40 => "DW_TAG_shared_type",
        0x41 => "DW_TAG_type_unit",
        0x42 => "DW_TAG_rvalue_reference_type",
        0x43 => "DW_TAG_template_alias",
        0x100 => "DW_TAG_auto_variable",
        0x101 => "DW_TAG_arg_variable",
        0x44 => "DW_TAG_coarray_type",
        0x45 => "DW_TAG_generic_subrange",
        0x46 => "DW_TAG_dynamic_type",
        0x4081 => "DW_TAG_MIPS_loop",
        0x4101 => "DW_TAG_format_label",
        0x4102 => "DW_TAG_function_template",
        0x4103 => "DW_TAG_class_template",
        0x4106 => "DW_TAG_GNU_template_template_param",
        0x4107 => "DW_TAG_GNU_template_parameter_pack",
        0x4108 => "DW_TAG_GNU_formal_parameter_pack",
        0x4200 => "DW_TAG_APPLE_property",
        _ => return None,
    })
}

/// A DWARF base type encoding (`DW_ATE_*`)'s name, where LLVM names it.
pub(crate) fn encoding(value: u64) -> Option<&'static str> {
    Some(match value {
        0x1 => "DW_ATE_address",
        0x2 => "DW_ATE_boolean",
        0x3 => "DW_ATE_complex_float",
        0x4 => "DW_ATE_float",
        0x5 => "DW_ATE_signed",
        0x6 => "DW_ATE_signed_char",
        0x7 => "DW_ATE_unsigned",
        0x8 => "DW_ATE_unsigned_char",
        0x9 => "DW_ATE_imaginary_float",
        0xa => "DW_ATE_packed_decimal",
        0xb => "DW_ATE_numeric_string",
        0xc => "DW_ATE_edited",
        0xd => "DW_ATE_signed_fixed",
        0xe => "DW_ATE_unsigned_fixed",
        0xf => "DW_ATE_decimal_float",
        0x10 => "DW_ATE_UTF",
        _ => return None,
    })
}

/// A DWARF source language's name, where LLVM names it.
pub(crate) fn language(value: u64) -> Option<&'static str> {
    Some(match value {
        0x1 => "DW_LANG_C89",
        0x2 => "DW_LANG_C",
        0x3 => "DW_LANG_Ada83",
        0x4 => "DW_LANG_C_plus_plus",
        0x5 => "DW_LANG_Cobol74",
        0x6 => "DW_LANG_Cobol85",
        0x7 => "DW_LANG_Fortran77",
        0x8 => "DW_LANG_Fortran90",
        0x9 => "DW_LANG_Pascal83",
        0xa => "DW_LANG_Modula2",
        0xb => "DW_LANG_Java",
        0xc => "DW_LANG_C99",
        0xd => "DW_LANG_Ada95",
        0xe => "DW_LANG_Fortran95",
        0xf => "DW_LANG_PLI",
        0x10 => "DW_LANG_ObjC",
        0x11 => "DW_LANG_ObjC_plus_plus",
        0x12 => "DW_LANG_UPC",
        0x13 => "DW_LANG_D",
        0x14 => "DW_LANG_Python",
        0x15 => "DW_LANG_OpenCL",
        0x16 => "DW_LANG_Go",
        0x17 => "DW_LANG_Modula3",
        0x18 => "DW_LANG_Haskell",
        0x19 => "DW_LANG_C_plus_plus_03",
        0x1a => "DW_LANG_C_plus_plus_11",
        0x1b => "DW_LANG_OCaml",
        0x1c => "DW_LANG_Rust",
        0x1d => "DW_LANG_C11",
        0x1e => "DW_LANG_Swift",
        0x1f => "DW_LANG_Julia",
        0x20 => "DW_LANG_Dylan",
        0x21 => "DW_LANG_C_plus_plus_14",
        0x22 => "DW_LANG_Fortran03",
        0x23 => "DW_LANG_Fortran08",
        0x8001 => "DW_LANG_Mips_Assembler",
        _ => return None,
    })
}

/// A DWARF virtuality's name, where LLVM names it.
pub(crate) fn virtuality(value: u64) -> Option<&'static str> {
    Some(match value {
        0x0 => "DW_VIRTUALITY_none",
        0x1 => "DW_VIRTUALITY_virtual",
        0x2 => "DW_VIRTUALITY_pure_virtual",
        _ => return None,
    })
}

/// A DWARF expression operation's name, where LLVM names it.
pub(crate) fn operation(value: u64) -> Option<&'static str> {
    Some(match value {
        0x3 => "DW_OP_addr",
        0x6 => "DW_OP_deref",
        0x8 => "DW_OP_const1u",
        0x9 => "DW_OP_const1s",
        0xa => "DW_OP_const2u",
        0xb => "DW_OP_const2s",
        0xc => "DW_OP_const4u",
        0xd => "DW_OP_const4s",
        0xe => "DW_OP_const8u",
        0xf => "DW_OP_const8s",
        0x10 => "DW_OP_constu",
        0x11 => "DW_OP_consts",
        0x12 => "DW_OP_dup",
        0x13 => "DW_OP_drop",
        0x14 => "DW_OP_over",
        0x15 => "DW_OP_pick",
        0x16 => "DW_OP_swap",
        0x17 => "DW_OP_rot",
        0x18 => "DW_OP_xderef",
        0x19 => "DW_OP_abs",
        0x1a => "DW_OP_and",
        0x1b => "DW_OP_div",
        0x1c => "DW_OP_minus",
        0x1d => "DW_OP_mod",
        0x1e => "DW_OP_mul",
        0x1f => "DW_OP_neg",
        0x20 => "DW_OP_not",
        0x21 => "DW_OP_or",
        0x22 => "DW_OP_plus",
        0x23 => "DW_OP_plus_uconst",
        0x24 => "DW_OP_shl",
        0x25 => "DW_OP_shr",
        0x26 => "DW_OP_shra",
        0x27 => "DW_OP_xor",
        0x2f => "DW_OP_skip",
        0x28 => "DW_OP_bra",
        0x29 => "DW_OP_eq",
        0x2a => "DW_OP_ge",
        0x2b => "DW_OP_gt",
        0x2c => "DW_OP_le",
        0x2d => "DW_OP_lt",
        0x2e => "DW_OP_ne",
        0x30 => "DW_OP_lit0",
        0x31 => "DW_OP_lit1",
        0x32 => "DW_OP_lit2",
        0x33 => "DW_OP_lit3",
        0x34 => "DW_OP_lit4",
        0x35 => "DW_OP_lit5",
        0x36 => "DW_OP_lit6",
        0x37 => "DW_OP_lit7",
        0x38 => "DW_OP_lit8",
        0x39 => "DW_OP_lit9",
        0x3a => "DW_OP_lit10",
        0x3b => "DW_OP_lit11",
        0x3c => "DW_OP_lit12",
        0x3d => "DW_OP_lit13",
        0x3e => "DW_OP_lit14",
        0x3f => "DW_OP_lit15",
        0x40 => "DW_OP_lit16",
        0x41 => "DW_OP_lit17",
        0x42 => "DW_OP_lit18",
        0x43 => "DW_OP_lit19",
        0x44 => "DW_OP_lit20",
        0x45 => "DW_OP_lit21",
        0x46 => "DW_OP_lit22",
        0x47 => "DW_OP_lit23",
        0x48 => "DW_OP_lit24",
        0x49 => "DW_OP_lit25",
        0x4a => "DW_OP_lit26",
        0x4b => "DW_OP_lit27",
        0x4c => "DW_OP_lit28",
        0x4d => "DW_OP_lit29",
        0x4e => "DW_OP_lit30",
        0x4f => "DW_OP_lit31",
        0x50 => "DW_OP_reg0",
        0x51 => "DW_OP_reg1",
        0x52 => "DW_OP_reg2",
        0x53 => "DW_OP_reg3",
        0x54 => "DW_OP_reg4",
        0x55 => "DW_OP_reg5",
        0x56 => "DW_OP_reg6",
        0x57 => "DW_OP_reg7",
        0x58 => "DW_OP_reg8",
        0x59 => "DW_OP_reg9",
        0x5a => "DW_OP_reg10",
        0x5b => "DW_OP_reg11",
        0x5c => "DW_OP_reg12",
        0x5d => "DW_OP_reg13",
        0x5e => "DW_OP_reg14",
        0x5f => "DW_OP_reg15",
        0x60 => "DW_OP_reg16",
        0x61 => "DW_OP_reg17",
        0x62 => "DW_OP_reg18",
        0x63 => "DW_OP_reg19",
        0x64 => "DW_OP_reg20",
        0x65 => "DW_OP_reg21",
        0x66 => "DW_OP_reg22",
        0x67 => "DW_OP_reg23",
        0x68 => "DW_OP_reg24",
        0x69 => "DW_OP_reg25",
        0x6a => "DW_OP_reg26",
        0x6b => "DW_OP_reg27",
        0x6c => "DW_OP_reg28",
        0x6d => "DW_OP_reg29",
        0x6e => "DW_OP_reg30",
        0x6f => "DW_OP_reg31",
        0x70 => "DW_OP_breg0",
        0x71 => "DW_OP_breg1",
        0x72 => "DW_OP_breg2",
        0x73 => "DW_OP_breg3",
        0x74 => "DW_OP_breg4",
        0x75 => "DW_OP_breg5",
        0x76 => "DW_OP_breg6",
        0x77 => "DW_OP_breg7",
        0x78 => "DW_OP_breg8",
        0x79 => "DW_OP_breg9",
        0x7a => "DW_OP_breg10",
        0x7b => "DW_OP_breg11",
        0x7c => "DW_OP_breg12",
        0x7d => "DW_OP_breg13",
        0x7e => "DW_OP_breg14",
        0x7f => "DW_OP_breg15",
        0x80 => "DW_OP_breg16",
        0x81 => "DW_OP_breg17",
        0x82 => "DW_OP_breg18",
        0x83 => "DW_OP_breg19",
        0x84 => "DW_OP_breg20",
        0x85 => "DW_OP_breg21",
        0x86 => "DW_OP_breg22",
        0x87 => "DW_OP_breg23",
        0x88 => "DW_OP_breg24",
        0x89 => "DW_OP_breg25",
        0x8a => "DW_OP_breg26",
        0x8b => "DW_OP_breg27",
        0x8c => "DW_OP_breg28",
        0x8d => "DW_OP_breg29",
        0x8e => "DW_OP_breg30",
        0x8f => "DW_OP_breg31",
        0x90 => "DW_OP_regx",
        0x91 => "DW_OP_fbreg",
        0x92 => "DW_OP_bregx",
        0x93 => "DW_OP_piece",
        0x94 => "DW_OP_deref_size",
        0x95 => "DW_OP_xderef_size",
        0x96 => "DW_OP_nop",
        0x97 => "DW_OP_push_object_address",
        0x98 => "DW_OP_call2",
        0x99 => "DW_OP_call4",
        0x9a => "DW_OP_call_ref",
        0x9b => "DW_OP_form_tls_address",
        0x9c => "DW_OP_call_frame_cfa",
        0x9d => "DW_OP_bit_piece",
        0x9e => "DW_OP_implicit_value",
        0x9f => "DW_OP_stack_value",
        0xe0 => "DW_OP_GNU_push_tls_address",
        0xfb => "DW_OP_GNU_addr_index",
        0xfc => "DW_OP_GNU_const_index",
        _ => return None,
    })
}