NFC: DataExtractor: use decodeULEB128 to implement getULEB128

llvm-svn: 364230
This commit is contained in:
David Blaikie 2019-06-24 20:43:36 +00:00
parent 11cfa92a19
commit 8242f35d50
1 changed files with 11 additions and 17 deletions

View File

@ -10,6 +10,7 @@
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/SwapByteOrder.h"
#include "llvm/Support/LEB128.h"
using namespace llvm;
template <typename T>
@ -145,24 +146,17 @@ StringRef DataExtractor::getCStrRef(uint32_t *OffsetPtr) const {
}
uint64_t DataExtractor::getULEB128(uint32_t *offset_ptr) const {
uint64_t result = 0;
if (Data.empty())
assert(*offset_ptr <= Data.size());
const char *error;
unsigned bytes_read;
uint64_t result = decodeULEB128(
reinterpret_cast<const uint8_t *>(Data.data() + *offset_ptr), &bytes_read,
reinterpret_cast<const uint8_t *>(Data.data() + Data.size()), &error);
if (error)
return 0;
unsigned shift = 0;
uint32_t offset = *offset_ptr;
uint8_t byte = 0;
while (isValidOffset(offset)) {
byte = Data[offset++];
result |= uint64_t(byte & 0x7f) << shift;
shift += 7;
if ((byte & 0x80) == 0) {
*offset_ptr = offset;
return result;
}
}
return 0;
*offset_ptr += bytes_read;
return result;
}
int64_t DataExtractor::getSLEB128(uint32_t *offset_ptr) const {