diff options
author | Xinliang David Li <davidxl@google.com> | 2016-01-13 00:27:24 +0000 |
---|---|---|
committer | Xinliang David Li <davidxl@google.com> | 2016-01-13 00:27:24 +0000 |
commit | 8c6527817924b490dcaedd2f1f214083cdbd2be1 (patch) | |
tree | 4c63378d67e9e5ccc9e8586b8218300bb66797b1 /llvm/lib/ProfileData/CoverageMappingReader.cpp | |
parent | 0ae163f9ea00ebf413139f7e9a7456b703fa94a3 (diff) | |
download | bcm5719-llvm-8c6527817924b490dcaedd2f1f214083cdbd2be1.tar.gz bcm5719-llvm-8c6527817924b490dcaedd2f1f214083cdbd2be1.zip |
Rollback r257547 -- buildbot failure TBI
llvm-svn: 257549
Diffstat (limited to 'llvm/lib/ProfileData/CoverageMappingReader.cpp')
-rw-r--r-- | llvm/lib/ProfileData/CoverageMappingReader.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/llvm/lib/ProfileData/CoverageMappingReader.cpp b/llvm/lib/ProfileData/CoverageMappingReader.cpp index aa794b080bb..af6c616fa03 100644 --- a/llvm/lib/ProfileData/CoverageMappingReader.cpp +++ b/llvm/lib/ProfileData/CoverageMappingReader.cpp @@ -319,10 +319,13 @@ static std::error_code readCoverageMappingData( if (Buf + sizeof(CovMapHeader) > End) return coveragemap_error::malformed; auto CovHeader = reinterpret_cast<const coverage::CovMapHeader *>(Buf); - uint32_t NRecords = CovHeader->getNRecords<Endian>(); - uint32_t FilenamesSize = CovHeader->getFilenamesSize<Endian>(); - uint32_t CoverageSize = CovHeader->getCoverageSize<Endian>(); - uint32_t Version = CovHeader->getVersion<Endian>(); + uint32_t NRecords = + endian::byte_swap<uint32_t, Endian>(CovHeader->NRecords); + uint32_t FilenamesSize = + endian::byte_swap<uint32_t, Endian>(CovHeader->FilenamesSize); + uint32_t CoverageSize = + endian::byte_swap<uint32_t, Endian>(CovHeader->CoverageSize); + uint32_t Version = endian::byte_swap<uint32_t, Endian>(CovHeader->Version); Buf = reinterpret_cast<const char *>(++CovHeader); if (Version > coverage::CoverageMappingCurrentVersion) @@ -357,8 +360,11 @@ static std::error_code readCoverageMappingData( reinterpret_cast<const coverage::CovMapFunctionRecord<T> *>(FunBuf); while ((const char *)CFR < FunEnd) { // Read the function information - uint32_t DataSize = CFR->template getDataSize<Endian>(); - uint64_t FuncHash = CFR->template getFuncHash<Endian>(); + T NamePtr = endian::byte_swap<T, Endian>(CFR->NamePtr); + uint32_t NameSize = endian::byte_swap<uint32_t, Endian>(CFR->NameSize); + uint32_t DataSize = endian::byte_swap<uint32_t, Endian>(CFR->DataSize); + uint64_t FuncHash = endian::byte_swap<uint64_t, Endian>(CFR->FuncHash); + CFR++; // Now use that to read the coverage data. if (CovBuf + DataSize > CovEnd) @@ -369,18 +375,16 @@ static std::error_code readCoverageMappingData( // Ignore this record if we already have a record that points to the same // function name. This is useful to ignore the redundant records for the // functions with ODR linkage. - T NameRef = CFR->template getFuncNameRef<Endian>(); - if (!UniqueFunctionMappingData.insert(NameRef).second) + if (!UniqueFunctionMappingData.insert(NamePtr).second) continue; - StringRef FuncName; - if (std::error_code EC = - CFR->template getFuncName<Endian>(ProfileNames, FuncName)) - return EC; + // Finally, grab the name and create a record. + StringRef FuncName = ProfileNames.getFuncName(NamePtr, NameSize); + if (NameSize && FuncName.empty()) + return coveragemap_error::malformed; Records.push_back(BinaryCoverageReader::ProfileMappingRecord( CoverageMappingVersion(Version), FuncName, FuncHash, Mapping, FilenamesBegin, Filenames.size() - FilenamesBegin)); - CFR++; } } |