diff options
author | Gulfem Savrun Yeniceri <gulfem@google.com> | 2023-08-15 20:28:30 +0000 |
---|---|---|
committer | Gulfem Savrun Yeniceri <gulfem@google.com> | 2023-08-15 20:28:30 +0000 |
commit | 5222733b4c67eff1624f36de2248f58995d392ac (patch) | |
tree | c606cdc00d06a7352b3809eb04af86b96ffa38af /llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp | |
parent | cda319851fe7facf603c3930d5587e127d46b3b7 (diff) | |
download | llvm-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.cpp | 49 |
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); |