LLVM: lib/BinaryFormat/Dwarf.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

17

18using namespace llvm;

19using namespace dwarf;

20

22 switch (Tag) {

23 default:

25#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \

26 case DW_TAG_##NAME: \

27 return "DW_TAG_" #NAME;

28#include "llvm/BinaryFormat/Dwarf.def"

29 }

30}

31

34#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \

35 .Case("DW_TAG_" #NAME, DW_TAG_##NAME)

36#include "llvm/BinaryFormat/Dwarf.def"

38}

39

41 switch (Tag) {

42 default:

43 return 0;

44#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \

45 case DW_TAG_##NAME: \

46 return VERSION;

47#include "llvm/BinaryFormat/Dwarf.def"

48 }

49}

50

52 switch (Tag) {

53 default:

54 return 0;

55#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \

56 case DW_TAG_##NAME: \

57 return DWARF_VENDOR_##VENDOR;

58#include "llvm/BinaryFormat/Dwarf.def"

59 }

60}

61

63 switch (Children) {

65 return "DW_CHILDREN_no";

67 return "DW_CHILDREN_yes";

68 }

70}

71

74 default:

76#define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \

77 case DW_AT_##NAME: \

78 return "DW_AT_" #NAME;

79#include "llvm/BinaryFormat/Dwarf.def"

80 }

81}

82

85 default:

86 return 0;

87#define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \

88 case DW_AT_##NAME: \

89 return VERSION;

90#include "llvm/BinaryFormat/Dwarf.def"

91 }

92}

93

96 default:

97 return 0;

98#define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \

99 case DW_AT_##NAME: \

100 return DWARF_VENDOR_##VENDOR;

101#include "llvm/BinaryFormat/Dwarf.def"

102 }

103}

104

106 switch (Encoding) {

107 default:

109#define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \

110 case DW_FORM_##NAME: \

111 return "DW_FORM_" #NAME;

112#include "llvm/BinaryFormat/Dwarf.def"

113 }

114}

115

117 switch (Form) {

118 default:

119 return 0;

120#define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \

121 case DW_FORM_##NAME: \

122 return VERSION;

123#include "llvm/BinaryFormat/Dwarf.def"

124 }

125}

126

128 switch (Form) {

129 default:

130 return 0;

131#define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \

132 case DW_FORM_##NAME: \

133 return DWARF_VENDOR_##VENDOR;

134#include "llvm/BinaryFormat/Dwarf.def"

135 }

136}

137

139 switch (Encoding) {

140 default:

142#define HANDLE_DW_OP(ID, NAME, OPERANDS, ARITY, VERSION, VENDOR) \

143 case DW_OP_##NAME: \

144 return "DW_OP_" #NAME;

145#include "llvm/BinaryFormat/Dwarf.def"

147 return "DW_OP_LLVM_convert";

149 return "DW_OP_LLVM_fragment";

151 return "DW_OP_LLVM_tag_offset";

153 return "DW_OP_LLVM_entry_value";

155 return "DW_OP_LLVM_implicit_pointer";

157 return "DW_OP_LLVM_arg";

159 return "DW_OP_LLVM_extract_bits_sext";

161 return "DW_OP_LLVM_extract_bits_zext";

162 }

163}

164

167#define HANDLE_DW_OP(ID, NAME, OPERANDS, ARITY, VERSION, VENDOR) \

168 .Case("DW_OP_" #NAME, DW_OP_##NAME)

169#include "llvm/BinaryFormat/Dwarf.def"

179}

180

182 switch (Encoding) {

183 default:

184 llvm_unreachable("unhandled DWARF operation with LLVM user op");

185#define HANDLE_DW_OP_LLVM_USEROP(ID, NAME) \

186 case DW_OP_LLVM_##NAME: \

187 return "DW_OP_LLVM_" #NAME;

188#include "llvm/BinaryFormat/Dwarf.def"

189 }

190}

191

192static unsigned

195#define HANDLE_DW_OP_LLVM_USEROP(ID, NAME) .Case(#NAME, DW_OP_LLVM_##NAME)

196#include "llvm/BinaryFormat/Dwarf.def"

198 assert(E && "unhandled DWARF operation string with LLVM user op");

199 return E;

200}

201

203 unsigned SubOpEncoding) {

204 assert(OpEncoding == DW_OP_LLVM_user);

206}

207

208unsigned

211 assert(OpEncoding == DW_OP_LLVM_user);

213}

214

216 switch (Op) {

217 default:

218 return 0;

219#define HANDLE_DW_OP(ID, NAME, OPERANDS, ARITY, VERSION, VENDOR) \

220 case DW_OP_##NAME: \

221 return VERSION;

222#include "llvm/BinaryFormat/Dwarf.def"

223 }

224}

225

227 switch (Op) {

228 default:

229 return std::nullopt;

230#define HANDLE_DW_OP(ID, NAME, OPERANDS, ARITY, VERSION, VENDOR) \

231 case DW_OP_##NAME: \

232 if (OPERANDS == -1) \

233 return std::nullopt; \

234 return OPERANDS;

235#include "llvm/BinaryFormat/Dwarf.def"

236 }

237}

238

240 switch (Op) {

241 default:

242 return std::nullopt;

243#define HANDLE_DW_OP(ID, NAME, OPERANDS, ARITY, VERSION, VENDOR) \

244 case DW_OP_##NAME: \

245 if (ARITY == -1) \

246 return std::nullopt; \

247 return ARITY;

248#include "llvm/BinaryFormat/Dwarf.def"

249 }

250}

251

253 switch (Op) {

254 default:

255 return 0;

256#define HANDLE_DW_OP(ID, NAME, OPERANDS, ARITY, VERSION, VENDOR) \

257 case DW_OP_##NAME: \

258 return DWARF_VENDOR_##VENDOR;

259#include "llvm/BinaryFormat/Dwarf.def"

260 }

261}

262

264 switch (Encoding) {

265 default:

267#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \

268 case DW_ATE_##NAME: \

269 return "DW_ATE_" #NAME;

270#include "llvm/BinaryFormat/Dwarf.def"

271 }

272}

273

276#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \

277 .Case("DW_ATE_" #NAME, DW_ATE_##NAME)

278#include "llvm/BinaryFormat/Dwarf.def"

280}

281

283 switch (ATE) {

284 default:

285 return 0;

286#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \

287 case DW_ATE_##NAME: \

288 return VERSION;

289#include "llvm/BinaryFormat/Dwarf.def"

290 }

291}

292

294 switch (ATE) {

295 default:

296 return 0;

297#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \

298 case DW_ATE_##NAME: \

299 return DWARF_VENDOR_##VENDOR;

300#include "llvm/BinaryFormat/Dwarf.def"

301 }

302}

303

305 switch (Sign) {

307 return "DW_DS_unsigned";

309 return "DW_DS_leading_overpunch";

311 return "DW_DS_trailing_overpunch";

313 return "DW_DS_leading_separate";

315 return "DW_DS_trailing_separate";

316 }

318}

319

321 switch (Endian) {

322 case DW_END_default:

323 return "DW_END_default";

324 case DW_END_big:

325 return "DW_END_big";

326 case DW_END_little:

327 return "DW_END_little";

329 return "DW_END_lo_user";

331 return "DW_END_hi_user";

332 }

334}

335

338

340 return "DW_ACCESS_public";

342 return "DW_ACCESS_protected";

344 return "DW_ACCESS_private";

345 }

347}

348

350 switch (DefaultedEncodings) {

351

352 case DW_DEFAULTED_no:

353 return "DW_DEFAULTED_no";

354 case DW_DEFAULTED_in_class:

355 return "DW_DEFAULTED_in_class";

356 case DW_DEFAULTED_out_of_class:

357 return "DW_DEFAULTED_out_of_class";

358 }

360}

361

363 switch (Visibility) {

365 return "DW_VIS_local";

367 return "DW_VIS_exported";

369 return "DW_VIS_qualified";

370 }

372}

373

375 switch (Virtuality) {

376 default:

378#define HANDLE_DW_VIRTUALITY(ID, NAME) \

379 case DW_VIRTUALITY_##NAME: \

380 return "DW_VIRTUALITY_" #NAME;

381#include "llvm/BinaryFormat/Dwarf.def"

382 }

383}

384

387#define HANDLE_DW_VIRTUALITY(ID, NAME) \

388 .Case("DW_VIRTUALITY_" #NAME, DW_VIRTUALITY_##NAME)

389#include "llvm/BinaryFormat/Dwarf.def"

391}

392

394 switch (EnumKind) {

395 default:

397#define HANDLE_DW_APPLE_ENUM_KIND(ID, NAME) \

398 case DW_APPLE_ENUM_KIND_##NAME: \

399 return "DW_APPLE_ENUM_KIND_" #NAME;

400#include "llvm/BinaryFormat/Dwarf.def"

401 }

402}

403

406#define HANDLE_DW_APPLE_ENUM_KIND(ID, NAME) \

407 .Case("DW_APPLE_ENUM_KIND_" #NAME, DW_APPLE_ENUM_KIND_##NAME)

408#include "llvm/BinaryFormat/Dwarf.def"

410}

411

413 switch (Language) {

414 default:

416#define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \

417 case DW_LANG_##NAME: \

418 return "DW_LANG_" #NAME;

419#include "llvm/BinaryFormat/Dwarf.def"

420 }

421}

422

425#define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \

426 .Case("DW_LANG_" #NAME, DW_LANG_##NAME)

427#include "llvm/BinaryFormat/Dwarf.def"

429}

430

432 switch (Lang) {

433 default:

434 return 0;

435#define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \

436 case DW_LANG_##NAME: \

437 return VERSION;

438#include "llvm/BinaryFormat/Dwarf.def"

439 }

440}

441

443 switch (Lang) {

444 default:

445 return 0;

446#define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \

447 case DW_LANG_##NAME: \

448 return DWARF_VENDOR_##VENDOR;

449#include "llvm/BinaryFormat/Dwarf.def"

450 }

451}

452

453std::optional

455 switch (Lang) {

456 default:

457 return std::nullopt;

458#define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \

459 case DW_LANG_##NAME: \

460 return LOWER_BOUND;

461#include "llvm/BinaryFormat/Dwarf.def"

462 }

463}

464

466 switch (lname) {

467#define HANDLE_DW_LNAME(ID, NAME, DESC, LOWER_BOUND) \

468 case DW_LNAME_##NAME: \

469 return DESC;

470#include "llvm/BinaryFormat/Dwarf.def"

471 }

472 return "Unknown";

473}

474

477 switch (Name) {

478

479 case DW_LNAME_Ada: {

481 return "Ada 83";

483 return "Ada 95";

485 return "Ada 2005";

487 return "Ada 2012";

488 } break;

489

490 case DW_LNAME_Cobol: {

492 return "COBOL-74";

494 return "COBOL-85";

495 } break;

496

497 case DW_LNAME_Fortran: {

499 return "FORTRAN 77";

501 return "FORTRAN 90";

503 return "Fortran 95";

505 return "Fortran 2003";

507 return "Fortran 2008";

509 return "Fortran 2018";

510 } break;

511

512

513 case DW_LNAME_C: {

515 break;

517 return "C89";

519 return "C99";

521 return "C11";

523 return "C17";

524 } break;

525

526 case DW_LNAME_C_plus_plus: {

528 break;

530 return "C++98";

532 return "C++03";

534 return "C++11";

536 return "C++14";

538 return "C++17";

540 return "C++20";

541 } break;

542

543 case DW_LNAME_ObjC_plus_plus:

544 case DW_LNAME_ObjC:

545 case DW_LNAME_Move:

546 case DW_LNAME_SYCL:

547 case DW_LNAME_BLISS:

548 case DW_LNAME_Crystal:

549 case DW_LNAME_D:

550 case DW_LNAME_Dylan:

551 case DW_LNAME_Go:

552 case DW_LNAME_Haskell:

553 case DW_LNAME_HLSL:

554 case DW_LNAME_Java:

555 case DW_LNAME_Julia:

556 case DW_LNAME_Kotlin:

557 case DW_LNAME_Modula2:

558 case DW_LNAME_Modula3:

559 case DW_LNAME_OCaml:

560 case DW_LNAME_OpenCL_C:

561 case DW_LNAME_Pascal:

562 case DW_LNAME_PLI:

563 case DW_LNAME_Python:

564 case DW_LNAME_RenderScript:

565 case DW_LNAME_Rust:

566 case DW_LNAME_Swift:

567 case DW_LNAME_UPC:

568 case DW_LNAME_Zig:

569 case DW_LNAME_Assembly:

570 case DW_LNAME_C_sharp:

571 case DW_LNAME_Mojo:

572 case DW_LNAME_GLSL:

573 case DW_LNAME_GLSL_ES:

574 case DW_LNAME_OpenCL_CPP:

575 case DW_LNAME_CPP_for_OpenCL:

576 case DW_LNAME_Ruby:

577 case DW_LNAME_Hylo:

578 case DW_LNAME_Metal:

579 break;

580 }

581

582

584}

585

587 switch (Lang) {

588#define HANDLE_DW_LNAME(ID, NAME, DESC, LOWER_BOUND) \

589 case DW_LNAME_##NAME: \

590 return "DW_LNAME_" #NAME;

591#include "llvm/BinaryFormat/Dwarf.def"

592 }

593

594 return {};

595}

596

597unsigned

600#define HANDLE_DW_LNAME(ID, NAME, DESC, LOWER_BOUND) \

601 .Case("DW_LNAME_" #NAME, DW_LNAME_##NAME)

602#include "llvm/BinaryFormat/Dwarf.def"

604}

605

607 switch (Case) {

609 return "DW_ID_case_sensitive";

611 return "DW_ID_up_case";

613 return "DW_ID_down_case";

615 return "DW_ID_case_insensitive";

616 }

618}

619

621 switch (CC) {

622 default:

624#define HANDLE_DW_CC(ID, NAME) \

625 case DW_CC_##NAME: \

626 return "DW_CC_" #NAME;

627#include "llvm/BinaryFormat/Dwarf.def"

628 }

629}

630

633#define HANDLE_DW_CC(ID, NAME) .Case("DW_CC_" #NAME, DW_CC_##NAME)

634#include "llvm/BinaryFormat/Dwarf.def"

636}

637

639 switch (Code) {

641 return "DW_INL_not_inlined";

643 return "DW_INL_inlined";

645 return "DW_INL_declared_not_inlined";

647 return "DW_INL_declared_inlined";

648 }

650}

651

653 switch (Order) {

655 return "DW_ORD_row_major";

657 return "DW_ORD_col_major";

658 }

660}

661

663 switch (Standard) {

664 default:

666#define HANDLE_DW_LNS(ID, NAME) \

667 case DW_LNS_##NAME: \

668 return "DW_LNS_" #NAME;

669#include "llvm/BinaryFormat/Dwarf.def"

670 }

671}

672

674 switch (Encoding) {

675 default:

677#define HANDLE_DW_LNE(ID, NAME) \

678 case DW_LNE_##NAME: \

679 return "DW_LNE_" #NAME;

680#include "llvm/BinaryFormat/Dwarf.def"

681 }

682}

683

685 switch (Encoding) {

686

688 return "DW_MACINFO_define";

690 return "DW_MACINFO_undef";

692 return "DW_MACINFO_start_file";

694 return "DW_MACINFO_end_file";

696 return "DW_MACINFO_vendor_ext";

698 return "DW_MACINFO_invalid";

699 }

701}

702

712

714 switch (Encoding) {

715 default:

717#define HANDLE_DW_MACRO(ID, NAME) \

718 case DW_MACRO_##NAME: \

719 return "DW_MACRO_" #NAME;

720#include "llvm/BinaryFormat/Dwarf.def"

721 }

722}

723

725 switch (Encoding) {

726 default:

728#define HANDLE_DW_MACRO_GNU(ID, NAME) \

729 case DW_MACRO_GNU_##NAME: \

730 return "DW_MACRO_GNU_" #NAME;

731#include "llvm/BinaryFormat/Dwarf.def"

732 }

733}

734

737#define HANDLE_DW_MACRO(ID, NAME) .Case("DW_MACRO_" #NAME, ID)

738#include "llvm/BinaryFormat/Dwarf.def"

740}

742 switch (Encoding) {

743 default:

745#define HANDLE_DW_RLE(ID, NAME) \

746 case DW_RLE_##NAME: \

747 return "DW_RLE_" #NAME;

748#include "llvm/BinaryFormat/Dwarf.def"

749 }

750}

751

753 switch (Encoding) {

754 default:

756#define HANDLE_DW_LLE(ID, NAME) \

757 case DW_LLE_##NAME: \

758 return "DW_LLE_" #NAME;

759#include "llvm/BinaryFormat/Dwarf.def"

760 }

761}

762

766#define SELECT_AARCH64 (Arch == llvm::Triple::aarch64_be || Arch == llvm::Triple::aarch64)

767#define SELECT_MIPS64 Arch == llvm::Triple::mips64

768#define SELECT_SPARC (Arch == llvm::Triple::sparc || Arch == llvm::Triple::sparcv9)

769#define SELECT_X86 (Arch == llvm::Triple::x86 || Arch == llvm::Triple::x86_64)

770#define HANDLE_DW_CFA(ID, NAME)

771#define HANDLE_DW_CFA_PRED(ID, NAME, PRED) \

772 if (ID == Encoding && PRED) \

773 return "DW_CFA_" #NAME;

774#include "llvm/BinaryFormat/Dwarf.def"

775

776 switch (Encoding) {

777 default:

779#define HANDLE_DW_CFA_PRED(ID, NAME, PRED)

780#define HANDLE_DW_CFA(ID, NAME) \

781 case DW_CFA_##NAME: \

782 return "DW_CFA_" #NAME;

783#include "llvm/BinaryFormat/Dwarf.def"

784

785#undef SELECT_X86

786#undef SELECT_SPARC

787#undef SELECT_MIPS64

788#undef SELECT_AARCH64

789 }

790}

791

793 switch (Prop) {

794 default:

796#define HANDLE_DW_APPLE_PROPERTY(ID, NAME) \

797 case DW_APPLE_PROPERTY_##NAME: \

798 return "DW_APPLE_PROPERTY_" #NAME;

799#include "llvm/BinaryFormat/Dwarf.def"

800 }

801}

802

804 switch (UT) {

805 default:

807#define HANDLE_DW_UT(ID, NAME) \

808 case DW_UT_##NAME: \

809 return "DW_UT_" #NAME;

810#include "llvm/BinaryFormat/Dwarf.def"

811 }

812}

813

815 switch (AT) {

817 return "DW_ATOM_null";

819 return "DW_ATOM_die_offset";

821 return "DW_ATOM_cu_offset";

823 return "DW_ATOM_die_tag";

826 return "DW_ATOM_type_flags";

828 return "DW_ATOM_qual_name_hash";

829 }

831}

832

834 switch (Kind) {

836 return "NONE";

838 return "TYPE";

840 return "VARIABLE";

842 return "FUNCTION";

844 return "OTHER";

846 return "UNUSED5";

848 return "UNUSED6";

850 return "UNUSED7";

851 }

853}

854

857 switch (Linkage) {

859 return "EXTERNAL";

861 return "STATIC";

862 }

864}

865

867 switch (Attr) {

868 case DW_AT_accessibility:

870 case DW_AT_virtuality:

872 case DW_AT_language:

874 case DW_AT_encoding:

876 case DW_AT_decimal_sign:

878 case DW_AT_endianity:

880 case DW_AT_visibility:

882 case DW_AT_identifier_case:

884 case DW_AT_calling_convention:

886 case DW_AT_inline:

888 case DW_AT_ordering:

890 case DW_AT_APPLE_runtime_class:

892 case DW_AT_defaulted:

894 case DW_AT_APPLE_enum_kind:

896 case DW_AT_language_name:

898 }

899

901}

902

904 switch (Atom) {

906 return "NULL";

909 }

910

912}

913

915 switch (Idx) {

916 default:

918#define HANDLE_DW_IDX(ID, NAME) \

919 case DW_IDX_##NAME: \

920 return "DW_IDX_" #NAME;

921#include "llvm/BinaryFormat/Dwarf.def"

922 }

923}

924

927 switch (Form) {

928 case DW_FORM_addr:

929 if (Params)

931 return std::nullopt;

932

933 case DW_FORM_block:

934 case DW_FORM_block1:

935 case DW_FORM_block2:

936 case DW_FORM_block4:

937 case DW_FORM_string:

938 case DW_FORM_sdata:

939 case DW_FORM_udata:

940 case DW_FORM_ref_udata:

941 case DW_FORM_indirect:

942 case DW_FORM_exprloc:

943 case DW_FORM_strx:

944 case DW_FORM_addrx:

945 case DW_FORM_loclistx:

946 case DW_FORM_rnglistx:

947 case DW_FORM_GNU_addr_index:

948 case DW_FORM_GNU_str_index:

949 return std::nullopt;

950

951 case DW_FORM_ref_addr:

952 if (Params)

954 return std::nullopt;

955

956 case DW_FORM_flag:

957 case DW_FORM_data1:

958 case DW_FORM_ref1:

959 case DW_FORM_strx1:

960 case DW_FORM_addrx1:

961 return 1;

962

963 case DW_FORM_data2:

964 case DW_FORM_ref2:

965 case DW_FORM_strx2:

966 case DW_FORM_addrx2:

967 return 2;

968

969 case DW_FORM_strx3:

970 case DW_FORM_addrx3:

971 return 3;

972

973 case DW_FORM_data4:

974 case DW_FORM_ref4:

975 case DW_FORM_ref_sup4:

976 case DW_FORM_strx4:

977 case DW_FORM_addrx4:

978 return 4;

979

980 case DW_FORM_strp:

981 case DW_FORM_GNU_ref_alt:

982 case DW_FORM_GNU_strp_alt:

983 case DW_FORM_line_strp:

984 case DW_FORM_sec_offset:

985 case DW_FORM_strp_sup:

986 if (Params)

988 return std::nullopt;

989

990 case DW_FORM_data8:

991 case DW_FORM_ref8:

992 case DW_FORM_ref_sig8:

993 case DW_FORM_ref_sup8:

994 return 8;

995

996 case DW_FORM_flag_present:

997 return 0;

998

999 case DW_FORM_data16:

1000 return 16;

1001

1002 case DW_FORM_implicit_const:

1003

1004

1005 return 0;

1006

1007 default:

1008 break;

1009 }

1010 return std::nullopt;

1011}

1012

1014 bool ExtensionsOk) {

1017 return FV > 0 && FV <= Version;

1018 }

1019 return ExtensionsOk;

1020}

1021

1025 return "DWARF32";

1027 return "DWARF64";

1028 }

1030}

1031

1035

1037 switch (RLE) {

1038 default:

1040#define HANDLE_DW_RLE(ID, NAME) \

1041 case DW_RLE_##NAME: \

1042 return "DW_RLE_" #NAME;

1043#include "llvm/BinaryFormat/Dwarf.def"

1044 }

1045}

1046

1048 switch (AS) {

1049#define HANDLE_DW_ASPACE(ID, NAME) \

1050 case DW_ASPACE_LLVM_##NAME: \

1051 return "DW_ASPACE_LLVM_" #NAME;

1052#define HANDLE_DW_ASPACE_PRED(ID, NAME, PRED)

1053#include "llvm/BinaryFormat/Dwarf.def"

1054 default:

1055 break;

1056 }

1057

1058 bool SELECT_AMDGPU = TT.isAMDGPU();

1059#define HANDLE_DW_ASPACE(ID, NAME)

1060#define HANDLE_DW_ASPACE_PRED(ID, NAME, PRED) \

1061 if (DW_ASPACE_LLVM_##NAME == AS && PRED) \

1062 return "DW_ASPACE_LLVM_" #NAME;

1063#include "llvm/BinaryFormat/Dwarf.def"

1064

1065 return "";

1066}

1067

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")

static unsigned getLlvmUserOperationEncoding(StringRef LlvmUserOperationEncodingString)

Definition Dwarf.cpp:193

static StringRef LlvmUserOperationEncodingString(unsigned Encoding)

Definition Dwarf.cpp:181

This file contains constants used for implementing Dwarf debug support.

This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...

StringRef - Represent a constant reference to a string, i.e.

A switch()-like statement whose cases are string literals.

StringSwitch & Case(StringLiteral S, T Value)

Triple - Helper class for working with autoconf configuration names.

LLVM_ABI StringRef LNExtendedString(unsigned Encoding)

Definition Dwarf.cpp:673

LLVM_ABI StringRef RangeListEncodingString(unsigned Encoding)

Definition Dwarf.cpp:741

LLVM_ABI StringRef CaseString(unsigned Case)

Definition Dwarf.cpp:606

LLVM_ABI StringRef SourceLanguageNameString(SourceLanguageName Lang)

Definition Dwarf.cpp:586

LLVM_ABI StringRef VisibilityString(unsigned Visibility)

Definition Dwarf.cpp:362

LLVM_ABI StringRef GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage)

Definition Dwarf.cpp:856

LLVM_ABI StringRef AttributeString(unsigned Attribute)

Definition Dwarf.cpp:72

LLVM_ABI StringRef CallFrameString(unsigned Encoding, Triple::ArchType Arch)

Definition Dwarf.cpp:763

LLVM_ABI StringRef FormEncodingString(unsigned Encoding)

Definition Dwarf.cpp:105

LLVM_ABI StringRef ArrayOrderString(unsigned Order)

Definition Dwarf.cpp:652

LLVM_ABI StringRef MacroString(unsigned Encoding)

Definition Dwarf.cpp:713

LLVM_ABI StringRef EnumKindString(unsigned EnumKind)

Definition Dwarf.cpp:393

LLVM_ABI StringRef LocListEncodingString(unsigned Encoding)

Definition Dwarf.cpp:752

LLVM_ABI StringRef IndexString(unsigned Idx)

Definition Dwarf.cpp:914

LLVM_ABI StringRef RLEString(unsigned RLE)

Definition Dwarf.cpp:1036

LLVM_ABI StringRef SubOperationEncodingString(unsigned OpEncoding, unsigned SubOpEncoding)

Definition Dwarf.cpp:202

LLVM_ABI StringRef LanguageString(unsigned Language)

Definition Dwarf.cpp:412

LLVM_ABI StringRef DecimalSignString(unsigned Sign)

Definition Dwarf.cpp:304

LLVM_ABI StringRef VirtualityString(unsigned Virtuality)

Definition Dwarf.cpp:374

LLVM_ABI StringRef AttributeEncodingString(unsigned Encoding)

Definition Dwarf.cpp:263

LLVM_ABI StringRef AddressSpaceString(unsigned AS, const llvm::Triple &TT)

Definition Dwarf.cpp:1047

LLVM_ABI StringRef ChildrenString(unsigned Children)

Definition Dwarf.cpp:62

LLVM_ABI StringRef ApplePropertyString(unsigned)

Definition Dwarf.cpp:792

LLVM_ABI StringRef AtomTypeString(unsigned Atom)

Definition Dwarf.cpp:814

LLVM_ABI StringRef FormatString(DwarfFormat Format)

Definition Dwarf.cpp:1022

LLVM_ABI StringRef GnuMacroString(unsigned Encoding)

Definition Dwarf.cpp:724

LLVM_ABI StringRef EndianityString(unsigned Endian)

Definition Dwarf.cpp:320

LLVM_ABI StringRef ConventionString(unsigned Convention)

Definition Dwarf.cpp:620

LLVM_ABI StringRef MacinfoString(unsigned Encoding)

Definition Dwarf.cpp:684

LLVM_ABI StringRef OperationEncodingString(unsigned Encoding)

Definition Dwarf.cpp:138

LLVM_ABI StringRef UnitTypeString(unsigned)

Definition Dwarf.cpp:803

LLVM_ABI StringRef InlineCodeString(unsigned Code)

Definition Dwarf.cpp:638

LLVM_ABI StringRef GDBIndexEntryKindString(GDBIndexEntryKind Kind)

Definition Dwarf.cpp:833

LLVM_ABI StringRef TagString(unsigned Tag)

Definition Dwarf.cpp:21

LLVM_ABI StringRef LNStandardString(unsigned Standard)

Definition Dwarf.cpp:662

LLVM_ABI StringRef AccessibilityString(unsigned Access)

Definition Dwarf.cpp:336

LLVM_ABI StringRef DefaultedMemberString(unsigned DefaultedEncodings)

Definition Dwarf.cpp:349

LLVM_ABI unsigned getSourceLanguageName(StringRef SourceLanguageNameString)

Definition Dwarf.cpp:598

LLVM_ABI unsigned getSubOperationEncoding(unsigned OpEncoding, StringRef SubOperationEncodingString)

Definition Dwarf.cpp:209

LLVM_ABI unsigned getOperationEncoding(StringRef OperationEncodingString)

Definition Dwarf.cpp:165

LLVM_ABI unsigned getAttributeEncoding(StringRef EncodingString)

Definition Dwarf.cpp:274

LLVM_ABI unsigned getTag(StringRef TagString)

Definition Dwarf.cpp:32

LLVM_ABI unsigned getCallingConvention(StringRef LanguageString)

Definition Dwarf.cpp:631

LLVM_ABI unsigned getLanguage(StringRef LanguageString)

Definition Dwarf.cpp:423

LLVM_ABI unsigned getVirtuality(StringRef VirtualityString)

Definition Dwarf.cpp:385

LLVM_ABI unsigned getEnumKind(StringRef EnumKindString)

Definition Dwarf.cpp:404

LLVM_ABI unsigned getMacro(StringRef MacroString)

Definition Dwarf.cpp:735

LLVM_ABI unsigned getMacinfo(StringRef MacinfoString)

Definition Dwarf.cpp:703

LLVM_ABI unsigned AttributeEncodingVendor(TypeKind E)

Definition Dwarf.cpp:293

LLVM_ABI unsigned FormVendor(Form F)

Definition Dwarf.cpp:127

LLVM_ABI unsigned AttributeVendor(Attribute A)

Definition Dwarf.cpp:94

LLVM_ABI unsigned OperationVendor(LocationAtom O)

Definition Dwarf.cpp:252

LLVM_ABI unsigned TagVendor(Tag T)

Definition Dwarf.cpp:51

LLVM_ABI unsigned LanguageVendor(SourceLanguage L)

Definition Dwarf.cpp:442

LLVM_ABI unsigned OperationVersion(LocationAtom O)

Definition Dwarf.cpp:215

LLVM_ABI unsigned AttributeVersion(Attribute A)

Definition Dwarf.cpp:83

LLVM_ABI unsigned LanguageVersion(SourceLanguage L)

Definition Dwarf.cpp:431

LLVM_ABI unsigned AttributeEncodingVersion(TypeKind E)

Definition Dwarf.cpp:282

LLVM_ABI unsigned TagVersion(Tag T)

Definition Dwarf.cpp:40

LLVM_ABI unsigned FormVersion(Form F)

Definition Dwarf.cpp:116

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

Calculates the starting offsets for various sections within the .debug_names section.

@ DW_INL_declared_not_inlined

@ DW_INL_declared_inlined

LLVM_ABI std::optional< unsigned > LanguageLowerBound(SourceLanguage L)

Definition Dwarf.cpp:454

LLVM_ABI StringRef AtomValueString(uint16_t Atom, unsigned Val)

Returns the symbolic string representing Val when used as a value for atom Atom.

Definition Dwarf.cpp:903

LLVM_ABI std::optional< unsigned > OperationArity(LocationAtom O)

The arity of the given LocationAtom.

Definition Dwarf.cpp:239

@ DW_OP_LLVM_entry_value

Only used in LLVM metadata.

@ DW_OP_LLVM_implicit_pointer

Only used in LLVM metadata.

@ DW_OP_LLVM_extract_bits_zext

Only used in LLVM metadata.

@ DW_OP_LLVM_tag_offset

Only used in LLVM metadata.

@ DW_OP_LLVM_fragment

Only used in LLVM metadata.

@ DW_OP_LLVM_arg

Only used in LLVM metadata.

@ DW_OP_LLVM_convert

Only used in LLVM metadata.

@ DW_OP_LLVM_extract_bits_sext

Only used in LLVM metadata.

DwarfFormat

Constants that define the DWARF format as 32 or 64 bit.

LLVM_ABI bool isValidFormForVersion(Form F, unsigned Version, bool ExtensionsOk=true)

Tells whether the specified form is defined in the specified version, or is an extension if extension...

Definition Dwarf.cpp:1013

LLVM_ABI std::optional< uint8_t > getFixedFormByteSize(dwarf::Form Form, FormParams Params)

Get the fixed byte size for a given form.

Definition Dwarf.cpp:925

LLVM_ABI StringRef AttributeValueString(uint16_t Attr, unsigned Val)

Returns the symbolic string representing Val when used as a value for attribute Attr.

Definition Dwarf.cpp:866

LLVM_ABI std::optional< unsigned > OperationOperands(LocationAtom O)

The number of operands for the given LocationAtom.

Definition Dwarf.cpp:226

@ DW_DS_trailing_separate

@ DW_DS_trailing_overpunch

@ DW_DS_leading_overpunch

LLVM_ABI llvm::StringRef LanguageDescription(SourceLanguageName name)

Returns a version-independent language name.

Definition Dwarf.cpp:465

@ DW_ATOM_die_offset

Marker as the end of a list of atoms.

@ DW_ATOM_type_type_flags

@ DW_TAG_invalid

LLVM mock tags (see also llvm/BinaryFormat/Dwarf.def).

@ DW_MACINFO_invalid

Macinfo type for invalid results.

@ DW_APPLE_ENUM_KIND_invalid

Enum kind for invalid results.

@ DW_VIRTUALITY_invalid

Virtuality for invalid results.

@ DWARF_VENDOR_DWARF

Identifiers we use to distinguish vendor extensions.

This is an optimization pass for GlobalISel generic memory operations.

FunctionAddr VTableAddr uintptr_t uintptr_t Version

DWARFExpression::Operation Op

A helper struct providing information about the byte size of DW_FORM values that vary in size dependi...

uint8_t getDwarfOffsetByteSize() const

The size of a reference is determined by the DWARF 32/64-bit format.

uint8_t getRefAddrByteSize() const

The definition of the size of form DW_FORM_ref_addr depends on the version.