LLVM
8.0.1
|
#include "llvm/Support/DataExtractor.h"
Public Member Functions | |
DataExtractor (StringRef Data, bool IsLittleEndian, uint8_t AddressSize) | |
Construct with a buffer that is owned by the caller. More... | |
StringRef | getData () const |
Get the data pointed to by this extractor. More... | |
bool | isLittleEndian () const |
Get the endianness for this extractor. More... | |
uint8_t | getAddressSize () const |
Get the address size for this extractor. More... | |
void | setAddressSize (uint8_t Size) |
Set the address size for this extractor. More... | |
const char * | getCStr (uint32_t *offset_ptr) const |
Extract a C string from *offset_ptr. More... | |
StringRef | getCStrRef (uint32_t *OffsetPtr) const |
Extract a C string from *OffsetPtr. More... | |
uint64_t | getUnsigned (uint32_t *offset_ptr, uint32_t byte_size) const |
Extract an unsigned integer of size byte_size from *offset_ptr. More... | |
int64_t | getSigned (uint32_t *offset_ptr, uint32_t size) const |
Extract an signed integer of size byte_size from *offset_ptr. More... | |
uint64_t | getAddress (uint32_t *offset_ptr) const |
Extract an pointer from *offset_ptr. More... | |
uint8_t | getU8 (uint32_t *offset_ptr) const |
Extract a uint8_t value from *offset_ptr. More... | |
uint8_t * | getU8 (uint32_t *offset_ptr, uint8_t *dst, uint32_t count) const |
Extract count uint8_t values from *offset_ptr. More... | |
uint16_t | getU16 (uint32_t *offset_ptr) const |
Extract a uint16_t value from *offset_ptr. More... | |
uint16_t * | getU16 (uint32_t *offset_ptr, uint16_t *dst, uint32_t count) const |
Extract count uint16_t values from *offset_ptr. More... | |
uint32_t | getU24 (uint32_t *offset_ptr) const |
Extract a 24-bit unsigned value from *offset_ptr and return it in a uint32_t. More... | |
uint32_t | getU32 (uint32_t *offset_ptr) const |
Extract a uint32_t value from *offset_ptr. More... | |
uint32_t * | getU32 (uint32_t *offset_ptr, uint32_t *dst, uint32_t count) const |
Extract count uint32_t values from *offset_ptr. More... | |
uint64_t | getU64 (uint32_t *offset_ptr) const |
Extract a uint64_t value from *offset_ptr. More... | |
uint64_t * | getU64 (uint32_t *offset_ptr, uint64_t *dst, uint32_t count) const |
Extract count uint64_t values from *offset_ptr. More... | |
int64_t | getSLEB128 (uint32_t *offset_ptr) const |
Extract a signed LEB128 value from *offset_ptr. More... | |
uint64_t | getULEB128 (uint32_t *offset_ptr) const |
Extract a unsigned LEB128 value from *offset_ptr. More... | |
bool | isValidOffset (uint32_t offset) const |
Test the validity of offset. More... | |
bool | isValidOffsetForDataOfSize (uint32_t offset, uint32_t length) const |
Test the availability of length bytes of data from offset. More... | |
bool | isValidOffsetForAddress (uint32_t offset) const |
Test the availability of enough bytes of data for a pointer from offset. More... | |
Definition at line 41 of file DataExtractor.h.
|
inline |
Construct with a buffer that is owned by the caller.
This constructor allows us to use data that is owned by the caller. The data must stay around as long as this object is valid.
Definition at line 51 of file DataExtractor.h.
|
inline |
Extract an pointer from *offset_ptr.
Extract a single pointer from the data and update the offset pointed to by offset_ptr. The size of the extracted pointer is getAddressSize(), so the address size has to be set correctly prior to extracting any pointer values.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 175 of file DataExtractor.h.
References llvm::count().
Referenced by llvm::symbolize::SymbolizableObjectFile::create(), llvm::dwarf::CFIProgram::parse(), llvm::DWARFDebugFrame::parse(), and llvm::DWARFDebugLoclists::parseOneLocationList().
|
inline |
Get the address size for this extractor.
Definition at line 59 of file DataExtractor.h.
Referenced by llvm::DWARFDebugRangeList::extract(), llvm::DWARFDataExtractor::getEncodedPointer(), llvm::DWARFDataExtractor::getRelocatedAddress(), llvm::DWARFDebugLoc::parse(), llvm::dwarf::CFIProgram::parse(), llvm::DWARFDebugLoclists::parse(), llvm::DWARFDebugLine::Prologue::parse(), llvm::DWARFDebugLine::LineTable::parse(), llvm::DWARFDebugFrame::parse(), and llvm::DWARFDebugLoc::parseOneLocationList().
Extract a C string from *offset_ptr.
Returns a pointer to a C String from the data at the offset pointed to by offset_ptr. A variable length NULL terminated C string will be extracted and the offset_ptr will be updated with the offset of the byte that follows the NULL terminator byte.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 128 of file DataExtractor.cpp.
References llvm::StringRef::data(), llvm::StringRef::find(), and llvm::StringRef::npos.
Referenced by dumpDWARFv5StringOffsetsSection(), dumpStringOffsetsSection(), llvm::AppleAcceleratorTable::equal_range(), llvm::DWARFFormValue::extractValue(), llvm::DWARFDebugNames::NameTableEntry::getString(), llvm::DWARFVerifier::handleDebugLine(), llvm::DWARFDebugMacro::parse(), llvm::DWARFDebugLine::LineTable::parse(), llvm::DWARFDebugFrame::parse(), and llvm::DWARFFormValue::skipValue().
Extract a C string from *OffsetPtr.
Returns a StringRef for the C String from the data at the offset pointed to by OffsetPtr. A variable length NULL terminated C string will be extracted and the OffsetPtr will be updated with the offset of the byte that follows the NULL terminator byte.
[in,out] | OffsetPtr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 138 of file DataExtractor.cpp.
Referenced by llvm::DWARFDebugPubTable::DWARFDebugPubTable(), and parseV2DirFileTables().
|
inline |
Get the data pointed to by this extractor.
Definition at line 55 of file DataExtractor.h.
References llvm::Data.
Referenced by llvm::DWARFGdbIndex::dump(), dumpLoclistsSection(), llvm::DWARFFormValue::extractValue(), llvm::xray::loadTrace(), llvm::DWARFExpression::iterator::operator++(), llvm::dwarf::CFIProgram::parse(), llvm::DWARFGdbIndex::parse(), llvm::DWARFDebugFrame::parse(), llvm::DWARFDebugLoc::parseOneLocationList(), llvm::DWARFDebugLoclists::parseOneLocationList(), and llvm::xray::readBinaryFormatHeader().
Extract an signed integer of size byte_size from *offset_ptr.
Extract a single signed integer value (sign extending if required) and update the offset pointed to by offset_ptr. The size of the extracted integer is specified by the byte_size argument. byte_size should have a value greater than or equal to one and less than or equal to eight since the return value is 64 bits wide. Any byte_size values less than 1 or greater than 8 will result in nothing being extracted, and zero being returned.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
[in] | size | The size in bytes of the integer to extract. |
Definition at line 114 of file DataExtractor.cpp.
References getU16(), getU32(), getU64(), getU8(), and llvm_unreachable.
Referenced by llvm::DWARFDataExtractor::getEncodedPointer(), and llvm::xray::RecordInitializer::visit().
int64_t DataExtractor::getSLEB128 | ( | uint32_t * | offset_ptr | ) | const |
Extract a signed LEB128 value from *offset_ptr.
Extracts an signed LEB128 number from this object's data starting at the offset pointed to by offset_ptr. The offset pointed to by offset_ptr will be updated with the offset of the byte following the last extracted byte.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 169 of file DataExtractor.cpp.
References llvm::StringRef::empty(), and isValidOffset().
Referenced by llvm::DWARFExpression::Operation::extract(), llvm::DWARFAbbreviationDeclaration::extract(), llvm::DWARFFormValue::extractValue(), llvm::DWARFDataExtractor::getEncodedPointer(), llvm::dwarf::CFIProgram::parse(), llvm::DWARFDebugLine::LineTable::parse(), llvm::DWARFDebugFrame::parse(), and llvm::DWARFFormValue::skipValue().
uint16_t DataExtractor::getU16 | ( | uint32_t * | offset_ptr | ) | const |
Extract a uint16_t value from *offset_ptr.
Extract a single uint16_t from the binary data at the offset pointed to by offset_ptr, and update the offset on success.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 61 of file DataExtractor.cpp.
References llvm::StringRef::data().
Referenced by llvm::DWARFDebugPubTable::DWARFDebugPubTable(), llvm::DWARFDebugArangeSet::extract(), llvm::DWARFUnitHeader::extract(), llvm::DWARFExpression::Operation::extract(), llvm::DWARFDebugNames::Header::extract(), llvm::DWARFFormValue::extractValue(), getSigned(), getUnsigned(), llvm::dwarf::CFIProgram::parse(), llvm::DWARFDebugLine::Prologue::parse(), llvm::DWARFDebugLine::LineTable::parse(), parseDWARF32StringOffsetsTableHeader(), parseDWARF64StringOffsetsTableHeader(), llvm::DWARFDebugLoc::parseOneLocationList(), llvm::DWARFDebugLoclists::parseOneLocationList(), llvm::xray::readBinaryFormatHeader(), llvm::DWARFFormValue::skipValue(), and llvm::xray::RecordInitializer::visit().
Extract count uint16_t values from *offset_ptr.
Extract count uint16_t values from the binary data at the offset pointed to by offset_ptr, and advance the offset on success. The extracted values are copied into dst.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
[out] | dst | A buffer to copy count uint16_t values into. dst must be large enough to hold all requested data. |
[in] | count | The number of uint16_t values to extract. |
Definition at line 65 of file DataExtractor.cpp.
References llvm::count(), and llvm::StringRef::data().
Extract a 24-bit unsigned value from *offset_ptr and return it in a uint32_t.
Extract 3 bytes from the binary data at the offset pointed to by offset_ptr, construct a uint32_t from them and update the offset on success.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the 3 bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 71 of file DataExtractor.cpp.
References llvm::StringRef::data(), llvm::Uint24::getAsUint32(), and llvm::sys::IsLittleEndianHost.
Referenced by llvm::DWARFFormValue::extractValue().
Extract a uint32_t value from *offset_ptr.
Extract a single uint32_t from the binary data at the offset pointed to by offset_ptr, and update the offset on success.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 78 of file DataExtractor.cpp.
References llvm::StringRef::data().
Referenced by llvm::DWARFGdbIndex::dump(), dumpStringOffsetsSection(), llvm::DWARFDebugPubTable::DWARFDebugPubTable(), llvm::AppleAcceleratorTable::equal_range(), llvm::DWARFDebugAddrTable::extract(), llvm::DWARFDebugArangeSet::extract(), llvm::DWARFUnitHeader::extract(), llvm::DWARFExpression::Operation::extract(), llvm::DWARFListTableHeader::extract(), llvm::DWARFDebugNames::Header::extract(), llvm::DWARFFormValue::extractValue(), getSigned(), getUnsigned(), llvm::dwarf::CFIProgram::parse(), llvm::DWARFUnitIndex::parse(), llvm::DWARFDebugLine::Prologue::parse(), llvm::DWARFDebugFrame::parse(), parseDWARF32StringOffsetsTableHeader(), parseDWARF64StringOffsetsTableHeader(), llvm::DWARFDebugLoclists::parseOneLocationList(), llvm::xray::readBinaryFormatHeader(), llvm::DWARFFormValue::skipValue(), llvm::AppleAcceleratorTable::ValueIterator::ValueIterator(), and llvm::xray::RecordInitializer::visit().
Extract count uint32_t values from *offset_ptr.
Extract count uint32_t values from the binary data at the offset pointed to by offset_ptr, and advance the offset on success. The extracted values are copied into dst.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
[out] | dst | A buffer to copy count uint32_t values into. dst must be large enough to hold all requested data. |
[in] | count | The number of uint32_t values to extract. |
Definition at line 82 of file DataExtractor.cpp.
References llvm::count(), and llvm::StringRef::data().
uint64_t DataExtractor::getU64 | ( | uint32_t * | offset_ptr | ) | const |
Extract a uint64_t value from *offset_ptr.
Extract a single uint64_t from the binary data at the offset pointed to by offset_ptr, and update the offset on success.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 88 of file DataExtractor.cpp.
References llvm::StringRef::data().
Referenced by llvm::DWARFGdbIndex::dump(), llvm::DWARFUnitHeader::extract(), llvm::DWARFExpression::Operation::extract(), llvm::DWARFFormValue::extractValue(), getSigned(), getUnsigned(), loadObj(), llvm::DWARFUnitIndex::parse(), llvm::DWARFDebugLine::Prologue::parse(), llvm::DWARFDebugFrame::parse(), parseDWARF64StringOffsetsTableHeader(), llvm::xray::readBinaryFormatHeader(), and llvm::xray::RecordInitializer::visit().
Extract count uint64_t values from *offset_ptr.
Extract count uint64_t values from the binary data at the offset pointed to by offset_ptr, and advance the offset on success. The extracted values are copied into dst.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
[out] | dst | A buffer to copy count uint64_t values into. dst must be large enough to hold all requested data. |
[in] | count | The number of uint64_t values to extract. |
Definition at line 92 of file DataExtractor.cpp.
References llvm::count(), and llvm::StringRef::data().
uint8_t DataExtractor::getU8 | ( | uint32_t * | offset_ptr | ) | const |
Extract a uint8_t value from *offset_ptr.
Extract a single uint8_t from the binary data at the offset pointed to by offset_ptr, and advance the offset on success.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 50 of file DataExtractor.cpp.
References llvm::StringRef::data().
Referenced by dumpDataAux(), llvm::DWARFDebugPubTable::DWARFDebugPubTable(), llvm::DWARFDebugArangeSet::extract(), llvm::DWARFUnitHeader::extract(), llvm::DWARFExpression::Operation::extract(), llvm::DWARFAbbreviationDeclaration::extract(), llvm::DWARFDebugNames::Header::extract(), llvm::DWARFFormValue::extractValue(), getSigned(), getUnsigned(), loadObj(), llvm::dwarf::CFIProgram::parse(), llvm::DWARFDebugLine::Prologue::parse(), llvm::DWARFDebugLine::LineTable::parse(), llvm::DWARFDebugFrame::parse(), llvm::DWARFDebugLoclists::parseOneLocationList(), parseV5DirFileTables(), parseV5EntryFormat(), llvm::DWARFExpression::Operation::print(), llvm::xray::FileBasedRecordProducer::produce(), llvm::DWARFFormValue::skipValue(), and llvm::xray::RecordInitializer::visit().
Extract count uint8_t values from *offset_ptr.
Extract count uint8_t values from the binary data at the offset pointed to by offset_ptr, and advance the offset on success. The extracted values are copied into dst.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
[out] | dst | A buffer to copy count uint8_t values into. dst must be large enough to hold all requested data. |
[in] | count | The number of uint8_t values to extract. |
Definition at line 55 of file DataExtractor.cpp.
References llvm::count(), and llvm::StringRef::data().
uint64_t DataExtractor::getULEB128 | ( | uint32_t * | offset_ptr | ) | const |
Extract a unsigned LEB128 value from *offset_ptr.
Extracts an unsigned LEB128 number from this object's data starting at the offset pointed to by offset_ptr. The offset pointed to by offset_ptr will be updated with the offset of the byte following the last extracted byte.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
Definition at line 148 of file DataExtractor.cpp.
References llvm::StringRef::empty(), and isValidOffset().
Referenced by llvm::DWARFDie::dump(), llvm::DWARFExpression::Operation::extract(), llvm::DWARFAbbreviationDeclaration::extract(), llvm::DWARFDebugInfoEntry::extractFast(), llvm::DWARFFormValue::extractValue(), llvm::DWARFDataExtractor::getEncodedPointer(), llvm::DWARFDebugNames::NameIndex::getEntry(), llvm::DWARFDebugMacro::parse(), llvm::dwarf::CFIProgram::parse(), llvm::DWARFDebugLine::LineTable::parse(), llvm::DWARFDebugFrame::parse(), llvm::DWARFDebugLoclists::parseOneLocationList(), parseV2DirFileTables(), parseV5EntryFormat(), llvm::object::MachOObjectFile::ReadULEB128s(), and llvm::DWARFFormValue::skipValue().
Extract an unsigned integer of size byte_size from *offset_ptr.
Extract a single unsigned integer value and update the offset pointed to by offset_ptr. The size of the extracted integer is specified by the byte_size argument. byte_size should have a value greater than or equal to one and less than or equal to eight since the return value is 64 bits wide. Any byte_size values less than 1 or greater than 8 will result in nothing being extracted, and zero being returned.
[in,out] | offset_ptr | A pointer to an offset within the data that will be advanced by the appropriate number of bytes if the value is extracted correctly. If the offset is out of bounds or there are not enough bytes to extract this value, the offset will be left unmodified. |
[in] | byte_size | The size in byte of the integer to extract. |
Definition at line 99 of file DataExtractor.cpp.
References getU16(), getU32(), getU64(), getU8(), and llvm_unreachable.
Referenced by llvm::DWARFDebugArangeSet::extract(), llvm::DWARFDataExtractor::getEncodedPointer(), llvm::DWARFDataExtractor::getRelocatedValue(), llvm::DWARFDebugLine::Prologue::parse(), and llvm::DWARFDebugFrame::parse().
|
inline |
Get the endianness for this extractor.
Definition at line 57 of file DataExtractor.h.
Referenced by dumpLoclistsSection(), llvm::xray::loadTrace(), llvm::DWARFDebugLoc::parse(), llvm::dwarf::CFIProgram::parse(), and llvm::DWARFDebugLoclists::parse().
Test the validity of offset.
Definition at line 403 of file DataExtractor.h.
References llvm::StringRef::size().
Referenced by llvm::DWARFUnitVector::addUnitsForDWOSection(), llvm::DWARFDie::dump(), dumpAddrSection(), dumpRnglistsSection(), llvm::DWARFDebugPubTable::DWARFDebugPubTable(), llvm::DWARFDebugArangeSet::extract(), llvm::DWARFDebugRangeList::extract(), llvm::DWARFUnitHeader::extract(), llvm::DWARFDebugNames::Header::extract(), llvm::DWARFDebugNames::extract(), llvm::DWARFDebugInfoEntry::extractFast(), llvm::DWARFDebugNames::NameIndex::getEntry(), llvm::DWARFDebugLine::getOrParseLineTable(), getSLEB128(), getULEB128(), llvm::DWARFVerifier::handleDebugAbbrev(), llvm::DWARFDebugMacro::parse(), llvm::DWARFDebugLoc::parse(), llvm::DWARFDebugLoclists::parse(), llvm::DWARFDebugFrame::parse(), llvm::DWARFDebugLine::SectionParser::parseNext(), llvm::DWARFDebugLine::SectionParser::SectionParser(), and llvm::DWARFDebugLine::SectionParser::skip().
Test the availability of enough bytes of data for a pointer from offset.
The size of a pointer is getAddressSize().
Definition at line 421 of file DataExtractor.h.
Referenced by llvm::symbolize::SymbolizableObjectFile::create().
|
inline |
Test the availability of length bytes of data from offset.
Definition at line 410 of file DataExtractor.h.
Referenced by llvm::DWARFDebugAddrTable::extract(), llvm::DWARFDebugArangeSet::extract(), llvm::DWARFListTableHeader::extract(), llvm::DWARFDebugNames::Header::extract(), llvm::DWARFDebugNames::NameIndex::extract(), getU(), getUs(), llvm::DWARFUnitIndex::parse(), parseDWARF32StringOffsetsTableHeader(), parseDWARF64StringOffsetsTableHeader(), llvm::DWARFDebugLoc::parseOneLocationList(), llvm::StrOffsetsContributionDescriptor::validateContributionSize(), llvm::AppleAcceleratorTable::ValueIterator::ValueIterator(), and llvm::xray::RecordInitializer::visit().
|
inline |
Set the address size for this extractor.
Definition at line 61 of file DataExtractor.h.
References Size, and llvm::size().
Referenced by llvm::DWARFListTableBase< DWARFDebugRnglist >::extract(), llvm::DWARFDebugLine::LineTable::parse(), and llvm::DWARFDebugFrame::parse().