aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
diff options
context:
space:
mode:
authorGulfem Savrun Yeniceri <gulfem@google.com>2023-08-15 20:28:30 +0000
committerGulfem Savrun Yeniceri <gulfem@google.com>2023-08-15 20:28:30 +0000
commit5222733b4c67eff1624f36de2248f58995d392ac (patch)
treec606cdc00d06a7352b3809eb04af86b96ffa38af /llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
parentcda319851fe7facf603c3930d5587e127d46b3b7 (diff)
downloadllvm-5222733b4c67eff1624f36de2248f58995d392ac.zip
llvm-5222733b4c67eff1624f36de2248f58995d392ac.tar.gz
llvm-5222733b4c67eff1624f36de2248f58995d392ac.tar.bz2
Revert "[llvm-cov] Fix a bug about using `convert-for-testing` on multi-source object files"
This reverts commit f8ad86c23405168a8cd189590184fdcc296627e0 because it broke some downsteam tests reported in https://reviews.llvm.org/D156611.
Diffstat (limited to 'llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp')
-rw-r--r--llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp49
1 files changed, 22 insertions, 27 deletions
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
index 2f290b2..0573732 100644
--- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
+++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
@@ -886,46 +886,41 @@ loadTestingFormat(StringRef Data, StringRef CompilationDir) {
if (Error E = ProfileNames.create(Data.substr(0, ProfileNamesSize), Address))
return std::move(E);
Data = Data.substr(ProfileNamesSize);
-
- N = 0;
- uint64_t CoverageMappingSize = decodeULEB128(Data.bytes_begin(), &N);
- if (N > Data.size())
- return make_error<CoverageMapError>(coveragemap_error::malformed);
- Data = Data.substr(N);
-
// Skip the padding bytes because coverage map data has an alignment of 8.
size_t Pad = offsetToAlignedAddr(Data.data(), Align(8));
if (Data.size() < Pad)
return make_error<CoverageMapError>(coveragemap_error::malformed);
Data = Data.substr(Pad);
- if (Data.size() < CoverageMappingSize)
- return make_error<CoverageMapError>(coveragemap_error::malformed);
- StringRef CoverageMapping = Data.substr(0, CoverageMappingSize);
- Data = Data.substr(CoverageMappingSize);
-
- // Skip the padding bytes because coverage records data has an alignment of 8.
- Pad = offsetToAlignedAddr(Data.data(), Align(8));
- if (Data.size() < Pad)
+ if (Data.size() < sizeof(CovMapHeader))
return make_error<CoverageMapError>(coveragemap_error::malformed);
- Data = Data.substr(Pad);
- BinaryCoverageReader::FuncRecordsStorage CoverageRecords =
- MemoryBuffer::getMemBuffer(Data);
-
- // Some extra checking.
- if (CoverageMapping.size() < sizeof(CovMapHeader))
- return make_error<CoverageMapError>(coveragemap_error::truncated);
- auto const *CovHeader =
- reinterpret_cast<const CovMapHeader *>(CoverageMapping.data());
+ auto const *CovHeader = reinterpret_cast<const CovMapHeader *>(
+ Data.substr(0, sizeof(CovMapHeader)).data());
CovMapVersion Version =
(CovMapVersion)CovHeader->getVersion<support::endianness::little>();
+ StringRef CoverageMapping;
+ BinaryCoverageReader::FuncRecordsStorage CoverageRecords;
if (Version < CovMapVersion::Version4) {
- if (CoverageRecords->getBufferSize() != 0)
- return make_error<CoverageMapError>(coveragemap_error::malformed);
+ CoverageMapping = Data;
+ if (CoverageMapping.empty())
+ return make_error<CoverageMapError>(coveragemap_error::truncated);
+ CoverageRecords = MemoryBuffer::getMemBuffer("");
} else {
+ uint32_t FilenamesSize =
+ CovHeader->getFilenamesSize<support::endianness::little>();
+ uint32_t CoverageMappingSize = sizeof(CovMapHeader) + FilenamesSize;
+ CoverageMapping = Data.substr(0, CoverageMappingSize);
+ if (CoverageMapping.empty())
+ return make_error<CoverageMapError>(coveragemap_error::truncated);
+ Data = Data.substr(CoverageMappingSize);
+ // Skip the padding bytes because coverage records data has an alignment
+ // of 8.
+ Pad = offsetToAlignedAddr(Data.data(), Align(8));
+ if (Data.size() < Pad)
+ return make_error<CoverageMapError>(coveragemap_error::malformed);
+ CoverageRecords = MemoryBuffer::getMemBuffer(Data.substr(Pad));
if (CoverageRecords->getBufferSize() == 0)
return make_error<CoverageMapError>(coveragemap_error::truncated);
}
-
return BinaryCoverageReader::createCoverageReaderFromBuffer(
CoverageMapping, std::move(CoverageRecords), std::move(ProfileNames),
BytesInAddress, Endian, CompilationDir);