1 //===--- SanitizerBlacklist.cpp - Blacklist for sanitizers ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // User-provided blacklist used to disable/alter instrumentation done in
11 // sanitizers.
12 //
13 //===----------------------------------------------------------------------===//
14 #include "clang/Basic/SanitizerBlacklist.h"
15 
16 using namespace clang;
17 
SanitizerBlacklist(const std::vector<std::string> & BlacklistPaths,SourceManager & SM)18 SanitizerBlacklist::SanitizerBlacklist(
19     const std::vector<std::string> &BlacklistPaths, SourceManager &SM)
20     : SSCL(SanitizerSpecialCaseList::createOrDie(BlacklistPaths)), SM(SM) {}
21 
isBlacklistedGlobal(SanitizerMask Mask,StringRef GlobalName,StringRef Category) const22 bool SanitizerBlacklist::isBlacklistedGlobal(SanitizerMask Mask,
23                                              StringRef GlobalName,
24                                              StringRef Category) const {
25   return SSCL->inSection(Mask, "global", GlobalName, Category);
26 }
27 
isBlacklistedType(SanitizerMask Mask,StringRef MangledTypeName,StringRef Category) const28 bool SanitizerBlacklist::isBlacklistedType(SanitizerMask Mask,
29                                            StringRef MangledTypeName,
30                                            StringRef Category) const {
31   return SSCL->inSection(Mask, "type", MangledTypeName, Category);
32 }
33 
isBlacklistedFunction(SanitizerMask Mask,StringRef FunctionName) const34 bool SanitizerBlacklist::isBlacklistedFunction(SanitizerMask Mask,
35                                                StringRef FunctionName) const {
36   return SSCL->inSection(Mask, "fun", FunctionName);
37 }
38 
isBlacklistedFile(SanitizerMask Mask,StringRef FileName,StringRef Category) const39 bool SanitizerBlacklist::isBlacklistedFile(SanitizerMask Mask,
40                                            StringRef FileName,
41                                            StringRef Category) const {
42   return SSCL->inSection(Mask, "src", FileName, Category);
43 }
44 
isBlacklistedLocation(SanitizerMask Mask,SourceLocation Loc,StringRef Category) const45 bool SanitizerBlacklist::isBlacklistedLocation(SanitizerMask Mask,
46                                                SourceLocation Loc,
47                                                StringRef Category) const {
48   return Loc.isValid() &&
49          isBlacklistedFile(Mask, SM.getFilename(SM.getFileLoc(Loc)), Category);
50 }
51 
52