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