LLVM 20.0.0git
|
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"
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.
|
inline |
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.
|
inline |
Constructor for cases when there are no relocations.
Definition at line 34 of file DWARFDataExtractor.h.
|
inline |
Definition at line 36 of file DWARFDataExtractor.h.
|
inline |
Truncating constructor.
Definition at line 43 of file DWARFDataExtractor.h.
std::optional< uint64_t > DWARFDataExtractor::getEncodedPointer | ( | uint64_t * | Offset, |
uint8_t | Encoding, | ||
uint64_t | AbsPosOffset = 0 |
||
) | const |
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.
|
inline |
Definition at line 56 of file DWARFDataExtractor.h.
References llvm::CallingConv::C, llvm::DataExtractor::getError(), getInitialLength(), and llvm::DataExtractor::getOffset().
std::pair< uint64_t, dwarf::DwarfFormat > DWARFDataExtractor::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.
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(), llvm::DWARFDebugArangeSet::extract(), getInitialLength(), llvm::DWARFVerifier::handleDebugStrOffsets(), llvm::DWARFDebugLine::Prologue::parse(), and llvm::parseInfoSectionUnitHeader().
|
inline |
Definition at line 75 of file DWARFDataExtractor.h.
References llvm::CallingConv::C, llvm::DataExtractor::getAddressSize(), llvm::DataExtractor::getError(), llvm::DataExtractor::getOffset(), and getRelocatedValue().
|
inline |
Extracts an address-sized value and applies a relocation to the result if one exists for the given offset.
Definition at line 72 of file DWARFDataExtractor.h.
References llvm::DataExtractor::getAddressSize(), and getRelocatedValue().
Referenced by llvm::DWARFDebugRangeList::extract(), llvm::DWARFDebugLine::LineTable::parse(), llvm::DWARFDebugLoc::visitLocationList(), and llvm::DWARFDebugLoclists::visitLocationList().
|
inline |
Definition at line 65 of file DWARFDataExtractor.h.
References llvm::CallingConv::C, llvm::DataExtractor::getError(), llvm::DataExtractor::getOffset(), getRelocatedValue(), and Size.
uint64_t DWARFDataExtractor::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.
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().