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