@@ -91,12 +91,14 @@ static Error initializeReader(InstrProfReader &Reader) {
91
91
// / associated endian format to read the binary ids correctly.
92
92
static Error
93
93
readBinaryIdsInternal (const MemoryBuffer &DataBuffer,
94
- const uint64_t BinaryIdsSize,
95
- const uint8_t *BinaryIdsStart,
94
+ ArrayRef<uint8_t > BinaryIdsBuffer,
96
95
std::vector<llvm::object::BuildID> &BinaryIds,
97
96
const llvm::endianness Endian) {
98
97
using namespace support ;
99
98
99
+ const uint64_t BinaryIdsSize = BinaryIdsBuffer.size ();
100
+ const uint8_t *BinaryIdsStart = BinaryIdsBuffer.data ();
101
+
100
102
if (BinaryIdsSize == 0 )
101
103
return Error::success ();
102
104
@@ -584,10 +586,10 @@ Error RawInstrProfReader<IntPtrT>::readHeader(
584
586
const uint8_t *BufferEnd = (const uint8_t *)DataBuffer->getBufferEnd ();
585
587
if (BinaryIdSize % sizeof (uint64_t ) || BinaryIdEnd > BufferEnd)
586
588
return error (instrprof_error::bad_header);
587
- if (BinaryIdSize != 0 ) {
588
- if (Error Err =
589
- readBinaryIdsInternal (*DataBuffer, BinaryIdSize, BinaryIdStart ,
590
- BinaryIds, getDataEndianness ()))
589
+ ArrayRef< uint8_t > BinaryIdsBuffer (BinaryIdStart, BinaryIdSize);
590
+ if (!BinaryIdsBuffer. empty ()) {
591
+ if (Error Err = readBinaryIdsInternal (*DataBuffer, BinaryIdsBuffer ,
592
+ BinaryIds, getDataEndianness ()))
591
593
return Err;
592
594
}
593
595
@@ -1383,13 +1385,13 @@ Error IndexedInstrProfReader::readHeader() {
1383
1385
if (Header->getIndexedProfileVersion () >= 9 ) {
1384
1386
const unsigned char *Ptr = Start + Header->BinaryIdOffset ;
1385
1387
// Read binary ids size.
1386
- BinaryIdsSize =
1388
+ uint64_t BinaryIdsSize =
1387
1389
support::endian::readNext<uint64_t , llvm::endianness::little>(Ptr);
1388
1390
if (BinaryIdsSize % sizeof (uint64_t ))
1389
1391
return error (instrprof_error::bad_header);
1390
1392
// Set the binary ids start.
1391
- BinaryIdsStart = Ptr;
1392
- if (BinaryIdsStart > (const unsigned char *)DataBuffer->getBufferEnd ())
1393
+ BinaryIdsBuffer = ArrayRef< uint8_t >( Ptr, BinaryIdsSize) ;
1394
+ if (Ptr > (const unsigned char *)DataBuffer->getBufferEnd ())
1393
1395
return make_error<InstrProfError>(instrprof_error::malformed,
1394
1396
" corrupted binary ids" );
1395
1397
}
@@ -1691,8 +1693,8 @@ Error IndexedInstrProfReader::readNextRecord(NamedInstrProfRecord &Record) {
1691
1693
1692
1694
Error IndexedInstrProfReader::readBinaryIds (
1693
1695
std::vector<llvm::object::BuildID> &BinaryIds) {
1694
- return readBinaryIdsInternal (*DataBuffer, BinaryIdsSize, BinaryIdsStart ,
1695
- BinaryIds, llvm::endianness::little);
1696
+ return readBinaryIdsInternal (*DataBuffer, BinaryIdsBuffer, BinaryIds ,
1697
+ llvm::endianness::little);
1696
1698
}
1697
1699
1698
1700
Error IndexedInstrProfReader::printBinaryIds (raw_ostream &OS) {
0 commit comments