19#ifndef LLVM_BINARYFORMAT_DWARF_H
20#define LLVM_BINARYFORMAT_DWARF_H
104#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) DW_TAG_##NAME = ID,
105#include "llvm/BinaryFormat/Dwarf.def"
115#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR, KIND) \
116 case DW_TAG_##NAME: \
117 return (KIND == DW_KIND_TYPE);
118#include "llvm/BinaryFormat/Dwarf.def"
124#define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR) DW_AT_##NAME = ID,
125#include "llvm/BinaryFormat/Dwarf.def"
131#define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR) DW_FORM_##NAME = ID,
132#include "llvm/BinaryFormat/Dwarf.def"
137#define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR) DW_OP_##NAME = ID,
138#include "llvm/BinaryFormat/Dwarf.def"
150#define HANDLE_DW_OP_LLVM_USEROP(ID, NAME) DW_OP_LLVM_##NAME = ID,
151#include "llvm/BinaryFormat/Dwarf.def"
155#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR) DW_ATE_##NAME = ID,
156#include "llvm/BinaryFormat/Dwarf.def"
172#define HANDLE_DW_END(ID, NAME) DW_END_##NAME = ID,
173#include "llvm/BinaryFormat/Dwarf.def"
193#define HANDLE_DW_VIRTUALITY(ID, NAME) DW_VIRTUALITY_##NAME = ID,
194#include "llvm/BinaryFormat/Dwarf.def"
199#define HANDLE_DW_DEFAULTED(ID, NAME) DW_DEFAULTED_##NAME = ID,
200#include "llvm/BinaryFormat/Dwarf.def"
205#define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR) \
207#include "llvm/BinaryFormat/Dwarf.def"
218 case DW_LANG_C_plus_plus:
219 case DW_LANG_C_plus_plus_03:
220 case DW_LANG_C_plus_plus_11:
221 case DW_LANG_C_plus_plus_14:
222 case DW_LANG_C_plus_plus_17:
223 case DW_LANG_C_plus_plus_20:
229 case DW_LANG_Cobol74:
230 case DW_LANG_Cobol85:
231 case DW_LANG_Fortran77:
232 case DW_LANG_Fortran90:
233 case DW_LANG_Pascal83:
234 case DW_LANG_Modula2:
238 case DW_LANG_Fortran95:
241 case DW_LANG_ObjC_plus_plus:
247 case DW_LANG_Modula3:
248 case DW_LANG_Haskell:
255 case DW_LANG_Fortran03:
256 case DW_LANG_Fortran08:
257 case DW_LANG_RenderScript:
259 case DW_LANG_Mips_Assembler:
260 case DW_LANG_GOOGLE_RenderScript:
261 case DW_LANG_BORLAND_Delphi:
266 case DW_LANG_Crystal:
268 case DW_LANG_Fortran18:
269 case DW_LANG_Ada2005:
270 case DW_LANG_Ada2012:
285 case DW_LANG_Fortran77:
286 case DW_LANG_Fortran90:
287 case DW_LANG_Fortran95:
288 case DW_LANG_Fortran03:
289 case DW_LANG_Fortran08:
290 case DW_LANG_Fortran18:
296 case DW_LANG_C_plus_plus:
297 case DW_LANG_Cobol74:
298 case DW_LANG_Cobol85:
299 case DW_LANG_Pascal83:
300 case DW_LANG_Modula2:
306 case DW_LANG_ObjC_plus_plus:
312 case DW_LANG_Modula3:
313 case DW_LANG_Haskell:
314 case DW_LANG_C_plus_plus_03:
315 case DW_LANG_C_plus_plus_11:
322 case DW_LANG_C_plus_plus_14:
323 case DW_LANG_RenderScript:
325 case DW_LANG_Mips_Assembler:
326 case DW_LANG_GOOGLE_RenderScript:
327 case DW_LANG_BORLAND_Delphi:
332 case DW_LANG_Crystal:
333 case DW_LANG_C_plus_plus_17:
334 case DW_LANG_C_plus_plus_20:
336 case DW_LANG_Ada2005:
337 case DW_LANG_Ada2012:
358 case DW_LANG_C_plus_plus:
359 case DW_LANG_C_plus_plus_03:
360 case DW_LANG_C_plus_plus_11:
361 case DW_LANG_C_plus_plus_14:
362 case DW_LANG_C_plus_plus_17:
363 case DW_LANG_C_plus_plus_20:
365 case DW_LANG_Cobol74:
366 case DW_LANG_Cobol85:
367 case DW_LANG_Fortran77:
368 case DW_LANG_Fortran90:
369 case DW_LANG_Pascal83:
370 case DW_LANG_Modula2:
373 case DW_LANG_Fortran95:
375 case DW_LANG_ObjC_plus_plus:
381 case DW_LANG_Modula3:
382 case DW_LANG_Haskell:
388 case DW_LANG_Fortran03:
389 case DW_LANG_Fortran08:
390 case DW_LANG_RenderScript:
392 case DW_LANG_Mips_Assembler:
393 case DW_LANG_GOOGLE_RenderScript:
394 case DW_LANG_BORLAND_Delphi:
399 case DW_LANG_Crystal:
400 case DW_LANG_Fortran18:
401 case DW_LANG_Ada2005:
402 case DW_LANG_Ada2012:
410 return isFortran(S) ? DW_ATE_signed : DW_ATE_unsigned;
423#define HANDLE_DW_CC(ID, NAME) DW_CC_##NAME = ID,
424#include "llvm/BinaryFormat/Dwarf.def"
451#define HANDLE_DW_LNS(ID, NAME) DW_LNS_##NAME = ID,
452#include "llvm/BinaryFormat/Dwarf.def"
457#define HANDLE_DW_LNE(ID, NAME) DW_LNE_##NAME = ID,
458#include "llvm/BinaryFormat/Dwarf.def"
464#define HANDLE_DW_LNCT(ID, NAME) DW_LNCT_##NAME = ID,
465#include "llvm/BinaryFormat/Dwarf.def"
481#define HANDLE_DW_MACRO(ID, NAME) DW_MACRO_##NAME = ID,
482#include "llvm/BinaryFormat/Dwarf.def"
489#define HANDLE_DW_MACRO_GNU(ID, NAME) DW_MACRO_GNU_##NAME = ID,
490#include "llvm/BinaryFormat/Dwarf.def"
497#define HANDLE_DW_RLE(ID, NAME) DW_RLE_##NAME = ID,
498#include "llvm/BinaryFormat/Dwarf.def"
503#define HANDLE_DW_LLE(ID, NAME) DW_LLE_##NAME = ID,
504#include "llvm/BinaryFormat/Dwarf.def"
509#define HANDLE_DW_CFA(ID, NAME) DW_CFA_##NAME = ID,
510#define HANDLE_DW_CFA_PRED(ID, NAME, ARCH) DW_CFA_##NAME = ID,
511#include "llvm/BinaryFormat/Dwarf.def"
546#define HANDLE_DW_APPLE_PROPERTY(ID, NAME) DW_APPLE_PROPERTY_##NAME = ID,
547#include "llvm/BinaryFormat/Dwarf.def"
552#define HANDLE_DW_UT(ID, NAME) DW_UT_##NAME = ID,
553#include "llvm/BinaryFormat/Dwarf.def"
559#define HANDLE_DW_IDX(ID, NAME) DW_IDX_##NAME = ID,
560#include "llvm/BinaryFormat/Dwarf.def"
571 case DW_UT_split_compile:
572 case DW_UT_split_type:
581 case DW_TAG_compile_unit:
582 case DW_TAG_type_unit:
583 case DW_TAG_partial_unit:
584 case DW_TAG_skeleton_unit:
643 unsigned SubOpEncoding);
827 return Kind << KIND_OFFSET |
Linkage << LINKAGE_OFFSET;
833 KIND_MASK = 7 << KIND_OFFSET,
835 LINKAGE_MASK = 1 << LINKAGE_OFFSET
839template <
typename Enum>
struct EnumTraits :
public std::false_type {};
842 static constexpr char Type[3] =
"AT";
847 static constexpr char Type[5] =
"FORM";
852 static constexpr char Type[4] =
"IDX";
857 static constexpr char Type[4] =
"TAG";
862 static constexpr char Type[4] =
"LNS";
867 static constexpr char Type[3] =
"OP";
872 return std::numeric_limits<uint64_t>::max() >> (8 - AddressByteSize) * 8;
882template <
typename Enum>
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
StringRef - Represent a constant reference to a string, i.e.
The instances of the Type class are immutable: once they are created, they are never changed.
LLVM Value Representation.
This class implements an extremely fast bulk output stream that can only output to a stream.
StringRef LNExtendedString(unsigned Encoding)
StringRef RangeListEncodingString(unsigned Encoding)
StringRef CaseString(unsigned Case)
StringRef VisibilityString(unsigned Visibility)
StringRef GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage)
StringRef AttributeString(unsigned Attribute)
StringRef CallFrameString(unsigned Encoding, Triple::ArchType Arch)
StringRef FormEncodingString(unsigned Encoding)
StringRef ArrayOrderString(unsigned Order)
StringRef MacroString(unsigned Encoding)
StringRef LocListEncodingString(unsigned Encoding)
StringRef IndexString(unsigned Idx)
StringRef RLEString(unsigned RLE)
StringRef SubOperationEncodingString(unsigned OpEncoding, unsigned SubOpEncoding)
StringRef LanguageString(unsigned Language)
StringRef DecimalSignString(unsigned Sign)
StringRef VirtualityString(unsigned Virtuality)
StringRef AttributeEncodingString(unsigned Encoding)
StringRef ChildrenString(unsigned Children)
StringRef ApplePropertyString(unsigned)
StringRef AtomTypeString(unsigned Atom)
StringRef FormatString(DwarfFormat Format)
StringRef GnuMacroString(unsigned Encoding)
StringRef EndianityString(unsigned Endian)
StringRef ConventionString(unsigned Convention)
StringRef MacinfoString(unsigned Encoding)
StringRef OperationEncodingString(unsigned Encoding)
StringRef UnitTypeString(unsigned)
StringRef InlineCodeString(unsigned Code)
StringRef GDBIndexEntryKindString(GDBIndexEntryKind Kind)
StringRef TagString(unsigned Tag)
StringRef LNStandardString(unsigned Standard)
StringRef AccessibilityString(unsigned Access)
StringRef DefaultedMemberString(unsigned DefaultedEncodings)
unsigned getSubOperationEncoding(unsigned OpEncoding, StringRef SubOperationEncodingString)
unsigned getOperationEncoding(StringRef OperationEncodingString)
unsigned getAttributeEncoding(StringRef EncodingString)
unsigned getTag(StringRef TagString)
unsigned getCallingConvention(StringRef LanguageString)
unsigned getLanguage(StringRef LanguageString)
unsigned getVirtuality(StringRef VirtualityString)
unsigned getMacro(StringRef MacroString)
unsigned getMacinfo(StringRef MacinfoString)
unsigned AttributeEncodingVendor(TypeKind E)
unsigned FormVendor(Form F)
unsigned AttributeVendor(Attribute A)
unsigned OperationVendor(LocationAtom O)
unsigned TagVendor(Tag T)
unsigned LanguageVendor(SourceLanguage L)
unsigned OperationVersion(LocationAtom O)
unsigned AttributeVersion(Attribute A)
unsigned LanguageVersion(SourceLanguage L)
unsigned AttributeEncodingVersion(TypeKind E)
unsigned TagVersion(Tag T)
unsigned FormVersion(Form F)
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
@ DW_INL_declared_not_inlined
@ DW_INL_declared_inlined
const uint32_t DW_CIE_ID
Special ID values that distinguish a CIE from a FDE in DWARF CFI.
uint8_t getUnitLengthFieldByteSize(DwarfFormat Format)
Get the byte size of the unit length field depending on the DWARF format.
MacroEntryType
DWARF v5 macro information entry type encodings.
std::optional< unsigned > LanguageLowerBound(SourceLanguage L)
StringRef AtomValueString(uint16_t Atom, unsigned Val)
Returns the symbolic string representing Val when used as a value for atom Atom.
const uint64_t DW64_CIE_ID
LineNumberOps
Line Number Standard Opcode Encodings.
ApplePropertyAttributes
Constants for the DW_APPLE_PROPERTY_attributes attribute.
LoclistEntries
DWARF v5 loc list entry encoding values.
bool isFortran(SourceLanguage S)
bool isUnitType(uint8_t UnitType)
GnuMacroEntryType
GNU .debug_macro macro information entry type encodings.
UnitType
Constants for unit types in DWARF v5.
@ DW_FORM_lo_user
Not specified by DWARF.
@ DW_OP_LLVM_entry_value
Only used in LLVM metadata.
@ DW_OP_LLVM_implicit_pointer
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.
DwarfFormat
Constants that define the DWARF format as 32 or 64 bit.
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...
const uint32_t DW_INVALID_OFFSET
Identifier of an invalid DIE offset in the .debug_info section.
RnglistEntries
DWARF v5 range list entry encoding values.
std::optional< uint8_t > getFixedFormByteSize(dwarf::Form Form, FormParams Params)
Get the fixed byte size for a given form.
uint8_t getDwarfOffsetByteSize(DwarfFormat Format)
The size of a reference determined by the DWARF 32/64-bit format.
LineNumberExtendedOps
Line Number Extended Opcode Encodings.
bool isCPlusPlus(SourceLanguage S)
TypeKind getArrayIndexTypeEncoding(SourceLanguage S)
StringRef AttributeValueString(uint16_t Attr, unsigned Val)
Returns the symbolic string representing Val when used as a value for attribute Attr.
@ DW_TAG_user_base
Recommended base for user tags.
CallFrameInfo
Call frame instruction encodings.
@ DW_DS_trailing_separate
@ DW_DS_trailing_overpunch
@ DW_DS_leading_overpunch
uint64_t computeTombstoneAddress(uint8_t AddressByteSize)
@ DW_FLAG_type_implementation
@ DW_ATOM_die_offset
Marker as the end of a list of atoms.
@ DW_ATOM_type_type_flags
bool isC(SourceLanguage S)
@ DW_ARANGES_VERSION
Section version number for .debug_aranges.
@ DW_PUBNAMES_VERSION
Section version number for .debug_pubnames.
@ DWARF_VERSION
Other constants.
@ DW_TAG_invalid
LLVM mock tags (see also llvm/BinaryFormat/Dwarf.def).
@ DW_LENGTH_lo_reserved
Special values for an initial length field.
@ DW_MACINFO_invalid
Macinfo type for invalid results.
@ DW_VIRTUALITY_invalid
Virtuality for invalid results.
@ DW_LENGTH_hi_reserved
Upper bound of the reserved range.
@ DW_PUBTYPES_VERSION
Section version number for .debug_pubtypes.
@ DW_LENGTH_DWARF64
Indicator of 64-bit DWARF format.
@ DWARF_VENDOR_DWARF
Identifiers we use to distinguish vendor extensions.
This is an optimization pass for GlobalISel generic memory operations.
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
Implement std::hash so that hash_code can be used in STL containers.
Describes an entry of the various gnu_pub* debug sections.
PubIndexEntryDescriptor(GDBIndexEntryKind Kind, GDBIndexEntryLinkage Linkage)
PubIndexEntryDescriptor(uint8_t Value)
PubIndexEntryDescriptor(GDBIndexEntryKind Kind)
GDBIndexEntryLinkage Linkage