diff options
author | Mike Aizatsky <aizatsky@chromium.org> | 2016-03-11 23:26:41 +0000 |
---|---|---|
committer | Mike Aizatsky <aizatsky@chromium.org> | 2016-03-11 23:26:41 +0000 |
commit | e9983cf9b430e7bb5ceb209ad3cb5ce348935f3a (patch) | |
tree | d7f2bd6e75f02fd5e7df412f7afb46555a8c59ce /tools/sancov | |
parent | 41cfc0be885aa61d03dd8dda10b72882a04980a9 (diff) |
Don't crash sancov if file is unreadable.
Summary:
Caller can provides the list of .so files where some files are
unreadable (e.g linux-vdso.so.1). It's more convenient to handler this in
sancov with warning then making all callers to check files.
Reviewers: aizatsky
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D18103
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263307 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/sancov')
-rw-r--r-- | tools/sancov/sancov.cc | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/tools/sancov/sancov.cc b/tools/sancov/sancov.cc index 3d2e49e47bc..07b092e333b 100644 --- a/tools/sancov/sancov.cc +++ b/tools/sancov/sancov.cc @@ -98,10 +98,9 @@ static cl::opt<bool> ClUseDefaultBlacklist( "use_default_blacklist", cl::init(true), cl::Hidden, cl::desc("Controls if default blacklist should be used.")); -static const char *const DefaultBlacklistStr = - "fun:__sanitizer_.*\n" - "src:/usr/include/.*\n" - "src:.*/libc\\+\\+/.*\n"; +static const char *const DefaultBlacklistStr = "fun:__sanitizer_.*\n" + "src:/usr/include/.*\n" + "src:.*/libc\\+\\+/.*\n"; // --------- FORMAT SPECIFICATION --------- @@ -491,8 +490,12 @@ static std::string escapeHtml(const std::string &S) { static ErrorOr<bool> isCoverageFile(std::string FileName) { ErrorOr<std::unique_ptr<MemoryBuffer>> BufOrErr = MemoryBuffer::getFile(FileName); - if (!BufOrErr) + if (!BufOrErr) { + errs() << "Warning: " << BufOrErr.getError().message() << "(" + << BufOrErr.getError().value() + << "), filename: " << llvm::sys::path::filename(FileName) << "\n"; return BufOrErr.getError(); + } std::unique_ptr<MemoryBuffer> Buf = std::move(BufOrErr.get()); if (Buf->getBufferSize() < 8) { return false; @@ -940,7 +943,8 @@ public: // Partition input values into coverage/object files. for (const auto &FileName : FileNames) { auto ErrorOrIsCoverage = isCoverageFile(FileName); - FailIfError(ErrorOrIsCoverage); + if (!ErrorOrIsCoverage) + continue; if (ErrorOrIsCoverage.get()) { CovFiles.insert(FileName); } else { |