150
|
1 //===--- SanitizerBlacklist.cpp - Blacklist for sanitizers ----------------===//
|
|
2 //
|
|
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
4 // See https://llvm.org/LICENSE.txt for license information.
|
|
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
6 //
|
|
7 //===----------------------------------------------------------------------===//
|
|
8 //
|
|
9 // User-provided blacklist used to disable/alter instrumentation done in
|
|
10 // sanitizers.
|
|
11 //
|
|
12 //===----------------------------------------------------------------------===//
|
173
|
13
|
150
|
14 #include "clang/Basic/SanitizerBlacklist.h"
|
173
|
15 #include "clang/Basic/FileManager.h"
|
|
16 #include "clang/Basic/SanitizerSpecialCaseList.h"
|
|
17 #include "clang/Basic/Sanitizers.h"
|
|
18 #include "clang/Basic/SourceManager.h"
|
150
|
19
|
|
20 using namespace clang;
|
|
21
|
|
22 SanitizerBlacklist::SanitizerBlacklist(
|
|
23 const std::vector<std::string> &BlacklistPaths, SourceManager &SM)
|
|
24 : SSCL(SanitizerSpecialCaseList::createOrDie(
|
|
25 BlacklistPaths, SM.getFileManager().getVirtualFileSystem())),
|
|
26 SM(SM) {}
|
|
27
|
173
|
28 SanitizerBlacklist::~SanitizerBlacklist() = default;
|
|
29
|
150
|
30 bool SanitizerBlacklist::isBlacklistedGlobal(SanitizerMask Mask,
|
|
31 StringRef GlobalName,
|
|
32 StringRef Category) const {
|
|
33 return SSCL->inSection(Mask, "global", GlobalName, Category);
|
|
34 }
|
|
35
|
|
36 bool SanitizerBlacklist::isBlacklistedType(SanitizerMask Mask,
|
|
37 StringRef MangledTypeName,
|
|
38 StringRef Category) const {
|
|
39 return SSCL->inSection(Mask, "type", MangledTypeName, Category);
|
|
40 }
|
|
41
|
|
42 bool SanitizerBlacklist::isBlacklistedFunction(SanitizerMask Mask,
|
|
43 StringRef FunctionName) const {
|
|
44 return SSCL->inSection(Mask, "fun", FunctionName);
|
|
45 }
|
|
46
|
|
47 bool SanitizerBlacklist::isBlacklistedFile(SanitizerMask Mask,
|
|
48 StringRef FileName,
|
|
49 StringRef Category) const {
|
|
50 return SSCL->inSection(Mask, "src", FileName, Category);
|
|
51 }
|
|
52
|
|
53 bool SanitizerBlacklist::isBlacklistedLocation(SanitizerMask Mask,
|
|
54 SourceLocation Loc,
|
|
55 StringRef Category) const {
|
|
56 return Loc.isValid() &&
|
|
57 isBlacklistedFile(Mask, SM.getFilename(SM.getFileLoc(Loc)), Category);
|
|
58 }
|
|
59
|