Go to the documentation of this file.
19 using namespace dwarf;
25 #define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \
27 return "DW_TAG_" #NAME;
28 #include "llvm/BinaryFormat/Dwarf.def"
34 #define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \
35 .Case("DW_TAG_" #NAME, DW_TAG_##NAME)
36 #include "llvm/BinaryFormat/Dwarf.def"
44 #define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \
47 #include "llvm/BinaryFormat/Dwarf.def"
55 #define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \
57 return DWARF_VENDOR_##VENDOR;
58 #include "llvm/BinaryFormat/Dwarf.def"
65 return "DW_CHILDREN_no";
67 return "DW_CHILDREN_yes";
76 #define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \
78 return "DW_AT_" #NAME;
79 #include "llvm/BinaryFormat/Dwarf.def"
87 #define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \
90 #include "llvm/BinaryFormat/Dwarf.def"
98 #define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) \
100 return DWARF_VENDOR_##VENDOR;
101 #include "llvm/BinaryFormat/Dwarf.def"
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"
120 #define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) \
121 case DW_FORM_##NAME: \
123 #include "llvm/BinaryFormat/Dwarf.def"
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"
142 #define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \
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";
163 #define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \
164 .Case("DW_OP_" #NAME, DW_OP_##NAME)
165 #include "llvm/BinaryFormat/Dwarf.def"
179 #define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \
182 #include "llvm/BinaryFormat/Dwarf.def"
190 #define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) \
192 return DWARF_VENDOR_##VENDOR;
193 #include "llvm/BinaryFormat/Dwarf.def"
201 #define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \
202 case DW_ATE_##NAME: \
203 return "DW_ATE_" #NAME;
204 #include "llvm/BinaryFormat/Dwarf.def"
210 #define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \
211 .Case("DW_ATE_" #NAME, DW_ATE_##NAME)
212 #include "llvm/BinaryFormat/Dwarf.def"
220 #define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \
221 case DW_ATE_##NAME: \
223 #include "llvm/BinaryFormat/Dwarf.def"
231 #define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) \
232 case DW_ATE_##NAME: \
233 return DWARF_VENDOR_##VENDOR;
234 #include "llvm/BinaryFormat/Dwarf.def"
241 return "DW_DS_unsigned";
243 return "DW_DS_leading_overpunch";
245 return "DW_DS_trailing_overpunch";
247 return "DW_DS_leading_separate";
249 return "DW_DS_trailing_separate";
257 return "DW_END_default";
261 return "DW_END_little";
263 return "DW_END_lo_user";
265 return "DW_END_hi_user";
274 return "DW_ACCESS_public";
276 return "DW_ACCESS_protected";
278 return "DW_ACCESS_private";
284 switch (DefaultedEncodings) {
286 case DW_DEFAULTED_no:
287 return "DW_DEFAULTED_no";
288 case DW_DEFAULTED_in_class:
289 return "DW_DEFAULTED_in_class";
290 case DW_DEFAULTED_out_of_class:
291 return "DW_DEFAULTED_out_of_class";
297 switch (Visibility) {
299 return "DW_VIS_local";
301 return "DW_VIS_exported";
303 return "DW_VIS_qualified";
309 switch (Virtuality) {
312 #define HANDLE_DW_VIRTUALITY(ID, NAME) \
313 case DW_VIRTUALITY_##NAME: \
314 return "DW_VIRTUALITY_" #NAME;
315 #include "llvm/BinaryFormat/Dwarf.def"
321 #define HANDLE_DW_VIRTUALITY(ID, NAME) \
322 .Case("DW_VIRTUALITY_" #NAME, DW_VIRTUALITY_##NAME)
323 #include "llvm/BinaryFormat/Dwarf.def"
331 #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \
332 case DW_LANG_##NAME: \
333 return "DW_LANG_" #NAME;
334 #include "llvm/BinaryFormat/Dwarf.def"
340 #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \
341 .Case("DW_LANG_" #NAME, DW_LANG_##NAME)
342 #include "llvm/BinaryFormat/Dwarf.def"
350 #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \
351 case DW_LANG_##NAME: \
353 #include "llvm/BinaryFormat/Dwarf.def"
361 #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \
362 case DW_LANG_##NAME: \
363 return DWARF_VENDOR_##VENDOR;
364 #include "llvm/BinaryFormat/Dwarf.def"
368 std::optional<unsigned>
373 #define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \
374 case DW_LANG_##NAME: \
376 #include "llvm/BinaryFormat/Dwarf.def"
383 return "DW_ID_case_sensitive";
385 return "DW_ID_up_case";
387 return "DW_ID_down_case";
389 return "DW_ID_case_insensitive";
398 #define HANDLE_DW_CC(ID, NAME) \
400 return "DW_CC_" #NAME;
401 #include "llvm/BinaryFormat/Dwarf.def"
407 #define HANDLE_DW_CC(ID, NAME) .Case("DW_CC_" #NAME, DW_CC_##NAME)
408 #include "llvm/BinaryFormat/Dwarf.def"
415 return "DW_INL_not_inlined";
417 return "DW_INL_inlined";
419 return "DW_INL_declared_not_inlined";
421 return "DW_INL_declared_inlined";
429 return "DW_ORD_row_major";
431 return "DW_ORD_col_major";
440 #define HANDLE_DW_LNS(ID, NAME) \
441 case DW_LNS_##NAME: \
442 return "DW_LNS_" #NAME;
443 #include "llvm/BinaryFormat/Dwarf.def"
451 #define HANDLE_DW_LNE(ID, NAME) \
452 case DW_LNE_##NAME: \
453 return "DW_LNE_" #NAME;
454 #include "llvm/BinaryFormat/Dwarf.def"
462 return "DW_MACINFO_define";
464 return "DW_MACINFO_undef";
466 return "DW_MACINFO_start_file";
468 return "DW_MACINFO_end_file";
470 return "DW_MACINFO_vendor_ext";
472 return "DW_MACINFO_invalid";
491 #define HANDLE_DW_MACRO(ID, NAME) \
492 case DW_MACRO_##NAME: \
493 return "DW_MACRO_" #NAME;
494 #include "llvm/BinaryFormat/Dwarf.def"
502 #define HANDLE_DW_MACRO_GNU(ID, NAME) \
503 case DW_MACRO_GNU_##NAME: \
504 return "DW_MACRO_GNU_" #NAME;
505 #include "llvm/BinaryFormat/Dwarf.def"
511 #define HANDLE_DW_MACRO(ID, NAME) .Case("DW_MACRO_" #NAME, ID)
512 #include "llvm/BinaryFormat/Dwarf.def"
519 #define HANDLE_DW_RLE(ID, NAME) \
520 case DW_RLE_##NAME: \
521 return "DW_RLE_" #NAME;
522 #include "llvm/BinaryFormat/Dwarf.def"
530 #define HANDLE_DW_LLE(ID, NAME) \
531 case DW_LLE_##NAME: \
532 return "DW_LLE_" #NAME;
533 #include "llvm/BinaryFormat/Dwarf.def"
539 assert(Arch != llvm::Triple::ArchType::UnknownArch);
540 #define SELECT_AARCH64 (Arch == llvm::Triple::aarch64_be || Arch == llvm::Triple::aarch64)
541 #define SELECT_MIPS64 Arch == llvm::Triple::mips64
542 #define SELECT_SPARC (Arch == llvm::Triple::sparc || Arch == llvm::Triple::sparcv9)
543 #define SELECT_X86 (Arch == llvm::Triple::x86 || Arch == llvm::Triple::x86_64)
544 #define HANDLE_DW_CFA(ID, NAME)
545 #define HANDLE_DW_CFA_PRED(ID, NAME, PRED) \
546 if (ID == Encoding && PRED) \
547 return "DW_CFA_" #NAME;
548 #include "llvm/BinaryFormat/Dwarf.def"
553 #define HANDLE_DW_CFA_PRED(ID, NAME, PRED)
554 #define HANDLE_DW_CFA(ID, NAME) \
555 case DW_CFA_##NAME: \
556 return "DW_CFA_" #NAME;
557 #include "llvm/BinaryFormat/Dwarf.def"
562 #undef SELECT_AARCH64
570 #define HANDLE_DW_APPLE_PROPERTY(ID, NAME) \
571 case DW_APPLE_PROPERTY_##NAME: \
572 return "DW_APPLE_PROPERTY_" #NAME;
573 #include "llvm/BinaryFormat/Dwarf.def"
581 #define HANDLE_DW_UT(ID, NAME) \
583 return "DW_UT_" #NAME;
584 #include "llvm/BinaryFormat/Dwarf.def"
591 return "DW_ATOM_null";
593 return "DW_ATOM_die_offset";
595 return "DW_ATOM_cu_offset";
597 return "DW_ATOM_die_tag";
600 return "DW_ATOM_type_flags";
602 return "DW_ATOM_qual_name_hash";
642 case DW_AT_accessibility:
644 case DW_AT_virtuality:
650 case DW_AT_decimal_sign:
652 case DW_AT_endianity:
654 case DW_AT_visibility:
656 case DW_AT_identifier_case:
658 case DW_AT_calling_convention:
664 case DW_AT_APPLE_runtime_class:
666 case DW_AT_defaulted:
688 #define HANDLE_DW_IDX(ID, NAME) \
689 case DW_IDX_##NAME: \
690 return "DW_IDX_" #NAME;
691 #include "llvm/BinaryFormat/Dwarf.def"
710 case DW_FORM_ref_udata:
711 case DW_FORM_indirect:
712 case DW_FORM_exprloc:
715 case DW_FORM_loclistx:
716 case DW_FORM_rnglistx:
717 case DW_FORM_GNU_addr_index:
718 case DW_FORM_GNU_str_index:
721 case DW_FORM_ref_addr:
744 case DW_FORM_ref_sup4:
750 case DW_FORM_GNU_ref_alt:
751 case DW_FORM_GNU_strp_alt:
752 case DW_FORM_line_strp:
753 case DW_FORM_sec_offset:
754 case DW_FORM_strp_sup:
761 case DW_FORM_ref_sig8:
762 case DW_FORM_ref_sup8:
765 case DW_FORM_flag_present:
771 case DW_FORM_implicit_const:
786 return FV > 0 && FV <=
Version;
809 #define HANDLE_DW_RLE(ID, NAME) \
810 case DW_RLE_##NAME: \
811 return "DW_RLE_" #NAME;
812 #include "llvm/BinaryFormat/Dwarf.def"
StringSwitch & Case(StringLiteral S, T Value)
StringRef AttributeEncodingString(unsigned Encoding)
unsigned AttributeEncodingVendor(TypeKind E)
This is an optimization pass for GlobalISel generic memory operations.
StringRef MacroString(unsigned Encoding)
@ DW_ATOM_die_offset
Marker as the end of a list of atoms.
StringRef GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage)
unsigned getVirtuality(StringRef VirtualityString)
@ DW_OP_LLVM_tag_offset
Only used in LLVM metadata.
StringRef RangeListEncodingString(unsigned Encoding)
unsigned FormVersion(Form F)
@ DW_INL_declared_not_inlined
unsigned AttributeVendor(Attribute A)
unsigned getCallingConvention(StringRef LanguageString)
StringRef VirtualityString(unsigned Virtuality)
StringRef IndexString(unsigned Idx)
StringRef AccessibilityString(unsigned Access)
StringRef GnuMacroString(unsigned Encoding)
unsigned TagVendor(Tag T)
StringRef AtomTypeString(unsigned Atom)
StringRef CallFrameString(unsigned Encoding, Triple::ArchType Arch)
StringRef LNExtendedString(unsigned Encoding)
StringRef LanguageString(unsigned Language)
StringRef AttributeValueString(uint16_t Attr, unsigned Val)
Returns the symbolic string representing Val when used as a value for attribute Attr.
@ DW_DS_trailing_overpunch
constexpr char Language[]
Key for Kernel::Metadata::mLanguage.
@ DW_ATOM_type_type_flags
unsigned getTag(StringRef TagString)
unsigned LanguageVersion(SourceLanguage L)
std::optional< unsigned > LanguageLowerBound(SourceLanguage L)
StringRef FormatString(DwarfFormat Format)
StringRef VisibilityString(unsigned Visibility)
StringRef GDBIndexEntryKindString(GDBIndexEntryKind Kind)
DwarfFormat
Constants that define the DWARF format as 32 or 64 bit.
StringRef FormEncodingString(unsigned Encoding)
@ DW_OP_LLVM_entry_value
Only used in LLVM metadata.
unsigned getLanguage(StringRef LanguageString)
unsigned TagVersion(Tag T)
StringRef DefaultedMemberString(unsigned DefaultedEncodings)
unsigned AttributeVersion(Attribute A)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
unsigned FormVendor(Form F)
@ DW_INL_declared_inlined
@ DW_OP_LLVM_arg
Only used in LLVM metadata.
unsigned getAttributeEncoding(StringRef EncodingString)
StringRef ArrayOrderString(unsigned Order)
std::optional< uint8_t > getFixedFormByteSize(dwarf::Form Form, FormParams Params)
Get the fixed byte size for a given form.
StringRef CaseString(unsigned Case)
@ DW_OP_LLVM_fragment
Only used in LLVM metadata.
@ DW_OP_LLVM_implicit_pointer
Only used in LLVM metadata.
@ DW_TAG_invalid
LLVM mock tags (see also llvm/BinaryFormat/Dwarf.def).
StringRef - Represent a constant reference to a string, i.e.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
unsigned LanguageVendor(SourceLanguage L)
StringRef ApplePropertyString(unsigned)
StringRef AtomValueString(uint16_t Atom, unsigned Val)
Returns the symbolic string representing Val when used as a value for atom Atom.
StringRef ChildrenString(unsigned Children)
StringRef ConventionString(unsigned Convention)
unsigned getOperationEncoding(StringRef OperationEncodingString)
StringRef EndianityString(unsigned Endian)
@ DW_VIRTUALITY_invalid
Virtuality for invalid results.
@ DW_DS_trailing_separate
@ DWARF_VENDOR_DWARF
Identifiers we use to distinguish vendor extensions.
@ DW_OP_LLVM_convert
Only used in LLVM metadata.
StringRef LNStandardString(unsigned Standard)
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...
unsigned OperationVendor(LocationAtom O)
StringRef MacinfoString(unsigned Encoding)
@ DW_MACINFO_invalid
Macinfo type for invalid results.
unsigned getMacro(StringRef MacroString)
unsigned OperationVersion(LocationAtom O)
StringRef RLEString(unsigned RLE)
A switch()-like statement whose cases are string literals.
StringRef InlineCodeString(unsigned Code)
StringRef TagString(unsigned Tag)
@ DW_DS_leading_overpunch
StringRef DecimalSignString(unsigned Sign)
unsigned AttributeEncodingVersion(TypeKind E)
unsigned getMacinfo(StringRef MacinfoString)
StringRef UnitTypeString(unsigned)
StringRef AttributeString(unsigned Attribute)
StringRef OperationEncodingString(unsigned Encoding)
StringRef LocListEncodingString(unsigned Encoding)