LLVM: llvm::DWARFDataExtractor Class Reference (original) (raw)

A DataExtractor (typically for an in-memory copy of an object-file section) plus a relocation map for that section, if there is one. More...

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

Public Member Functions
DWARFDataExtractor (const DWARFObject &Obj, const DWARFSection &Section, bool IsLittleEndian, uint8_t AddressSize)
Constructor for the normal case of extracting data from a DWARF section.
DWARFDataExtractor (StringRef Data, bool IsLittleEndian, uint8_t AddressSize)
Constructor for cases when there are no relocations.
DWARFDataExtractor (ArrayRef< uint8_t > Data, bool IsLittleEndian, uint8_t AddressSize)
DWARFDataExtractor (const DWARFDataExtractor &Other, size_t Length)
Truncating constructor.
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
uint64_t getRelocatedValue (uint32_t Size, uint64_t *Off, uint64_t *SectionIndex=nullptr, Error *Err=nullptr) const
Extracts a value and applies a relocation to the result if one exists for the given offset.
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 and applies a relocation to the result if one exists for the given offset.
uint64_t getRelocatedAddress (Cursor &C, uint64_t *SecIx=nullptr) const
std::optional< uint64_t > getEncodedPointer (uint64_t *Offset, uint8_t Encoding, uint64_t AbsPosOffset=0) 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.
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.
StringRef getFixedLengthString (uint64_t *OffsetPtr, uint64_t Length, StringRef TrimChars={"\0", 1}) const
Extract a fixed length string from *OffsetPtr and consume Length bytes.
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.
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.
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.
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.
uint8_t * getU8 (uint64_t *offset_ptr, uint8_t *dst, uint32_t count) const
Extract count uint8_t values from *offset_ptr.
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.
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.
uint16_t * getU16 (uint64_t *offset_ptr, uint16_t *dst, uint32_t count) const
Extract count uint16_t values from *offset_ptr.
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.
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.
uint32_t * getU32 (uint64_t *offset_ptr, uint32_t *dst, uint32_t count) const
Extract count uint32_t values from *offset_ptr.
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.
uint64_t * getU64 (uint64_t *offset_ptr, uint64_t *dst, uint32_t count) const
Extract count uint64_t values from *offset_ptr.
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.
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.
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.
Additional Inherited Members
- Static Protected Member Functions inherited from llvm::DataExtractor
static uint64_t & getOffset (Cursor &C)
static Error & getError (Cursor &C)

A DataExtractor (typically for an in-memory copy of an object-file section) plus a relocation map for that section, if there is one.

Definition at line 21 of file DWARFDataExtractor.h.

Constructor for the normal case of extracting data from a DWARF section.

The DWARFSection's lifetime must be at least as long as the extractor's.

Definition at line 28 of file DWARFDataExtractor.h.

DWARFDataExtractor() [2/4]

llvm::DWARFDataExtractor::DWARFDataExtractor ( StringRef Data, bool IsLittleEndian, uint8_t AddressSize ) inline

DWARFDataExtractor() [3/4]

DWARFDataExtractor() [4/4]

getEncodedPointer()

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 72 of file DWARFDataExtractor.cpp.

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(), and llvm::Offset.

getInitialLength() [1/2]

getInitialLength() [2/2]

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 17 of file DWARFDataExtractor.cpp.

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(), llvm::invalid_argument, 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]

uint64_t llvm::DWARFDataExtractor::getRelocatedAddress ( Cursor & C, uint64_t * SecIx = nullptr ) const inline

getRelocatedAddress() [2/2]

getRelocatedValue() [1/2]

getRelocatedValue() [2/2]

Extracts a value and applies a relocation to the result if one exists for the given offset.

Definition at line 48 of file DWARFDataExtractor.cpp.

References llvm::DWARFObject::find(), llvm::DataExtractor::getUnsigned(), llvm::object::resolveRelocation(), Size, and llvm::object::SectionedAddress::UndefSection.

Referenced by dumpStringOffsetsSection(), llvm::DWARFUnitHeader::extract(), llvm::DWARFDebugPubTable::extract(), getEncodedPointer(), getInitialLength(), getRelocatedAddress(), getRelocatedValue(), llvm::DWARFDebugLine::LineTable::parse(), and llvm::DWARFDebugLine::Prologue::parse().


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