From d26b3334b1e9bac59f56718329b9648d8d85fd86 Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Tue, 19 Feb 2013 11:25:29 +0000 Subject: [PATCH] [Sanitizer] If -fsanitize-blacklist= option is not explicitly specified, make Clang look for the default sanitizer-specific blacklist in the resource directory. llvm-svn: 175505 --- clang/lib/Driver/SanitizerArgs.h | 13 +++++++++++++ clang/lib/Driver/Tools.cpp | 8 ++++++++ 2 files changed, 21 insertions(+) diff --git a/clang/lib/Driver/SanitizerArgs.h b/clang/lib/Driver/SanitizerArgs.h index bc3aa58..8e3f946 100644 --- a/clang/lib/Driver/SanitizerArgs.h +++ b/clang/lib/Driver/SanitizerArgs.h @@ -15,6 +15,7 @@ #include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/Options.h" #include "llvm/ADT/StringSwitch.h" +#include "llvm/Support/Path.h" namespace clang { namespace driver { @@ -189,6 +190,18 @@ class SanitizerArgs { llvm_unreachable("arg didn't provide expected value"); } + + static bool getDefaultBlacklistForKind(const Driver &D, unsigned Kind, + std::string &BLPath) { + // For now, specify the default blacklist location for ASan only. + if (Kind & NeedsAsanRt) { + SmallString<64> Path(D.ResourceDir); + llvm::sys::path::append(Path, "asan_blacklist.txt"); + BLPath = Path.str(); + return true; + } + return false; + } }; } // namespace driver diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index ba61292..ad4fd6c 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1543,6 +1543,14 @@ SanitizerArgs::SanitizerArgs(const Driver &D, const ArgList &Args) else D.Diag(diag::err_drv_no_such_file) << BLPath; } + } else { + // If no -fsanitize-blacklist option is specified, try to look up for + // blacklist in the resource directory. + std::string BLPath; + bool BLExists = false; + if (getDefaultBlacklistForKind(D, Kind, BLPath) && + !llvm::sys::fs::exists(BLPath, BLExists) && BLExists) + BlacklistFile = BLPath; } // Parse -f(no-)sanitize-memory-track-origins options. -- 2.7.4