LLVM  8.0.1
Classes | Namespaces | Macros | Enumerations | Functions | Variables
Dwarf.h File Reference

This file contains constants used for implementing Dwarf debug support. More...

#include "llvm/ADT/Optional.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/DataTypes.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/FormatVariadicDetails.h"
#include "llvm/ADT/Triple.h"
#include "llvm/BinaryFormat/Dwarf.def"
Include dependency graph for Dwarf.h:

Go to the source code of this file.

Classes

struct  llvm::dwarf::FormParams
 A helper struct providing information about the byte size of DW_FORM values that vary in size depending on the DWARF version, address byte size, or DWARF32/DWARF64. More...
 
struct  llvm::dwarf::PubIndexEntryDescriptor
 Describes an entry of the various gnu_pub* debug sections. More...
 
struct  llvm::dwarf::EnumTraits< Enum >
 
struct  llvm::dwarf::EnumTraits< Attribute >
 
struct  llvm::dwarf::EnumTraits< Form >
 
struct  llvm::dwarf::EnumTraits< Index >
 
struct  llvm::dwarf::EnumTraits< Tag >
 
struct  llvm::format_provider< Enum, typename std::enable_if< dwarf::EnumTraits< Enum >::value >::type >
 Dwarf constants format_provider. More...
 

Namespaces

 llvm
 This class represents lattice values for constants.
 
 llvm::dwarf
 

Macros

#define HANDLE_DW_TAG(ID, NAME, VERSION, VENDOR)   DW_TAG_##NAME = ID,
 
#define HANDLE_DW_AT(ID, NAME, VERSION, VENDOR)   DW_AT_##NAME = ID,
 
#define HANDLE_DW_FORM(ID, NAME, VERSION, VENDOR)   DW_FORM_##NAME = ID,
 
#define HANDLE_DW_OP(ID, NAME, VERSION, VENDOR)   DW_OP_##NAME = ID,
 
#define HANDLE_DW_ATE(ID, NAME, VERSION, VENDOR)   DW_ATE_##NAME = ID,
 
#define HANDLE_DW_END(ID, NAME)   DW_END_##NAME = ID,
 
#define HANDLE_DW_VIRTUALITY(ID, NAME)   DW_VIRTUALITY_##NAME = ID,
 
#define HANDLE_DW_DEFAULTED(ID, NAME)   DW_DEFAULTED_##NAME = ID,
 
#define HANDLE_DW_LANG(ID, NAME, LOWER_BOUND, VERSION, VENDOR)   DW_LANG_##NAME = ID,
 
#define HANDLE_DW_CC(ID, NAME)   DW_CC_##NAME = ID,
 
#define HANDLE_DW_LNS(ID, NAME)   DW_LNS_##NAME = ID,
 
#define HANDLE_DW_LNE(ID, NAME)   DW_LNE_##NAME = ID,
 
#define HANDLE_DW_LNCT(ID, NAME)   DW_LNCT_##NAME = ID,
 
#define HANDLE_DW_MACRO(ID, NAME)   DW_MACRO_##NAME = ID,
 
#define HANDLE_DW_RLE(ID, NAME)   DW_RLE_##NAME = ID,
 
#define HANDLE_DW_CFA(ID, NAME)   DW_CFA_##NAME = ID,
 
#define HANDLE_DW_CFA_PRED(ID, NAME, ARCH)   DW_CFA_##NAME = ID,
 
#define HANDLE_DW_APPLE_PROPERTY(ID, NAME)   DW_APPLE_PROPERTY_##NAME = ID,
 
#define HANDLE_DW_UT(ID, NAME)   DW_UT_##NAME = ID,
 
#define HANDLE_DW_IDX(ID, NAME)   DW_IDX_##NAME = ID,
 

Enumerations

enum  llvm::dwarf::LLVMConstants : uint32_t {
  llvm::dwarf::DW_TAG_invalid = ~0U, llvm::dwarf::DW_VIRTUALITY_invalid = ~0U, llvm::dwarf::DW_MACINFO_invalid = ~0U, llvm::dwarf::DWARF_VERSION = 4,
  llvm::dwarf::DW_PUBTYPES_VERSION = 2, llvm::dwarf::DW_PUBNAMES_VERSION = 2, llvm::dwarf::DW_ARANGES_VERSION = 2, llvm::dwarf::DWARF_VENDOR_DWARF = 0,
  llvm::dwarf::DWARF_VENDOR_APPLE = 1, llvm::dwarf::DWARF_VENDOR_BORLAND = 2, llvm::dwarf::DWARF_VENDOR_GNU = 3, llvm::dwarf::DWARF_VENDOR_GOOGLE = 4,
  llvm::dwarf::DWARF_VENDOR_LLVM = 5, llvm::dwarf::DWARF_VENDOR_MIPS = 6
}
 
enum  llvm::dwarf::DwarfFormat : uint8_t { llvm::dwarf::DWARF32, llvm::dwarf::DWARF64 }
 Constants that define the DWARF format as 32 or 64 bit. More...
 
enum  llvm::dwarf::Tag : uint16_t { llvm::dwarf::DW_TAG_lo_user = 0x4080, llvm::dwarf::DW_TAG_hi_user = 0xffff, llvm::dwarf::DW_TAG_user_base = 0x1000 }
 
enum  llvm::dwarf::Attribute : uint16_t { llvm::dwarf::DW_AT_lo_user = 0x2000, llvm::dwarf::DW_AT_hi_user = 0x3fff }
 Attributes. More...
 
enum  llvm::dwarf::Form : uint16_t { llvm::dwarf::DW_FORM_lo_user = 0x1f00 }
 
enum  llvm::dwarf::LocationAtom { llvm::dwarf::DW_OP_lo_user = 0xe0, llvm::dwarf::DW_OP_hi_user = 0xff, llvm::dwarf::DW_OP_LLVM_fragment = 0x1000 }
 
enum  llvm::dwarf::TypeKind : uint8_t { llvm::dwarf::DW_ATE_lo_user = 0x80, llvm::dwarf::DW_ATE_hi_user = 0xff }
 
enum  llvm::dwarf::DecimalSignEncoding {
  llvm::dwarf::DW_DS_unsigned = 0x01, llvm::dwarf::DW_DS_leading_overpunch = 0x02, llvm::dwarf::DW_DS_trailing_overpunch = 0x03, llvm::dwarf::DW_DS_leading_separate = 0x04,
  llvm::dwarf::DW_DS_trailing_separate = 0x05
}
 
enum  llvm::dwarf::EndianityEncoding { llvm::dwarf::DW_END_lo_user = 0x40, llvm::dwarf::DW_END_hi_user = 0xff }
 
enum  llvm::dwarf::AccessAttribute { llvm::dwarf::DW_ACCESS_public = 0x01, llvm::dwarf::DW_ACCESS_protected = 0x02, llvm::dwarf::DW_ACCESS_private = 0x03 }
 
enum  llvm::dwarf::VisibilityAttribute { llvm::dwarf::DW_VIS_local = 0x01, llvm::dwarf::DW_VIS_exported = 0x02, llvm::dwarf::DW_VIS_qualified = 0x03 }
 
enum  llvm::dwarf::VirtualityAttribute { llvm::dwarf::DW_VIRTUALITY_max = 0x02 }
 
enum  llvm::dwarf::DefaultedMemberAttribute { llvm::dwarf::DW_DEFAULTED_max = 0x02 }
 
enum  llvm::dwarf::SourceLanguage { llvm::dwarf::DW_LANG_lo_user = 0x8000, llvm::dwarf::DW_LANG_hi_user = 0xffff }
 
enum  llvm::dwarf::CaseSensitivity { llvm::dwarf::DW_ID_case_sensitive = 0x00, llvm::dwarf::DW_ID_up_case = 0x01, llvm::dwarf::DW_ID_down_case = 0x02, llvm::dwarf::DW_ID_case_insensitive = 0x03 }
 
enum  llvm::dwarf::CallingConvention { llvm::dwarf::DW_CC_lo_user = 0x40, llvm::dwarf::DW_CC_hi_user = 0xff }
 
enum  llvm::dwarf::InlineAttribute { llvm::dwarf::DW_INL_not_inlined = 0x00, llvm::dwarf::DW_INL_inlined = 0x01, llvm::dwarf::DW_INL_declared_not_inlined = 0x02, llvm::dwarf::DW_INL_declared_inlined = 0x03 }
 
enum  llvm::dwarf::ArrayDimensionOrdering { llvm::dwarf::DW_ORD_row_major = 0x00, llvm::dwarf::DW_ORD_col_major = 0x01 }
 
enum  llvm::dwarf::DiscriminantList { llvm::dwarf::DW_DSC_label = 0x00, llvm::dwarf::DW_DSC_range = 0x01 }
 
enum  llvm::dwarf::LineNumberOps : uint8_t
 Line Number Standard Opcode Encodings. More...
 
enum  llvm::dwarf::LineNumberExtendedOps { llvm::dwarf::DW_LNE_lo_user = 0x80, llvm::dwarf::DW_LNE_hi_user = 0xff }
 Line Number Extended Opcode Encodings. More...
 
enum  llvm::dwarf::LineNumberEntryFormat { llvm::dwarf::DW_LNCT_lo_user = 0x2000, llvm::dwarf::DW_LNCT_hi_user = 0x3fff }
 
enum  llvm::dwarf::MacinfoRecordType {
  llvm::dwarf::DW_MACINFO_define = 0x01, llvm::dwarf::DW_MACINFO_undef = 0x02, llvm::dwarf::DW_MACINFO_start_file = 0x03, llvm::dwarf::DW_MACINFO_end_file = 0x04,
  llvm::dwarf::DW_MACINFO_vendor_ext = 0xff
}
 
enum  llvm::dwarf::MacroEntryType { llvm::dwarf::DW_MACRO_lo_user = 0xe0, llvm::dwarf::DW_MACRO_hi_user = 0xff }
 DWARF v5 macro information entry type encodings. More...
 
enum  llvm::dwarf::RangeListEntries
 DWARF v5 range list entry encoding values. More...
 
enum  llvm::dwarf::CallFrameInfo { llvm::dwarf::DW_CFA_extended = 0x00, llvm::dwarf::DW_CFA_lo_user = 0x1c, llvm::dwarf::DW_CFA_hi_user = 0x3f }
 Call frame instruction encodings. More...
 
enum  llvm::dwarf::Constants {
  llvm::dwarf::DW_CHILDREN_no = 0x00, llvm::dwarf::DW_CHILDREN_yes = 0x01, llvm::dwarf::DW_EH_PE_absptr = 0x00, llvm::dwarf::DW_EH_PE_omit = 0xff,
  llvm::dwarf::DW_EH_PE_uleb128 = 0x01, llvm::dwarf::DW_EH_PE_udata2 = 0x02, llvm::dwarf::DW_EH_PE_udata4 = 0x03, llvm::dwarf::DW_EH_PE_udata8 = 0x04,
  llvm::dwarf::DW_EH_PE_sleb128 = 0x09, llvm::dwarf::DW_EH_PE_sdata2 = 0x0A, llvm::dwarf::DW_EH_PE_sdata4 = 0x0B, llvm::dwarf::DW_EH_PE_sdata8 = 0x0C,
  llvm::dwarf::DW_EH_PE_signed = 0x08, llvm::dwarf::DW_EH_PE_pcrel = 0x10, llvm::dwarf::DW_EH_PE_textrel = 0x20, llvm::dwarf::DW_EH_PE_datarel = 0x30,
  llvm::dwarf::DW_EH_PE_funcrel = 0x40, llvm::dwarf::DW_EH_PE_aligned = 0x50, llvm::dwarf::DW_EH_PE_indirect = 0x80
}
 
enum  llvm::dwarf::LocationListEntry : unsigned char {
  llvm::dwarf::DW_LLE_end_of_list = 0x00, llvm::dwarf::DW_LLE_base_addressx = 0x01, llvm::dwarf::DW_LLE_startx_endx = 0x02, llvm::dwarf::DW_LLE_startx_length = 0x03,
  llvm::dwarf::DW_LLE_offset_pair = 0x04, llvm::dwarf::DW_LLE_default_location = 0x05, llvm::dwarf::DW_LLE_base_address = 0x06, llvm::dwarf::DW_LLE_start_end = 0x07,
  llvm::dwarf::DW_LLE_start_length = 0x08
}
 Constants for location lists in DWARF v5. More...
 
enum  llvm::dwarf::ApplePropertyAttributes
 Constants for the DW_APPLE_PROPERTY_attributes attribute. More...
 
enum  llvm::dwarf::UnitType : unsigned char { llvm::dwarf::DW_UT_lo_user = 0x80, llvm::dwarf::DW_UT_hi_user = 0xff }
 Constants for unit types in DWARF v5. More...
 
enum  llvm::dwarf::Index { llvm::dwarf::DW_IDX_lo_user = 0x2000, llvm::dwarf::DW_IDX_hi_user = 0x3fff }
 
enum  llvm::dwarf::AcceleratorTable {
  llvm::dwarf::DW_ATOM_null = 0u, llvm::dwarf::DW_ATOM_die_offset = 1u, llvm::dwarf::DW_ATOM_cu_offset = 2u, llvm::dwarf::DW_ATOM_die_tag = 3u,
  llvm::dwarf::DW_ATOM_type_flags = 4u, llvm::dwarf::DW_ATOM_type_type_flags = 5u, llvm::dwarf::DW_ATOM_qual_name_hash = 6u, llvm::dwarf::DW_FLAG_type_implementation = 2u,
  llvm::dwarf::DW_hash_function_djb = 0u
}
 
enum  llvm::dwarf::GDBIndexEntryKind {
  llvm::dwarf::GIEK_NONE, llvm::dwarf::GIEK_TYPE, llvm::dwarf::GIEK_VARIABLE, llvm::dwarf::GIEK_FUNCTION,
  llvm::dwarf::GIEK_OTHER, llvm::dwarf::GIEK_UNUSED5, llvm::dwarf::GIEK_UNUSED6, llvm::dwarf::GIEK_UNUSED7
}
 
enum  llvm::dwarf::GDBIndexEntryLinkage { llvm::dwarf::GIEL_EXTERNAL, llvm::dwarf::GIEL_STATIC }
 

Functions

bool llvm::dwarf::isType (Tag T)
 
bool llvm::dwarf::isUnitType (uint8_t UnitType)
 
bool llvm::dwarf::isUnitType (dwarf::Tag T)
 
StringRef llvm::dwarf::TagString (unsigned Tag)
 
StringRef llvm::dwarf::ChildrenString (unsigned Children)
 
StringRef llvm::dwarf::AttributeString (unsigned Attribute)
 
StringRef llvm::dwarf::FormEncodingString (unsigned Encoding)
 
StringRef llvm::dwarf::OperationEncodingString (unsigned Encoding)
 
StringRef llvm::dwarf::AttributeEncodingString (unsigned Encoding)
 
StringRef llvm::dwarf::DecimalSignString (unsigned Sign)
 
StringRef llvm::dwarf::EndianityString (unsigned Endian)
 
StringRef llvm::dwarf::AccessibilityString (unsigned Access)
 
StringRef llvm::dwarf::VisibilityString (unsigned Visibility)
 
StringRef llvm::dwarf::VirtualityString (unsigned Virtuality)
 
StringRef llvm::dwarf::LanguageString (unsigned Language)
 
StringRef llvm::dwarf::CaseString (unsigned Case)
 
StringRef llvm::dwarf::ConventionString (unsigned Convention)
 
StringRef llvm::dwarf::InlineCodeString (unsigned Code)
 
StringRef llvm::dwarf::ArrayOrderString (unsigned Order)
 
StringRef llvm::dwarf::LNStandardString (unsigned Standard)
 
StringRef llvm::dwarf::LNExtendedString (unsigned Encoding)
 
StringRef llvm::dwarf::MacinfoString (unsigned Encoding)
 
StringRef llvm::dwarf::RangeListEncodingString (unsigned Encoding)
 
StringRef llvm::dwarf::CallFrameString (unsigned Encoding, Triple::ArchType Arch)
 
StringRef llvm::dwarf::ApplePropertyString (unsigned)
 
StringRef llvm::dwarf::UnitTypeString (unsigned)
 
StringRef llvm::dwarf::AtomTypeString (unsigned Atom)
 
StringRef llvm::dwarf::GDBIndexEntryKindString (GDBIndexEntryKind Kind)
 
StringRef llvm::dwarf::GDBIndexEntryLinkageString (GDBIndexEntryLinkage Linkage)
 
StringRef llvm::dwarf::IndexString (unsigned Idx)
 
unsigned llvm::dwarf::getTag (StringRef TagString)
 
unsigned llvm::dwarf::getOperationEncoding (StringRef OperationEncodingString)
 
unsigned llvm::dwarf::getVirtuality (StringRef VirtualityString)
 
unsigned llvm::dwarf::getLanguage (StringRef LanguageString)
 
unsigned llvm::dwarf::getCallingConvention (StringRef LanguageString)
 
unsigned llvm::dwarf::getAttributeEncoding (StringRef EncodingString)
 
unsigned llvm::dwarf::getMacinfo (StringRef MacinfoString)
 
unsigned llvm::dwarf::TagVersion (Tag T)
 
unsigned llvm::dwarf::AttributeVersion (Attribute A)
 
unsigned llvm::dwarf::FormVersion (Form F)
 
unsigned llvm::dwarf::OperationVersion (LocationAtom O)
 
unsigned llvm::dwarf::AttributeEncodingVersion (TypeKind E)
 
unsigned llvm::dwarf::LanguageVersion (SourceLanguage L)
 
unsigned llvm::dwarf::TagVendor (Tag T)
 
unsigned llvm::dwarf::AttributeVendor (Attribute A)
 
unsigned llvm::dwarf::FormVendor (Form F)
 
unsigned llvm::dwarf::OperationVendor (LocationAtom O)
 
unsigned llvm::dwarf::AttributeEncodingVendor (TypeKind E)
 
unsigned llvm::dwarf::LanguageVendor (SourceLanguage L)
 
Optional< unsignedllvm::dwarf::LanguageLowerBound (SourceLanguage L)
 
Optional< uint8_t > llvm::dwarf::getFixedFormByteSize (dwarf::Form Form, FormParams Params)
 Get the fixed byte size for a given form. More...
 
bool llvm::dwarf::isValidFormForVersion (Form F, unsigned Version, bool ExtensionsOk=true)
 Tells whether the specified form is defined in the specified version, or is an extension if extensions are allowed. More...
 
StringRef llvm::dwarf::AttributeValueString (uint16_t Attr, unsigned Val)
 Returns the symbolic string representing Val when used as a value for attribute Attr. More...
 
StringRef llvm::dwarf::AtomValueString (uint16_t Atom, unsigned Val)
 Returns the symbolic string representing Val when used as a value for atom Atom. More...
 

Variables

const uint32_t llvm::dwarf::DW_INVALID_OFFSET = UINT32_MAX
 Identifier of an invalid DIE offset in the .debug_info section. More...
 
const uint32_t llvm::dwarf::DW_CIE_ID = UINT32_MAX
 Special ID values that distinguish a CIE from a FDE in DWARF CFI. More...
 
const uint64_t llvm::dwarf::DW64_CIE_ID = UINT64_MAX
 

Detailed Description

This file contains constants used for implementing Dwarf debug support.

For details on the Dwarf specfication see the latest DWARF Debugging Information Format standard document on http://www.dwarfstd.org. This file often includes support for non-released standard features.

Definition in file Dwarf.h.

Macro Definition Documentation

◆ HANDLE_DW_APPLE_PROPERTY

#define HANDLE_DW_APPLE_PROPERTY (   ID,
  NAME 
)    DW_APPLE_PROPERTY_##NAME = ID,

Definition at line 325 of file Dwarf.h.

◆ HANDLE_DW_AT

#define HANDLE_DW_AT (   ID,
  NAME,
  VERSION,
  VENDOR 
)    DW_AT_##NAME = ID,

Definition at line 116 of file Dwarf.h.

◆ HANDLE_DW_ATE

#define HANDLE_DW_ATE (   ID,
  NAME,
  VERSION,
  VENDOR 
)    DW_ATE_##NAME = ID,

Definition at line 137 of file Dwarf.h.

◆ HANDLE_DW_CC

#define HANDLE_DW_CC (   ID,
  NAME 
)    DW_CC_##NAME = ID,

Definition at line 204 of file Dwarf.h.

◆ HANDLE_DW_CFA

#define HANDLE_DW_CFA (   ID,
  NAME 
)    DW_CFA_##NAME = ID,

Definition at line 276 of file Dwarf.h.

◆ HANDLE_DW_CFA_PRED

#define HANDLE_DW_CFA_PRED (   ID,
  NAME,
  ARCH 
)    DW_CFA_##NAME = ID,

Definition at line 277 of file Dwarf.h.

◆ HANDLE_DW_DEFAULTED

#define HANDLE_DW_DEFAULTED (   ID,
  NAME 
)    DW_DEFAULTED_##NAME = ID,

Definition at line 181 of file Dwarf.h.

◆ HANDLE_DW_END

#define HANDLE_DW_END (   ID,
  NAME 
)    DW_END_##NAME = ID,

Definition at line 154 of file Dwarf.h.

◆ HANDLE_DW_FORM

#define HANDLE_DW_FORM (   ID,
  NAME,
  VERSION,
  VENDOR 
)    DW_FORM_##NAME = ID,

Definition at line 123 of file Dwarf.h.

◆ HANDLE_DW_IDX

#define HANDLE_DW_IDX (   ID,
  NAME 
)    DW_IDX_##NAME = ID,

Definition at line 338 of file Dwarf.h.

◆ HANDLE_DW_LANG

#define HANDLE_DW_LANG (   ID,
  NAME,
  LOWER_BOUND,
  VERSION,
  VENDOR 
)    DW_LANG_##NAME = ID,

Definition at line 187 of file Dwarf.h.

◆ HANDLE_DW_LNCT

#define HANDLE_DW_LNCT (   ID,
  NAME 
)    DW_LNCT_##NAME = ID,

Definition at line 245 of file Dwarf.h.

◆ HANDLE_DW_LNE

#define HANDLE_DW_LNE (   ID,
  NAME 
)    DW_LNE_##NAME = ID,

Definition at line 238 of file Dwarf.h.

◆ HANDLE_DW_LNS

#define HANDLE_DW_LNS (   ID,
  NAME 
)    DW_LNS_##NAME = ID,

Definition at line 232 of file Dwarf.h.

◆ HANDLE_DW_MACRO

#define HANDLE_DW_MACRO (   ID,
  NAME 
)    DW_MACRO_##NAME = ID,

Definition at line 262 of file Dwarf.h.

◆ HANDLE_DW_OP

#define HANDLE_DW_OP (   ID,
  NAME,
  VERSION,
  VENDOR 
)    DW_OP_##NAME = ID,

Definition at line 129 of file Dwarf.h.

◆ HANDLE_DW_RLE

#define HANDLE_DW_RLE (   ID,
  NAME 
)    DW_RLE_##NAME = ID,

Definition at line 270 of file Dwarf.h.

◆ HANDLE_DW_TAG

#define HANDLE_DW_TAG (   ID,
  NAME,
  VERSION,
  VENDOR 
)    DW_TAG_##NAME = ID,

Definition at line 79 of file Dwarf.h.

◆ HANDLE_DW_UT

#define HANDLE_DW_UT (   ID,
  NAME 
)    DW_UT_##NAME = ID,

Definition at line 331 of file Dwarf.h.

◆ HANDLE_DW_VIRTUALITY

#define HANDLE_DW_VIRTUALITY (   ID,
  NAME 
)    DW_VIRTUALITY_##NAME = ID,

Definition at line 175 of file Dwarf.h.