summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ProfileData
diff options
context:
space:
mode:
authorIgor Kudrin <ikudrin.dev@gmail.com>2016-05-18 07:43:27 +0000
committerIgor Kudrin <ikudrin.dev@gmail.com>2016-05-18 07:43:27 +0000
commiteb10307347fee33b9dda7a9567e6d69534d6040d (patch)
treed89f5358a199acf48351465f5f380d7aec29d9c2 /llvm/lib/ProfileData
parent095fc41523134084d37f549bc1f89dbf95db5a73 (diff)
downloadbcm5719-llvm-eb10307347fee33b9dda7a9567e6d69534d6040d.tar.gz
bcm5719-llvm-eb10307347fee33b9dda7a9567e6d69534d6040d.zip
[Coverage] Ensure that coverage mapping data has an expected alignment in 'covmapping' files.
Coverage mapping data is organized in a sequence of blocks, each of which is expected to be aligned by 8 bytes. This feature is used when reading those blocks, see VersionedCovMapFuncRecordReader::readFunctionRecords(). If a misaligned covearge mapping data has more than one block, it causes llvm-cov to fail. Differential Revision: http://reviews.llvm.org/D20285 llvm-svn: 269887
Diffstat (limited to 'llvm/lib/ProfileData')
-rw-r--r--llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
index 9f27de91bc5..9920c338f2d 100644
--- a/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
+++ b/llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp
@@ -491,6 +491,13 @@ static std::error_code loadTestingFormat(StringRef Data,
return coveragemap_error::malformed;
ProfileNames.create(Data.substr(0, ProfileNamesSize), Address);
CoverageMapping = Data.substr(ProfileNamesSize);
+ // Skip the padding bytes because coverage map data has an alignment of 8.
+ if (CoverageMapping.size() < 1)
+ return coveragemap_error::truncated;
+ size_t Pad = alignmentAdjustment(CoverageMapping.data(), 8);
+ if (CoverageMapping.size() < Pad)
+ return coveragemap_error::malformed;
+ CoverageMapping = CoverageMapping.substr(Pad);
return std::error_code();
}
OpenPOWER on IntegriCloud