From fbf8b957fdc1d421f86049669a9af6cd2c05971d Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Thu, 18 Feb 2021 12:47:40 -0800 Subject: Revert "[Coverage] Store compilation dir separately in coverage mapping" This reverts commit 97ec8fa5bb07e3f5bf25ddcb216b545cd3d03b65 since the test is failing on some bots. --- .../ProfileData/Coverage/CoverageMappingReader.cpp | 95 ++++++++++------------ 1 file changed, 41 insertions(+), 54 deletions(-) (limited to 'llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp') diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp index 942f8e7..1acdcb4 100644 --- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp @@ -97,7 +97,9 @@ Error RawCoverageReader::readString(StringRef &Result) { return Error::success(); } -Error RawCoverageFilenamesReader::read(CovMapVersion Version) { +Error RawCoverageFilenamesReader::read( + CovMapVersion Version, + BinaryCoverageReader::DecompressedData &Decompressed) { uint64_t NumFilenames; if (auto Err = readSize(NumFilenames)) return Err; @@ -105,7 +107,7 @@ Error RawCoverageFilenamesReader::read(CovMapVersion Version) { return make_error(coveragemap_error::malformed); if (Version < CovMapVersion::Version4) - return readUncompressed(Version, NumFilenames); + return readUncompressed(NumFilenames); // The uncompressed length may exceed the size of the encoded filenames. // Skip size validation. @@ -122,8 +124,11 @@ Error RawCoverageFilenamesReader::read(CovMapVersion Version) { return make_error( coveragemap_error::decompression_failed); - // Allocate memory for the decompressed filenames. - SmallVector StorageBuf; + // Allocate memory for the decompressed filenames. Transfer ownership of + // the memory to BinaryCoverageReader. + auto DecompressedStorage = std::make_unique>(); + SmallVectorImpl &StorageBuf = *DecompressedStorage.get(); + Decompressed.push_back(std::move(DecompressedStorage)); // Read compressed filenames. StringRef CompressedFilenames = Data.substr(0, CompressedLen); @@ -138,40 +143,19 @@ Error RawCoverageFilenamesReader::read(CovMapVersion Version) { StringRef UncompressedFilenames(StorageBuf.data(), StorageBuf.size()); RawCoverageFilenamesReader Delegate(UncompressedFilenames, Filenames); - return Delegate.readUncompressed(Version, NumFilenames); + return Delegate.readUncompressed(NumFilenames); } - return readUncompressed(Version, NumFilenames); + return readUncompressed(NumFilenames); } -Error RawCoverageFilenamesReader::readUncompressed(CovMapVersion Version, - uint64_t NumFilenames) { +Error RawCoverageFilenamesReader::readUncompressed(uint64_t NumFilenames) { // Read uncompressed filenames. - if (Version < CovMapVersion::Version6) { - for (size_t I = 0; I < NumFilenames; ++I) { - StringRef Filename; - if (auto Err = readString(Filename)) - return Err; - Filenames.push_back(Filename.str()); - } - } else { - StringRef CWD; - if (auto Err = readString(CWD)) + for (size_t I = 0; I < NumFilenames; ++I) { + StringRef Filename; + if (auto Err = readString(Filename)) return Err; - Filenames.push_back(CWD.str()); - - for (size_t I = 1; I < NumFilenames; ++I) { - StringRef Filename; - if (auto Err = readString(Filename)) - return Err; - if (sys::path::is_absolute(Filename)) { - Filenames.push_back(Filename.str()); - } else { - SmallString<256> P(CWD); - llvm::sys::path::append(P, Filename); - Filenames.push_back(static_cast(P)); - } - } + Filenames.push_back(Filename); } return Error::success(); } @@ -497,8 +481,9 @@ struct CovMapFuncRecordReader { // // Returns a pointer to the next \c CovHeader if it exists, or to an address // greater than \p CovEnd if not. - virtual Expected readCoverageHeader(const char *CovBuf, - const char *CovBufEnd) = 0; + virtual Expected + readCoverageHeader(const char *CovBuf, const char *CovBufEnd, + BinaryCoverageReader::DecompressedData &Decompressed) = 0; // Read function records. // @@ -520,7 +505,7 @@ struct CovMapFuncRecordReader { static Expected> get(CovMapVersion Version, InstrProfSymtab &P, std::vector &R, - std::vector &F); + std::vector &F); }; // A class for reading coverage mapping function records for a module. @@ -534,7 +519,7 @@ class VersionedCovMapFuncRecordReader : public CovMapFuncRecordReader { // in \c Records. DenseMap FunctionRecords; InstrProfSymtab &ProfileNames; - std::vector &Filenames; + std::vector &Filenames; std::vector &Records; // Maps a hash of the filenames in a TU to a \c FileRange. The range @@ -594,13 +579,14 @@ public: VersionedCovMapFuncRecordReader( InstrProfSymtab &P, std::vector &R, - std::vector &F) + std::vector &F) : ProfileNames(P), Filenames(F), Records(R) {} ~VersionedCovMapFuncRecordReader() override = default; - Expected readCoverageHeader(const char *CovBuf, - const char *CovBufEnd) override { + Expected readCoverageHeader( + const char *CovBuf, const char *CovBufEnd, + BinaryCoverageReader::DecompressedData &Decompressed) override { using namespace support; if (CovBuf + sizeof(CovMapHeader) > CovBufEnd) @@ -629,7 +615,7 @@ public: size_t FilenamesBegin = Filenames.size(); StringRef FilenameRegion(CovBuf, FilenamesSize); RawCoverageFilenamesReader Reader(FilenameRegion, Filenames); - if (auto Err = Reader.read(Version)) + if (auto Err = Reader.read(Version, Decompressed)) return std::move(Err); CovBuf += FilenamesSize; FilenameRange FileRange(FilenamesBegin, Filenames.size() - FilenamesBegin); @@ -735,7 +721,7 @@ template Expected> CovMapFuncRecordReader::get( CovMapVersion Version, InstrProfSymtab &P, std::vector &R, - std::vector &F) { + std::vector &F) { using namespace coverage; switch (Version) { @@ -746,7 +732,6 @@ Expected> CovMapFuncRecordReader::get( case CovMapVersion::Version3: case CovMapVersion::Version4: case CovMapVersion::Version5: - case CovMapVersion::Version6: // Decompress the name data. if (Error E = P.create(P.getNameData())) return std::move(E); @@ -762,9 +747,6 @@ Expected> CovMapFuncRecordReader::get( else if (Version == CovMapVersion::Version5) return std::make_unique>(P, R, F); - else if (Version == CovMapVersion::Version6) - return std::make_unique>(P, R, F); } llvm_unreachable("Unsupported version"); } @@ -773,7 +755,8 @@ template static Error readCoverageMappingData( InstrProfSymtab &ProfileNames, StringRef CovMap, StringRef FuncRecords, std::vector &Records, - std::vector &Filenames) { + std::vector &Filenames, + BinaryCoverageReader::DecompressedData &Decompressed) { using namespace coverage; // Read the records in the coverage data section. @@ -799,7 +782,8 @@ static Error readCoverageMappingData( // header. // // Return a pointer to the next coverage header. - auto NextOrErr = Reader->readCoverageHeader(CovBuf, CovBufEnd); + auto NextOrErr = + Reader->readCoverageHeader(CovBuf, CovBufEnd, Decompressed); if (auto E = NextOrErr.takeError()) return E; CovBuf = NextOrErr.get(); @@ -826,23 +810,25 @@ BinaryCoverageReader::createCoverageReaderFromBuffer( if (Error E = readCoverageMappingData( Reader->ProfileNames, Coverage, FuncRecordsRef, - Reader->MappingRecords, Reader->Filenames)) + Reader->MappingRecords, Reader->Filenames, + Reader->Decompressed)) return std::move(E); } else if (BytesInAddress == 4 && Endian == support::endianness::big) { if (Error E = readCoverageMappingData( Reader->ProfileNames, Coverage, FuncRecordsRef, - Reader->MappingRecords, Reader->Filenames)) + Reader->MappingRecords, Reader->Filenames, Reader->Decompressed)) return std::move(E); } else if (BytesInAddress == 8 && Endian == support::endianness::little) { if (Error E = readCoverageMappingData( Reader->ProfileNames, Coverage, FuncRecordsRef, - Reader->MappingRecords, Reader->Filenames)) + Reader->MappingRecords, Reader->Filenames, + Reader->Decompressed)) return std::move(E); } else if (BytesInAddress == 8 && Endian == support::endianness::big) { if (Error E = readCoverageMappingData( Reader->ProfileNames, Coverage, FuncRecordsRef, - Reader->MappingRecords, Reader->Filenames)) + Reader->MappingRecords, Reader->Filenames, Reader->Decompressed)) return std::move(E); } else return make_error(coveragemap_error::malformed); @@ -1089,9 +1075,10 @@ Error BinaryCoverageReader::readNextRecord(CoverageMappingRecord &Record) { Expressions.clear(); MappingRegions.clear(); auto &R = MappingRecords[CurrentRecord]; - auto F = makeArrayRef(Filenames).slice(R.FilenamesBegin, R.FilenamesSize); - RawCoverageMappingReader Reader(R.CoverageMapping, F, FunctionsFilenames, - Expressions, MappingRegions); + RawCoverageMappingReader Reader( + R.CoverageMapping, + makeArrayRef(Filenames).slice(R.FilenamesBegin, R.FilenamesSize), + FunctionsFilenames, Expressions, MappingRegions); if (auto Err = Reader.read()) return Err; -- cgit v1.1