LLVM: llvm::DWARFDataExtractorBase< Relocator > Class Template Reference (original) (raw)

A DataExtractor suitable use for parsing dwarf from memory. More...

#include "[llvm/DebugInfo/DWARF/LowLevel/DWARFDataExtractorSimple.h](DWARFDataExtractorSimple%5F8h%5Fsource.html)"

Public Member Functions
DWARFDataExtractorBase (StringRef Data, bool IsLittleEndian, uint8_t AddressSize)
DWARFDataExtractorBase (ArrayRef< uint8_t > Data, bool IsLittleEndian, uint8_t AddressSize)
DWARFDataExtractorBase (const DWARFDataExtractorBase &Other, size_t Length)
Truncating constructor.
uint64_t getRelocatedValue (uint32_t Size, uint64_t *Off, uint64_t *SectionIndex=nullptr, Error *Err=nullptr) const
Extracts a value and returns it as adjusted by the Relocator.
uint64_t getRelocatedValue (Cursor &C, uint32_t Size, uint64_t *SectionIndex=nullptr) const
uint64_t getRelocatedAddress (uint64_t *Off, uint64_t *SecIx=nullptr) const
Extracts an address-sized value.
uint64_t getRelocatedAddress (Cursor &C, uint64_t *SecIx=nullptr) const
std::pair< uint64_t, dwarf::DwarfFormat > getInitialLength (uint64_t *Off, Error *Err=nullptr) const
Extracts the DWARF "initial length" field, which can either be a 32-bit value smaller than 0xfffffff0, or the value 0xffffffff followed by a 64-bit length.
std::pair< uint64_t, dwarf::DwarfFormat > getInitialLength (Cursor &C) const
std::optional< uint64_t > getEncodedPointer (uint64_t *Offset, uint8_t Encoding, uint64_t PCRelOffset) const
Extracts a DWARF-encoded pointer in Offset using Encoding.
Public Member Functions inherited from llvm::DataExtractor
DataExtractor (StringRef Data, bool IsLittleEndian, uint8_t AddressSize)
Construct with a buffer that is owned by the caller.
DataExtractor (ArrayRef< uint8_t > Data, bool IsLittleEndian, uint8_t AddressSize)
StringRef getData () const
Get the data pointed to by this extractor.
bool isLittleEndian () const
Get the endianness for this extractor.
uint8_t getAddressSize () const
Get the address size for this extractor.
void setAddressSize (uint8_t Size)
Set the address size for this extractor.
const char * getCStr (uint64_t *OffsetPtr, Error *Err=nullptr) const
Extract a C string from *offset_ptr.
const char * getCStr (Cursor &C) const
Extract a C string from the location given by the cursor.
LLVM_ABI StringRef getCStrRef (uint64_t *OffsetPtr, Error *Err=nullptr) const
Extract a C string from *offset_ptr.
StringRef getCStrRef (Cursor &C) const
Extract a C string (as a StringRef) from the location given by the cursor.
LLVM_ABI StringRef getFixedLengthString (uint64_t *OffsetPtr, uint64_t Length, StringRef TrimChars={"\0", 1}) const
Extract a fixed length string from *OffsetPtr and consume Length bytes.
LLVM_ABI StringRef getBytes (uint64_t *OffsetPtr, uint64_t Length, Error *Err=nullptr) const
Extract a fixed number of bytes from the specified offset.
StringRef getBytes (Cursor &C, uint64_t Length)
Extract a fixed number of bytes from the location given by the cursor.
LLVM_ABI uint64_t getUnsigned (uint64_t *offset_ptr, uint32_t byte_size, Error *Err=nullptr) const
Extract an unsigned integer of size byte_size from *offset_ptr.
uint64_t getUnsigned (Cursor &C, uint32_t Size) const
Extract an unsigned integer of the given size from the location given by the cursor.
LLVM_ABI int64_t getSigned (uint64_t *offset_ptr, uint32_t size) const
Extract an signed integer of size byte_size from *offset_ptr.
uint64_t getAddress (uint64_t *offset_ptr) const
Extract an pointer from *offset_ptr.
uint64_t getAddress (Cursor &C) const
Extract a pointer-sized unsigned integer from the location given by the cursor.
LLVM_ABI uint8_t getU8 (uint64_t *offset_ptr, Error *Err=nullptr) const
Extract a uint8_t value from *offset_ptr.
uint8_t getU8 (Cursor &C) const
Extract a single uint8_t value from the location given by the cursor.
LLVM_ABI uint8_t * getU8 (uint64_t *offset_ptr, uint8_t *dst, uint32_t count) const
Extract count uint8_t values from *offset_ptr.
LLVM_ABI uint8_t * getU8 (Cursor &C, uint8_t *Dst, uint32_t Count) const
Extract Count uint8_t values from the location given by the cursor and store them into the destination buffer.
void getU8 (Cursor &C, SmallVectorImpl< uint8_t > &Dst, uint32_t Count) const
Extract Count uint8_t values from the location given by the cursor and store them into the destination vector.
int8_t getS8 (uint64_t *OffsetPtr, Error *Err=nullptr) const
Extract a int8_t value from *OffsetPtr.
int8_t getS8 (Cursor &C) const
Extract a int8_t value from *OffsetPtr.
LLVM_ABI uint16_t getU16 (uint64_t *offset_ptr, Error *Err=nullptr) const
Extract a uint16_t value from *offset_ptr.
uint16_t getU16 (Cursor &C) const
Extract a single uint16_t value from the location given by the cursor.
LLVM_ABI uint16_t * getU16 (uint64_t *offset_ptr, uint16_t *dst, uint32_t count) const
Extract count uint16_t values from *offset_ptr.
int16_t getS16 (uint64_t *OffsetPtr, Error *Err=nullptr) const
Extract a int16_t value from *OffsetPtr.
int16_t getS16 (Cursor &C) const
Extract a int16_t value from *OffsetPtr.
LLVM_ABI uint32_t getU24 (uint64_t *OffsetPtr, Error *Err=nullptr) const
Extract a 24-bit unsigned value from *offset_ptr and return it in a uint32_t.
uint32_t getU24 (Cursor &C) const
Extract a single 24-bit unsigned value from the location given by the cursor.
LLVM_ABI uint32_t getU32 (uint64_t *offset_ptr, Error *Err=nullptr) const
Extract a uint32_t value from *offset_ptr.
uint32_t getU32 (Cursor &C) const
Extract a single uint32_t value from the location given by the cursor.
LLVM_ABI uint32_t * getU32 (uint64_t *offset_ptr, uint32_t *dst, uint32_t count) const
Extract count uint32_t values from *offset_ptr.
int32_t getS32 (uint64_t *OffsetPtr, Error *Err=nullptr) const
Extract a int32_t value from *OffsetPtr.
int32_t getS32 (Cursor &C) const
Extract a int32_t value from *OffsetPtr.
LLVM_ABI uint64_t getU64 (uint64_t *offset_ptr, Error *Err=nullptr) const
Extract a uint64_t value from *offset_ptr.
uint64_t getU64 (Cursor &C) const
Extract a single uint64_t value from the location given by the cursor.
LLVM_ABI uint64_t * getU64 (uint64_t *offset_ptr, uint64_t *dst, uint32_t count) const
Extract count uint64_t values from *offset_ptr.
int64_t getS64 (uint64_t *OffsetPtr, Error *Err=nullptr) const
Extract a int64_t value from *OffsetPtr.
int64_t getS64 (Cursor &C) const
Extract a int64_t value from *OffsetPtr.
LLVM_ABI int64_t getSLEB128 (uint64_t *OffsetPtr, Error *Err=nullptr) const
Extract a signed LEB128 value from *offset_ptr.
int64_t getSLEB128 (Cursor &C) const
Extract an signed LEB128 value from the location given by the cursor.
LLVM_ABI uint64_t getULEB128 (uint64_t *offset_ptr, llvm::Error *Err=nullptr) const
Extract a unsigned LEB128 value from *offset_ptr.
uint64_t getULEB128 (Cursor &C) const
Extract an unsigned LEB128 value from the location given by the cursor.
LLVM_ABI void skip (Cursor &C, uint64_t Length) const
Advance the Cursor position by the given number of bytes.
bool eof (const Cursor &C) const
Return true iff the cursor is at the end of the buffer, regardless of the error state of the cursor.
bool isValidOffset (uint64_t offset) const
Test the validity of offset.
bool isValidOffsetForDataOfSize (uint64_t offset, uint64_t length) const
Test the availability of length bytes of data from offset.
bool isValidOffsetForAddress (uint64_t offset) const
Test the availability of enough bytes of data for a pointer from offset.
size_t size () const
Return the number of bytes in the underlying buffer.

template
class llvm::DWARFDataExtractorBase< Relocator >

A DataExtractor suitable use for parsing dwarf from memory.

Clients use Relocator::getRelocatedValueImpl to relocate values as appropriate.

Definition at line 24 of file DWARFDataExtractorSimple.h.

template

DWARFDataExtractorBase() [2/3]

template

DWARFDataExtractorBase() [3/3]

template

getEncodedPointer()

template

Extracts a DWARF-encoded pointer in Offset using Encoding.

There is a DWARF encoding that uses a PC-relative adjustment. For these values, AbsPosOffset is used to fix them, which should reflect the absolute address of this pointer.

Definition at line 109 of file DWARFDataExtractorSimple.h.

References llvm::dwarf::DW_EH_PE_absptr, llvm::dwarf::DW_EH_PE_aligned, llvm::dwarf::DW_EH_PE_datarel, llvm::dwarf::DW_EH_PE_funcrel, llvm::dwarf::DW_EH_PE_omit, llvm::dwarf::DW_EH_PE_pcrel, llvm::dwarf::DW_EH_PE_sdata2, llvm::dwarf::DW_EH_PE_sdata4, llvm::dwarf::DW_EH_PE_sdata8, llvm::dwarf::DW_EH_PE_sleb128, llvm::dwarf::DW_EH_PE_textrel, llvm::dwarf::DW_EH_PE_udata2, llvm::dwarf::DW_EH_PE_udata4, llvm::dwarf::DW_EH_PE_udata8, llvm::dwarf::DW_EH_PE_uleb128, llvm::DataExtractor::getAddressSize(), getRelocatedValue(), llvm::DataExtractor::getSigned(), llvm::DataExtractor::getSLEB128(), llvm::DataExtractor::getULEB128(), llvm::DataExtractor::getUnsigned(), llvm::Offset, and llvm::SignExtend64().

getInitialLength() [1/2]

template

getInitialLength() [2/2]

template

Extracts the DWARF "initial length" field, which can either be a 32-bit value smaller than 0xfffffff0, or the value 0xffffffff followed by a 64-bit length.

Returns the actual length, and the DWARF format which is encoded in the field. In case of errors, it returns {0, DWARF32} and leaves the offset unchanged.

Definition at line 70 of file DWARFDataExtractorSimple.h.

References llvm::CallingConv::C, llvm::cantFail(), llvm::consumeError(), llvm::createStringError(), llvm::dwarf::DW_LENGTH_DWARF64, llvm::dwarf::DW_LENGTH_lo_reserved, llvm::dwarf::DWARF32, llvm::dwarf::DWARF64, llvm::Format, getRelocatedValue(), and llvm::Length.

Referenced by llvm::DWARFDebugNames::Header::extract(), llvm::DWARFUnitHeader::extract(), getInitialLength(), llvm::DWARFVerifier::handleDebugStrOffsets(), llvm::DWARFDebugLine::Prologue::parse(), and llvm::parseInfoSectionUnitHeader().

getRelocatedAddress() [1/2]

template

getRelocatedAddress() [2/2]

template

getRelocatedValue() [1/2]

template

getRelocatedValue() [2/2]

template


The documentation for this class was generated from the following file: