1 //===-- DWARFDefines.c ------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "DWARFDefines.h" 11 #include <cstdio> 12 #include <cstring> 13 #include <string> 14 #include "lldb/Core/ConstString.h" 15 16 namespace lldb_private { 17 18 const char * 19 DW_TAG_value_to_name (uint32_t val) 20 { 21 static char invalid[100]; 22 23 if (val == 0) 24 return "NULL"; 25 26 const char *llvmstr = llvm::dwarf::TagString (val); 27 if (llvmstr == NULL) 28 { 29 snprintf (invalid, sizeof (invalid), "Unknown DW_TAG constant: 0x%x", val); 30 return invalid; 31 } 32 return llvmstr; 33 } 34 35 const char * 36 DW_CHILDREN_value_to_name (uint8_t val) 37 { 38 static char invalid[100]; 39 const char *llvmstr = llvm::dwarf::ChildrenString (val); 40 if (llvmstr == NULL) 41 { 42 snprintf (invalid, sizeof (invalid), "Unknown DW_CHILDREN constant: 0x%x", val); 43 return invalid; 44 } 45 return llvmstr; 46 } 47 48 const char * 49 DW_AT_value_to_name (uint32_t val) 50 { 51 static char invalid[100]; 52 const char *llvmstr = llvm::dwarf::AttributeString (val); 53 if (llvmstr == NULL) 54 { 55 snprintf (invalid, sizeof (invalid), "Unknown DW_AT constant: 0x%x", val); 56 return invalid; 57 } 58 return llvmstr; 59 } 60 61 const char * 62 DW_FORM_value_to_name (uint32_t val) 63 { 64 static char invalid[100]; 65 const char *llvmstr = llvm::dwarf::FormEncodingString (val); 66 if (llvmstr == NULL) 67 { 68 snprintf (invalid, sizeof (invalid), "Unknown DW_FORM constant: 0x%x", val); 69 return invalid; 70 } 71 return llvmstr; 72 } 73 74 const char * 75 DW_OP_value_to_name (uint32_t val) 76 { 77 static char invalid[100]; 78 const char *llvmstr = llvm::dwarf::OperationEncodingString (val); 79 if (llvmstr == NULL) 80 { 81 snprintf (invalid, sizeof (invalid), "Unknown DW_OP constant: 0x%x", val); 82 return invalid; 83 } 84 return llvmstr; 85 } 86 87 DRC_class 88 DW_OP_value_to_class (uint32_t val) 89 { 90 switch (val) { 91 case 0x03: return DRC_ONEOPERAND; 92 case 0x06: return DRC_ZEROOPERANDS; 93 case 0x08: return DRC_ONEOPERAND; 94 case 0x09: return DRC_ONEOPERAND; 95 case 0x0a: return DRC_ONEOPERAND; 96 case 0x0b: return DRC_ONEOPERAND; 97 case 0x0c: return DRC_ONEOPERAND; 98 case 0x0d: return DRC_ONEOPERAND; 99 case 0x0e: return DRC_ONEOPERAND; 100 case 0x0f: return DRC_ONEOPERAND; 101 case 0x10: return DRC_ONEOPERAND; 102 case 0x11: return DRC_ONEOPERAND; 103 case 0x12: return DRC_ZEROOPERANDS; 104 case 0x13: return DRC_ZEROOPERANDS; 105 case 0x14: return DRC_ZEROOPERANDS; 106 case 0x15: return DRC_ONEOPERAND; 107 case 0x16: return DRC_ZEROOPERANDS; 108 case 0x17: return DRC_ZEROOPERANDS; 109 case 0x18: return DRC_ZEROOPERANDS; 110 case 0x19: return DRC_ZEROOPERANDS; 111 case 0x1a: return DRC_ZEROOPERANDS; 112 case 0x1b: return DRC_ZEROOPERANDS; 113 case 0x1c: return DRC_ZEROOPERANDS; 114 case 0x1d: return DRC_ZEROOPERANDS; 115 case 0x1e: return DRC_ZEROOPERANDS; 116 case 0x1f: return DRC_ZEROOPERANDS; 117 case 0x20: return DRC_ZEROOPERANDS; 118 case 0x21: return DRC_ZEROOPERANDS; 119 case 0x22: return DRC_ZEROOPERANDS; 120 case 0x23: return DRC_ONEOPERAND; 121 case 0x24: return DRC_ZEROOPERANDS; 122 case 0x25: return DRC_ZEROOPERANDS; 123 case 0x26: return DRC_ZEROOPERANDS; 124 case 0x27: return DRC_ZEROOPERANDS; 125 case 0x2f: return DRC_ONEOPERAND; 126 case 0x28: return DRC_ONEOPERAND; 127 case 0x29: return DRC_ZEROOPERANDS; 128 case 0x2a: return DRC_ZEROOPERANDS; 129 case 0x2b: return DRC_ZEROOPERANDS; 130 case 0x2c: return DRC_ZEROOPERANDS; 131 case 0x2d: return DRC_ZEROOPERANDS; 132 case 0x2e: return DRC_ZEROOPERANDS; 133 case 0x30: return DRC_ZEROOPERANDS; 134 case 0x31: return DRC_ZEROOPERANDS; 135 case 0x32: return DRC_ZEROOPERANDS; 136 case 0x33: return DRC_ZEROOPERANDS; 137 case 0x34: return DRC_ZEROOPERANDS; 138 case 0x35: return DRC_ZEROOPERANDS; 139 case 0x36: return DRC_ZEROOPERANDS; 140 case 0x37: return DRC_ZEROOPERANDS; 141 case 0x38: return DRC_ZEROOPERANDS; 142 case 0x39: return DRC_ZEROOPERANDS; 143 case 0x3a: return DRC_ZEROOPERANDS; 144 case 0x3b: return DRC_ZEROOPERANDS; 145 case 0x3c: return DRC_ZEROOPERANDS; 146 case 0x3d: return DRC_ZEROOPERANDS; 147 case 0x3e: return DRC_ZEROOPERANDS; 148 case 0x3f: return DRC_ZEROOPERANDS; 149 case 0x40: return DRC_ZEROOPERANDS; 150 case 0x41: return DRC_ZEROOPERANDS; 151 case 0x42: return DRC_ZEROOPERANDS; 152 case 0x43: return DRC_ZEROOPERANDS; 153 case 0x44: return DRC_ZEROOPERANDS; 154 case 0x45: return DRC_ZEROOPERANDS; 155 case 0x46: return DRC_ZEROOPERANDS; 156 case 0x47: return DRC_ZEROOPERANDS; 157 case 0x48: return DRC_ZEROOPERANDS; 158 case 0x49: return DRC_ZEROOPERANDS; 159 case 0x4a: return DRC_ZEROOPERANDS; 160 case 0x4b: return DRC_ZEROOPERANDS; 161 case 0x4c: return DRC_ZEROOPERANDS; 162 case 0x4d: return DRC_ZEROOPERANDS; 163 case 0x4e: return DRC_ZEROOPERANDS; 164 case 0x4f: return DRC_ZEROOPERANDS; 165 case 0x50: return DRC_ZEROOPERANDS; 166 case 0x51: return DRC_ZEROOPERANDS; 167 case 0x52: return DRC_ZEROOPERANDS; 168 case 0x53: return DRC_ZEROOPERANDS; 169 case 0x54: return DRC_ZEROOPERANDS; 170 case 0x55: return DRC_ZEROOPERANDS; 171 case 0x56: return DRC_ZEROOPERANDS; 172 case 0x57: return DRC_ZEROOPERANDS; 173 case 0x58: return DRC_ZEROOPERANDS; 174 case 0x59: return DRC_ZEROOPERANDS; 175 case 0x5a: return DRC_ZEROOPERANDS; 176 case 0x5b: return DRC_ZEROOPERANDS; 177 case 0x5c: return DRC_ZEROOPERANDS; 178 case 0x5d: return DRC_ZEROOPERANDS; 179 case 0x5e: return DRC_ZEROOPERANDS; 180 case 0x5f: return DRC_ZEROOPERANDS; 181 case 0x60: return DRC_ZEROOPERANDS; 182 case 0x61: return DRC_ZEROOPERANDS; 183 case 0x62: return DRC_ZEROOPERANDS; 184 case 0x63: return DRC_ZEROOPERANDS; 185 case 0x64: return DRC_ZEROOPERANDS; 186 case 0x65: return DRC_ZEROOPERANDS; 187 case 0x66: return DRC_ZEROOPERANDS; 188 case 0x67: return DRC_ZEROOPERANDS; 189 case 0x68: return DRC_ZEROOPERANDS; 190 case 0x69: return DRC_ZEROOPERANDS; 191 case 0x6a: return DRC_ZEROOPERANDS; 192 case 0x6b: return DRC_ZEROOPERANDS; 193 case 0x6c: return DRC_ZEROOPERANDS; 194 case 0x6d: return DRC_ZEROOPERANDS; 195 case 0x6e: return DRC_ZEROOPERANDS; 196 case 0x6f: return DRC_ZEROOPERANDS; 197 case 0x70: return DRC_ONEOPERAND; 198 case 0x71: return DRC_ONEOPERAND; 199 case 0x72: return DRC_ONEOPERAND; 200 case 0x73: return DRC_ONEOPERAND; 201 case 0x74: return DRC_ONEOPERAND; 202 case 0x75: return DRC_ONEOPERAND; 203 case 0x76: return DRC_ONEOPERAND; 204 case 0x77: return DRC_ONEOPERAND; 205 case 0x78: return DRC_ONEOPERAND; 206 case 0x79: return DRC_ONEOPERAND; 207 case 0x7a: return DRC_ONEOPERAND; 208 case 0x7b: return DRC_ONEOPERAND; 209 case 0x7c: return DRC_ONEOPERAND; 210 case 0x7d: return DRC_ONEOPERAND; 211 case 0x7e: return DRC_ONEOPERAND; 212 case 0x7f: return DRC_ONEOPERAND; 213 case 0x80: return DRC_ONEOPERAND; 214 case 0x81: return DRC_ONEOPERAND; 215 case 0x82: return DRC_ONEOPERAND; 216 case 0x83: return DRC_ONEOPERAND; 217 case 0x84: return DRC_ONEOPERAND; 218 case 0x85: return DRC_ONEOPERAND; 219 case 0x86: return DRC_ONEOPERAND; 220 case 0x87: return DRC_ONEOPERAND; 221 case 0x88: return DRC_ONEOPERAND; 222 case 0x89: return DRC_ONEOPERAND; 223 case 0x8a: return DRC_ONEOPERAND; 224 case 0x8b: return DRC_ONEOPERAND; 225 case 0x8c: return DRC_ONEOPERAND; 226 case 0x8d: return DRC_ONEOPERAND; 227 case 0x8e: return DRC_ONEOPERAND; 228 case 0x8f: return DRC_ONEOPERAND; 229 case 0x90: return DRC_ONEOPERAND; 230 case 0x91: return DRC_ONEOPERAND; 231 case 0x92: return DRC_TWOOPERANDS; 232 case 0x93: return DRC_ONEOPERAND; 233 case 0x94: return DRC_ONEOPERAND; 234 case 0x95: return DRC_ONEOPERAND; 235 case 0x96: return DRC_ZEROOPERANDS; 236 case 0x97: return DRC_DWARFv3 | DRC_ZEROOPERANDS; 237 case 0x98: return DRC_DWARFv3 | DRC_ONEOPERAND; 238 case 0x99: return DRC_DWARFv3 | DRC_ONEOPERAND; 239 case 0x9a: return DRC_DWARFv3 | DRC_ONEOPERAND; 240 case 0xf0: return DRC_ZEROOPERANDS; /* DW_OP_APPLE_uninit */ 241 case 0xe0: return 0; 242 case 0xff: return 0; 243 default: return 0; 244 } 245 } 246 247 const char * 248 DW_ATE_value_to_name (uint32_t val) 249 { 250 static char invalid[100]; 251 const char *llvmstr = llvm::dwarf::AttributeEncodingString (val); 252 if (llvmstr == NULL) 253 { 254 snprintf (invalid, sizeof (invalid), "Unknown DW_ATE constant: 0x%x", val); 255 return invalid; 256 } 257 return llvmstr; 258 } 259 260 const char * 261 DW_ACCESS_value_to_name (uint32_t val) 262 { 263 static char invalid[100]; 264 265 const char *llvmstr = llvm::dwarf::AccessibilityString (val); 266 if (llvmstr == NULL) 267 { 268 snprintf (invalid, sizeof (invalid), "Unknown DW_ACCESS constant: 0x%x", val); 269 return invalid; 270 } 271 return llvmstr; 272 } 273 274 const char * 275 DW_VIS_value_to_name (uint32_t val) 276 { 277 static char invalid[100]; 278 const char *llvmstr = llvm::dwarf::VisibilityString (val); 279 if (llvmstr == NULL) 280 { 281 snprintf (invalid, sizeof (invalid), "Unknown DW_VIS constant: 0x%x", val); 282 return invalid; 283 } 284 return llvmstr; 285 } 286 287 const char * 288 DW_VIRTUALITY_value_to_name (uint32_t val) 289 { 290 static char invalid[100]; 291 const char *llvmstr = llvm::dwarf::VirtualityString (val); 292 if (llvmstr == NULL) 293 { 294 snprintf (invalid, sizeof (invalid), "Unknown DW_VIRTUALITY constant: 0x%x", val); 295 return invalid; 296 } 297 return llvmstr; 298 } 299 300 const char * 301 DW_LANG_value_to_name (uint32_t val) 302 { 303 static char invalid[100]; 304 const char *llvmstr = llvm::dwarf::LanguageString (val); 305 if (llvmstr == NULL) 306 { 307 snprintf (invalid, sizeof (invalid), "Unknown DW_LANG constant: 0x%x", val); 308 return invalid; 309 } 310 return llvmstr; 311 } 312 313 const char * 314 DW_ID_value_to_name (uint32_t val) 315 { 316 static char invalid[100]; 317 const char *llvmstr = llvm::dwarf::CaseString (val); 318 if (llvmstr == NULL) 319 { 320 snprintf (invalid, sizeof (invalid), "Unknown DW_ID constant: 0x%x", val); 321 return invalid; 322 } 323 return llvmstr; 324 } 325 326 const char * 327 DW_CC_value_to_name (uint32_t val) 328 { 329 static char invalid[100]; 330 const char *llvmstr = llvm::dwarf::ConventionString (val); 331 if (llvmstr == NULL) 332 { 333 snprintf (invalid, sizeof (invalid), "Unknown DW_CC constant: 0x%x", val); 334 return invalid; 335 } 336 return llvmstr; 337 } 338 339 const char * 340 DW_INL_value_to_name (uint32_t val) 341 { 342 static char invalid[100]; 343 const char *llvmstr = llvm::dwarf::InlineCodeString (val); 344 if (llvmstr == NULL) 345 { 346 snprintf (invalid, sizeof (invalid), "Unknown DW_INL constant: 0x%x", val); 347 return invalid; 348 } 349 return llvmstr; 350 } 351 352 const char * 353 DW_ORD_value_to_name (uint32_t val) 354 { 355 static char invalid[100]; 356 const char *llvmstr = llvm::dwarf::ArrayOrderString (val); 357 if (llvmstr == NULL) 358 { 359 snprintf (invalid, sizeof (invalid), "Unknown DW_ORD constant: 0x%x", val); 360 return invalid; 361 } 362 return llvmstr; 363 } 364 365 const char * 366 DW_DSC_value_to_name (uint32_t val) 367 { 368 static char invalid[100]; 369 const char *llvmstr = llvm::dwarf::DiscriminantString (val); 370 if (llvmstr == NULL) 371 { 372 snprintf (invalid, sizeof (invalid), "Unknown DW_DSC constant: 0x%x", val); 373 return invalid; 374 } 375 return llvmstr; 376 } 377 378 const char * 379 DW_LNS_value_to_name (uint32_t val) 380 { 381 static char invalid[100]; 382 const char *llvmstr = llvm::dwarf::LNStandardString (val); 383 if (llvmstr == NULL) 384 { 385 snprintf (invalid, sizeof (invalid), "Unknown DW_LNS constant: 0x%x", val); 386 return invalid; 387 } 388 return llvmstr; 389 } 390 391 const char * 392 DW_LNE_value_to_name (uint32_t val) 393 { 394 static char invalid[100]; 395 const char *llvmstr = llvm::dwarf::LNExtendedString (val); 396 if (llvmstr == NULL) 397 { 398 snprintf (invalid, sizeof (invalid), "Unknown DW_LNE constant: 0x%x", val); 399 return invalid; 400 } 401 return llvmstr; 402 } 403 404 const char * 405 DW_MACINFO_value_to_name (uint32_t val) 406 { 407 static char invalid[100]; 408 const char *llvmstr = llvm::dwarf::MacinfoString (val); 409 if (llvmstr == NULL) 410 { 411 snprintf (invalid, sizeof (invalid), "Unknown DW_MACINFO constant: 0x%x", val); 412 return invalid; 413 } 414 return llvmstr; 415 } 416 417 const char * 418 DW_CFA_value_to_name (uint32_t val) 419 { 420 static char invalid[100]; 421 const char *llvmstr = llvm::dwarf::CallFrameString (val); 422 if (llvmstr == NULL) 423 { 424 snprintf (invalid, sizeof (invalid), "Unknown DW_CFA constant: 0x%x", val); 425 return invalid; 426 } 427 return llvmstr; 428 } 429 430 DW_TAG_CategoryEnum 431 get_tag_category (uint16_t tag) 432 { 433 switch (tag) 434 { 435 case DW_TAG_array_type : return TagCategoryType; 436 case DW_TAG_class_type : return TagCategoryType; 437 case DW_TAG_entry_point : return TagCategoryProgram; 438 case DW_TAG_enumeration_type : return TagCategoryType; 439 case DW_TAG_formal_parameter : return TagCategoryVariable; 440 case DW_TAG_imported_declaration : return TagCategoryProgram; 441 case DW_TAG_label : return TagCategoryProgram; 442 case DW_TAG_lexical_block : return TagCategoryProgram; 443 case DW_TAG_member : return TagCategoryType; 444 case DW_TAG_pointer_type : return TagCategoryType; 445 case DW_TAG_reference_type : return TagCategoryType; 446 case DW_TAG_compile_unit : return TagCategoryProgram; 447 case DW_TAG_string_type : return TagCategoryType; 448 case DW_TAG_structure_type : return TagCategoryType; 449 case DW_TAG_subroutine_type : return TagCategoryType; 450 case DW_TAG_typedef : return TagCategoryType; 451 case DW_TAG_union_type : return TagCategoryType; 452 case DW_TAG_unspecified_parameters : return TagCategoryVariable; 453 case DW_TAG_variant : return TagCategoryType; 454 case DW_TAG_common_block : return TagCategoryProgram; 455 case DW_TAG_common_inclusion : return TagCategoryProgram; 456 case DW_TAG_inheritance : return TagCategoryType; 457 case DW_TAG_inlined_subroutine : return TagCategoryProgram; 458 case DW_TAG_module : return TagCategoryProgram; 459 case DW_TAG_ptr_to_member_type : return TagCategoryType; 460 case DW_TAG_set_type : return TagCategoryType; 461 case DW_TAG_subrange_type : return TagCategoryType; 462 case DW_TAG_with_stmt : return TagCategoryProgram; 463 case DW_TAG_access_declaration : return TagCategoryProgram; 464 case DW_TAG_base_type : return TagCategoryType; 465 case DW_TAG_catch_block : return TagCategoryProgram; 466 case DW_TAG_const_type : return TagCategoryType; 467 case DW_TAG_constant : return TagCategoryVariable; 468 case DW_TAG_enumerator : return TagCategoryType; 469 case DW_TAG_file_type : return TagCategoryType; 470 case DW_TAG_friend : return TagCategoryType; 471 case DW_TAG_namelist : return TagCategoryVariable; 472 case DW_TAG_namelist_item : return TagCategoryVariable; 473 case DW_TAG_packed_type : return TagCategoryType; 474 case DW_TAG_subprogram : return TagCategoryProgram; 475 case DW_TAG_template_type_parameter : return TagCategoryType; 476 case DW_TAG_template_value_parameter : return TagCategoryType; 477 case DW_TAG_thrown_type : return TagCategoryType; 478 case DW_TAG_try_block : return TagCategoryProgram; 479 case DW_TAG_variant_part : return TagCategoryType; 480 case DW_TAG_variable : return TagCategoryVariable; 481 case DW_TAG_volatile_type : return TagCategoryType; 482 case DW_TAG_dwarf_procedure : return TagCategoryProgram; 483 case DW_TAG_restrict_type : return TagCategoryType; 484 case DW_TAG_interface_type : return TagCategoryType; 485 case DW_TAG_namespace : return TagCategoryProgram; 486 case DW_TAG_imported_module : return TagCategoryProgram; 487 case DW_TAG_unspecified_type : return TagCategoryType; 488 case DW_TAG_partial_unit : return TagCategoryProgram; 489 case DW_TAG_imported_unit : return TagCategoryProgram; 490 case DW_TAG_shared_type : return TagCategoryType; 491 default: break; 492 } 493 return TagCategoryProgram; 494 } 495 496 } // namespace lldb_private 497 498