LLVM 19.0.0git
Public Member Functions | List of all members
llvm::DWARFDataExtractor Class Reference

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"

Inheritance diagram for llvm::DWARFDataExtractor:
Inheritance graph
[legend]

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::DwarfFormatgetInitialLength (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::DwarfFormatgetInitialLength (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_tgetEncodedPointer (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 chargetCStr (uint64_t *OffsetPtr, Error *Err=nullptr) const
 Extract a C string from *offset_ptr.
 
const chargetCStr (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_tgetU16 (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_tgetU32 (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_tgetU64 (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_tgetOffset (Cursor &C)
 
static ErrorgetError (Cursor &C)
 

Detailed Description

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 & Destructor Documentation

◆ DWARFDataExtractor() [1/4]

llvm::DWARFDataExtractor::DWARFDataExtractor ( const DWARFObject Obj,
const DWARFSection Section,
bool  IsLittleEndian,
uint8_t  AddressSize 
)
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.

◆ DWARFDataExtractor() [2/4]

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

Constructor for cases when there are no relocations.

Definition at line 34 of file DWARFDataExtractor.h.

◆ DWARFDataExtractor() [3/4]

llvm::DWARFDataExtractor::DWARFDataExtractor ( ArrayRef< uint8_t >  Data,
bool  IsLittleEndian,
uint8_t  AddressSize 
)
inline

Definition at line 36 of file DWARFDataExtractor.h.

◆ DWARFDataExtractor() [4/4]

llvm::DWARFDataExtractor::DWARFDataExtractor ( const DWARFDataExtractor Other,
size_t  Length 
)
inline

Truncating constructor.

Definition at line 43 of file DWARFDataExtractor.h.

Member Function Documentation

◆ getEncodedPointer()

std::optional< uint64_t > DWARFDataExtractor::getEncodedPointer ( uint64_t Offset,
uint8_t  Encoding,
uint64_t  AbsPosOffset = 0 
) const

◆ getInitialLength() [1/2]

std::pair< uint64_t, dwarf::DwarfFormat > llvm::DWARFDataExtractor::getInitialLength ( Cursor C) const
inline

◆ getInitialLength() [2/2]

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().

◆ getRelocatedAddress() [1/2]

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

◆ getRelocatedAddress() [2/2]

uint64_t llvm::DWARFDataExtractor::getRelocatedAddress ( uint64_t Off,
uint64_t SecIx = nullptr 
) const
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().

◆ getRelocatedValue() [1/2]

uint64_t llvm::DWARFDataExtractor::getRelocatedValue ( Cursor C,
uint32_t  Size,
uint64_t SectionIndex = nullptr 
) const
inline

◆ getRelocatedValue() [2/2]

uint64_t DWARFDataExtractor::getRelocatedValue ( uint32_t  Size,
uint64_t Off,
uint64_t SectionIndex = nullptr,
Error Err = nullptr 
) const

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