1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef NOGROD_DWARF_CONSTANTS_ 18 #define NOGROD_DWARF_CONSTANTS_ 19 20 #include <cstdint> 21 22 enum class DwarfFormat { k32Bit, k64Bit }; 23 24 // Unit header unit type encodings 25 constexpr uint8_t DW_UT_compile = 0x01; 26 constexpr uint8_t DW_UT_type = 0x02; 27 constexpr uint8_t DW_UT_partial = 0x03; 28 29 constexpr uint8_t DW_CHILDREN_no = 0x0; 30 constexpr uint8_t DW_CHILDREN_yes = 0x1; 31 32 // Base type encoding values 33 constexpr uint8_t DW_ATE_address = 0x01; 34 constexpr uint8_t DW_ATE_boolean = 0x02; 35 constexpr uint8_t DW_ATE_complex_float = 0x03; 36 constexpr uint8_t DW_ATE_float = 0x04; 37 constexpr uint8_t DW_ATE_signed = 0x05; 38 constexpr uint8_t DW_ATE_signed_char = 0x06; 39 constexpr uint8_t DW_ATE_unsigned = 0x07; 40 constexpr uint8_t DW_ATE_unsigned_char = 0x08; 41 constexpr uint8_t DW_ATE_imaginary_float = 0x09; 42 constexpr uint8_t DW_ATE_packed_decimal = 0x0a; 43 constexpr uint8_t DW_ATE_numeric_string = 0x0b; 44 constexpr uint8_t DW_ATE_edited = 0x0c; 45 constexpr uint8_t DW_ATE_signed_fixed = 0x0d; 46 constexpr uint8_t DW_ATE_unsigned_fixed = 0x0e; 47 constexpr uint8_t DW_ATE_decimal_float = 0x0f; 48 constexpr uint8_t DW_ATE_UTF = 0x10; 49 constexpr uint8_t DW_ATE_UCS = 0x11; 50 constexpr uint8_t DW_ATE_ASCII = 0x12; 51 52 // Tag encodings 53 constexpr uint16_t DW_TAG_array_type = 0x01; 54 constexpr uint16_t DW_TAG_class_type = 0x02; 55 constexpr uint16_t DW_TAG_entry_point = 0x03; 56 constexpr uint16_t DW_TAG_enumeration_type = 0x04; 57 constexpr uint16_t DW_TAG_formal_parameter = 0x05; 58 59 constexpr uint16_t DW_TAG_imported_declaration = 0x08; 60 61 constexpr uint16_t DW_TAG_label = 0x0a; 62 constexpr uint16_t DW_TAG_lexical_block = 0x0b; 63 64 constexpr uint16_t DW_TAG_member = 0x0d; 65 66 constexpr uint16_t DW_TAG_pointer_type = 0x0f; 67 constexpr uint16_t DW_TAG_reference_type = 0x10; 68 constexpr uint16_t DW_TAG_compile_unit = 0x11; 69 constexpr uint16_t DW_TAG_string_type = 0x12; 70 constexpr uint16_t DW_TAG_structure_type = 0x13; 71 72 constexpr uint16_t DW_TAG_subroutine_type = 0x15; 73 constexpr uint16_t DW_TAG_typedef = 0x16; 74 constexpr uint16_t DW_TAG_union_type = 0x17; 75 constexpr uint16_t DW_TAG_unspecified_parameters = 0x18; 76 constexpr uint16_t DW_TAG_variant = 0x19; 77 constexpr uint16_t DW_TAG_common_block = 0x1a; 78 constexpr uint16_t DW_TAG_common_inclusion = 0x1b; 79 constexpr uint16_t DW_TAG_inheritance = 0x1c; 80 constexpr uint16_t DW_TAG_inlined_subroutine = 0x1d; 81 constexpr uint16_t DW_TAG_module = 0x1e; 82 constexpr uint16_t DW_TAG_ptr_to_member_type = 0x1f; 83 constexpr uint16_t DW_TAG_set_type = 0x20; 84 constexpr uint16_t DW_TAG_subrange_type = 0x21; 85 constexpr uint16_t DW_TAG_with_stmt = 0x22; 86 constexpr uint16_t DW_TAG_access_declaration = 0x23; 87 constexpr uint16_t DW_TAG_base_type = 0x24; 88 constexpr uint16_t DW_TAG_catch_block = 0x25; 89 constexpr uint16_t DW_TAG_const_type = 0x26; 90 constexpr uint16_t DW_TAG_constant = 0x27; 91 constexpr uint16_t DW_TAG_enumerator = 0x28; 92 constexpr uint16_t DW_TAG_file_type = 0x29; 93 constexpr uint16_t DW_TAG_friend = 0x2a; 94 constexpr uint16_t DW_TAG_namelist = 0x2b; 95 constexpr uint16_t DW_TAG_namelist_item = 0x2c; 96 constexpr uint16_t DW_TAG_packed_type = 0x2d; 97 constexpr uint16_t DW_TAG_subprogram = 0x2e; 98 constexpr uint16_t DW_TAG_template_type_parameter = 0x2f; 99 constexpr uint16_t DW_TAG_template_value_parameter = 0x30; 100 constexpr uint16_t DW_TAG_thrown_type = 0x31; 101 constexpr uint16_t DW_TAG_try_block = 0x32; 102 constexpr uint16_t DW_TAG_variant_part = 0x33; 103 constexpr uint16_t DW_TAG_variable = 0x34; 104 constexpr uint16_t DW_TAG_volatile_type = 0x35; 105 constexpr uint16_t DW_TAG_dwarf_procedure = 0x36; 106 constexpr uint16_t DW_TAG_restrict_type = 0x37; 107 constexpr uint16_t DW_TAG_interface_type = 0x38; 108 constexpr uint16_t DW_TAG_namespace = 0x39; 109 constexpr uint16_t DW_TAG_imported_module = 0x3a; 110 constexpr uint16_t DW_TAG_unspecified_type = 0x3b; 111 constexpr uint16_t DW_TAG_partial_unit = 0x3c; 112 constexpr uint16_t DW_TAG_imported_unit = 0x3d; 113 constexpr uint16_t DW_TAG_condition = 0x3f; 114 constexpr uint16_t DW_TAG_shared_type = 0x40; 115 constexpr uint16_t DW_TAG_type_unit = 0x41; 116 constexpr uint16_t DW_TAG_rvalue_reference_type = 0x42; 117 constexpr uint16_t DW_TAG_template_alias = 0x43; 118 // New in Dwarf5 119 constexpr uint16_t DW_TAG_coarray_type = 0x44; 120 constexpr uint16_t DW_TAG_generic_subrange = 0x45; 121 constexpr uint16_t DW_TAG_dynamic_type = 0x46; 122 constexpr uint16_t DW_TAG_atomic_type = 0x47; 123 constexpr uint16_t DW_TAG_call_site = 0x48; 124 constexpr uint16_t DW_TAG_call_site_parameter = 0x49; 125 constexpr uint16_t DW_TAG_skeleton_unit = 0x4a; 126 constexpr uint16_t DW_TAG_immutable_type = 0x4b; 127 128 // GNU extension tags 129 constexpr uint16_t DW_TAG_GNU_template_template_param = 0x4106; 130 constexpr uint16_t DW_TAG_GNU_template_parameter_pack = 0x4107; 131 constexpr uint16_t DW_TAG_GNU_formal_parameter_pack = 0x4108; 132 constexpr uint16_t DW_TAG_GNU_call_site = 0x4109; 133 constexpr uint16_t DW_TAG_GNU_call_site_parameter = 0x410a; 134 135 constexpr uint16_t DW_TAG_MAX_VALUE = DW_TAG_GNU_call_site_parameter; 136 137 // Attribute form encodings 138 constexpr uint16_t DW_FORM_addr = 0x01; 139 constexpr uint16_t DW_FORM_block2 = 0x03; 140 constexpr uint16_t DW_FORM_block4 = 0x04; 141 constexpr uint16_t DW_FORM_data2 = 0x05; 142 constexpr uint16_t DW_FORM_data4 = 0x06; 143 constexpr uint16_t DW_FORM_data8 = 0x07; 144 constexpr uint16_t DW_FORM_string = 0x08; 145 constexpr uint16_t DW_FORM_block = 0x09; 146 constexpr uint16_t DW_FORM_block1 = 0x0a; 147 constexpr uint16_t DW_FORM_data1 = 0x0b; 148 constexpr uint16_t DW_FORM_flag = 0x0c; 149 constexpr uint16_t DW_FORM_sdata = 0x0d; 150 constexpr uint16_t DW_FORM_strp = 0x0e; 151 constexpr uint16_t DW_FORM_udata = 0x0f; 152 constexpr uint16_t DW_FORM_ref_addr = 0x10; 153 constexpr uint16_t DW_FORM_ref1 = 0x11; 154 constexpr uint16_t DW_FORM_ref2 = 0x12; 155 constexpr uint16_t DW_FORM_ref4 = 0x13; 156 constexpr uint16_t DW_FORM_ref8 = 0x14; 157 constexpr uint16_t DW_FORM_ref_udata = 0x15; 158 constexpr uint16_t DW_FORM_indirect = 0x16; 159 constexpr uint16_t DW_FORM_sec_offset = 0x17; 160 constexpr uint16_t DW_FORM_exprloc = 0x18; 161 constexpr uint16_t DW_FORM_flag_present = 0x19; 162 constexpr uint16_t DW_FORM_strx = 0x1a; 163 constexpr uint16_t DW_FORM_addrx = 0x1b; 164 constexpr uint16_t DW_FORM_ref_sup4 = 0x1c; 165 constexpr uint16_t DW_FORM_strp_sup = 0x1d; 166 constexpr uint16_t DW_FORM_data16 = 0x1e; 167 constexpr uint16_t DW_FORM_line_strp = 0x1f; 168 constexpr uint16_t DW_FORM_ref_sig8 = 0x20; 169 constexpr uint16_t DW_FORM_implicit_const = 0x21; 170 constexpr uint16_t DW_FORM_loclistx = 0x22; 171 constexpr uint16_t DW_FORM_rnglistx = 0x23; 172 constexpr uint16_t DW_FORM_ref_sup8 = 0x24; 173 constexpr uint16_t DW_FORM_strx1 = 0x25; 174 constexpr uint16_t DW_FORM_strx2 = 0x26; 175 constexpr uint16_t DW_FORM_strx3 = 0x27; 176 constexpr uint16_t DW_FORM_strx4 = 0x28; 177 constexpr uint16_t DW_FORM_addrx1 = 0x29; 178 constexpr uint16_t DW_FORM_addrx2 = 0x2a; 179 constexpr uint16_t DW_FORM_addrx3 = 0x2b; 180 constexpr uint16_t DW_FORM_addrx4 = 0x2c; 181 182 constexpr uint16_t DW_FORM_MAX_VALUE = DW_FORM_addrx4; 183 184 // Attribute name encodings 185 constexpr uint16_t DW_AT_sibling = 0x01; 186 constexpr uint16_t DW_AT_location = 0x02; 187 constexpr uint16_t DW_AT_name = 0x03; 188 constexpr uint16_t DW_AT_ordering = 0x09; 189 constexpr uint16_t DW_AT_byte_size = 0x0b; 190 constexpr uint16_t DW_AT_bit_offset = 0x0c; // deprecated in DWARF5? 191 constexpr uint16_t DW_AT_bit_size = 0x0d; 192 constexpr uint16_t DW_AT_stmt_list = 0x10; 193 constexpr uint16_t DW_AT_low_pc = 0x11; 194 constexpr uint16_t DW_AT_high_pc = 0x12; 195 constexpr uint16_t DW_AT_language = 0x13; 196 constexpr uint16_t DW_AT_discr = 0x15; 197 constexpr uint16_t DW_AT_discr_value = 0x16; 198 constexpr uint16_t DW_AT_visibility = 0x17; 199 constexpr uint16_t DW_AT_import = 0x18; 200 constexpr uint16_t DW_AT_string_length = 0x19; 201 constexpr uint16_t DW_AT_common_reference = 0x1a; 202 constexpr uint16_t DW_AT_comp_dir = 0x1b; 203 constexpr uint16_t DW_AT_const_value = 0x1c; 204 constexpr uint16_t DW_AT_containing_type = 0x1d; 205 constexpr uint16_t DW_AT_default_value = 0x1e; 206 constexpr uint16_t DW_AT_inline = 0x20; 207 constexpr uint16_t DW_AT_is_optional = 0x21; 208 constexpr uint16_t DW_AT_lower_bound = 0x22; 209 constexpr uint16_t DW_AT_producer = 0x25; 210 constexpr uint16_t DW_AT_prototyped = 0x27; 211 constexpr uint16_t DW_AT_return_addr = 0x2a; 212 constexpr uint16_t DW_AT_start_scope = 0x2c; 213 constexpr uint16_t DW_AT_bit_stride = 0x2e; 214 constexpr uint16_t DW_AT_upper_bound = 0x2f; 215 constexpr uint16_t DW_AT_abstract_origin = 0x31; 216 constexpr uint16_t DW_AT_accessibility = 0x32; 217 constexpr uint16_t DW_AT_address_class = 0x33; 218 constexpr uint16_t DW_AT_artificial = 0x34; 219 constexpr uint16_t DW_AT_base_types = 0x35; 220 constexpr uint16_t DW_AT_calling_convention = 0x36; 221 constexpr uint16_t DW_AT_count = 0x37; 222 constexpr uint16_t DW_AT_data_member_location = 0x38; 223 constexpr uint16_t DW_AT_decl_column = 0x39; 224 constexpr uint16_t DW_AT_decl_file = 0x3a; 225 constexpr uint16_t DW_AT_decl_line = 0x3b; 226 constexpr uint16_t DW_AT_declaration = 0x3c; 227 constexpr uint16_t DW_AT_discr_list = 0x3d; 228 constexpr uint16_t DW_AT_encoding = 0x3e; 229 constexpr uint16_t DW_AT_external = 0x3f; 230 //... 231 constexpr uint16_t DW_AT_specification = 0x47; 232 constexpr uint16_t DW_AT_static_link = 0x48; 233 constexpr uint16_t DW_AT_type = 0x49; 234 constexpr uint16_t DW_AT_use_location = 0x4a; 235 constexpr uint16_t DW_AT_variable_parameter = 0x4b; 236 constexpr uint16_t DW_AT_virtuality = 0x4c; 237 constexpr uint16_t DW_AT_vtable_elem_location = 0x4d; 238 constexpr uint16_t DW_AT_allocated = 0x4e; 239 constexpr uint16_t DW_AT_associated = 0x4f; 240 constexpr uint16_t DW_AT_data_location = 0x50; 241 constexpr uint16_t DW_AT_byte_stride = 0x51; 242 constexpr uint16_t DW_AT_entry_pc = 0x52; 243 constexpr uint16_t DW_AT_use_UTF8 = 0x53; 244 constexpr uint16_t DW_AT_extension = 0x54; 245 constexpr uint16_t DW_AT_ranges = 0x55; 246 constexpr uint16_t DW_AT_trampoline = 0x56; 247 constexpr uint16_t DW_AT_call_column = 0x57; 248 constexpr uint16_t DW_AT_call_file = 0x58; 249 constexpr uint16_t DW_AT_call_line = 0x59; 250 constexpr uint16_t DW_AT_description = 0x5a; 251 constexpr uint16_t DW_AT_binary_scale = 0x5b; 252 constexpr uint16_t DW_AT_decimal_scale = 0x5c; 253 constexpr uint16_t DW_AT_small = 0x5d; 254 constexpr uint16_t DW_AT_decimal_sign = 0x5e; 255 constexpr uint16_t DW_AT_digit_count = 0x5f; 256 constexpr uint16_t DW_AT_picture_string = 0x60; 257 constexpr uint16_t DW_AT_mutable = 0x61; 258 constexpr uint16_t DW_AT_threads_scaled = 0x62; 259 constexpr uint16_t DW_AT_explicit = 0x63; 260 constexpr uint16_t DW_AT_object_pointer = 0x64; 261 constexpr uint16_t DW_AT_endianity = 0x65; 262 constexpr uint16_t DW_AT_elemental = 0x66; 263 constexpr uint16_t DW_AT_pure = 0x67; 264 constexpr uint16_t DW_AT_recursive = 0x68; 265 constexpr uint16_t DW_AT_signature = 0x69; 266 constexpr uint16_t DW_AT_main_subprogram = 0x6a; 267 constexpr uint16_t DW_AT_data_bit_offset = 0x6b; 268 constexpr uint16_t DW_AT_const_expr = 0x6c; 269 constexpr uint16_t DW_AT_enum_class = 0x6d; 270 constexpr uint16_t DW_AT_linkage_name = 0x6e; 271 constexpr uint16_t DW_AT_string_length_bit_size = 0x6f; 272 constexpr uint16_t DW_AT_string_length_byte_size = 0x70; 273 constexpr uint16_t DW_AT_rank = 0x71; 274 constexpr uint16_t DW_AT_str_offsets_base = 0x72; 275 //... 276 constexpr uint16_t DW_AT_loclists_base = 0x8c; 277 278 constexpr uint16_t DW_AT_MAX_VALUE = DW_AT_loclists_base; 279 280 // GNU extension attributes 281 constexpr uint16_t DW_AT_GNU_vector = 0x2107; 282 constexpr uint16_t DW_AT_GNU_template_name = 0x2110; 283 284 // GNU extension attributes, http://www.dwarfstd.org/ShowIssue.php?issue=100909.2 285 constexpr uint16_t DW_AT_GNU_call_site_value = 0x2111; 286 constexpr uint16_t DW_AT_GNU_call_site_target = 0x2113; 287 constexpr uint16_t DW_AT_GNU_tail_call = 0x2115; 288 constexpr uint16_t DW_AT_GNU_all_tail_call_sites = 0x2116; 289 constexpr uint16_t DW_AT_GNU_all_call_sites = 0x2117; 290 291 // GNU extension attributes, see http://gcc.gnu.org/wiki/DebugFission 292 constexpr uint16_t DW_AT_GNU_pubnames = 0x2134; 293 294 // GNU extension attributes, see http://gcc.gnu.org/wiki/Discriminator 295 constexpr uint16_t DW_AT_GNU_discriminator = 0x2136; 296 constexpr uint16_t DW_AT_GNU_locviews = 0x2137; 297 constexpr uint16_t DW_AT_GNU_entry_view = 0x2138; 298 299 // Dwarf calling convention constants 300 constexpr uint64_t DW_CC_LLVM_AAPCS_VFP = 0xc4; 301 302 #endif // NOGROD_DWARF_CONSTANTS_ 303