1*67e74705SXin Li //===--- SanitizerBlacklist.cpp - Blacklist for sanitizers ----------------===//
2*67e74705SXin Li //
3*67e74705SXin Li // The LLVM Compiler Infrastructure
4*67e74705SXin Li //
5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source
6*67e74705SXin Li // License. See LICENSE.TXT for details.
7*67e74705SXin Li //
8*67e74705SXin Li //===----------------------------------------------------------------------===//
9*67e74705SXin Li //
10*67e74705SXin Li // User-provided blacklist used to disable/alter instrumentation done in
11*67e74705SXin Li // sanitizers.
12*67e74705SXin Li //
13*67e74705SXin Li //===----------------------------------------------------------------------===//
14*67e74705SXin Li #include "clang/Basic/SanitizerBlacklist.h"
15*67e74705SXin Li
16*67e74705SXin Li using namespace clang;
17*67e74705SXin Li
SanitizerBlacklist(const std::vector<std::string> & BlacklistPaths,SourceManager & SM)18*67e74705SXin Li SanitizerBlacklist::SanitizerBlacklist(
19*67e74705SXin Li const std::vector<std::string> &BlacklistPaths, SourceManager &SM)
20*67e74705SXin Li : SCL(llvm::SpecialCaseList::createOrDie(BlacklistPaths)), SM(SM) {}
21*67e74705SXin Li
isBlacklistedGlobal(StringRef GlobalName,StringRef Category) const22*67e74705SXin Li bool SanitizerBlacklist::isBlacklistedGlobal(StringRef GlobalName,
23*67e74705SXin Li StringRef Category) const {
24*67e74705SXin Li return SCL->inSection("global", GlobalName, Category);
25*67e74705SXin Li }
26*67e74705SXin Li
isBlacklistedType(StringRef MangledTypeName,StringRef Category) const27*67e74705SXin Li bool SanitizerBlacklist::isBlacklistedType(StringRef MangledTypeName,
28*67e74705SXin Li StringRef Category) const {
29*67e74705SXin Li return SCL->inSection("type", MangledTypeName, Category);
30*67e74705SXin Li }
31*67e74705SXin Li
isBlacklistedFunction(StringRef FunctionName) const32*67e74705SXin Li bool SanitizerBlacklist::isBlacklistedFunction(StringRef FunctionName) const {
33*67e74705SXin Li return SCL->inSection("fun", FunctionName);
34*67e74705SXin Li }
35*67e74705SXin Li
isBlacklistedFile(StringRef FileName,StringRef Category) const36*67e74705SXin Li bool SanitizerBlacklist::isBlacklistedFile(StringRef FileName,
37*67e74705SXin Li StringRef Category) const {
38*67e74705SXin Li return SCL->inSection("src", FileName, Category);
39*67e74705SXin Li }
40*67e74705SXin Li
isBlacklistedLocation(SourceLocation Loc,StringRef Category) const41*67e74705SXin Li bool SanitizerBlacklist::isBlacklistedLocation(SourceLocation Loc,
42*67e74705SXin Li StringRef Category) const {
43*67e74705SXin Li return Loc.isValid() &&
44*67e74705SXin Li isBlacklistedFile(SM.getFilename(SM.getFileLoc(Loc)), Category);
45*67e74705SXin Li }
46*67e74705SXin Li
47