[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
This commit is contained in:
Alexey Samsonov 2013-02-19 11:25:29 +00:00
parent adaca58526
commit d26b3334b1
2 changed files with 21 additions and 0 deletions

View File

@ -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

View File

@ -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.