blob: aec35c7d9864f4cc145911ea45517b2dfea85187 [file] [log] [blame]
Alexey Samsonovb7dd3292014-07-09 19:40:08 +00001//===--- SanitizerBlacklist.cpp - Blacklist for sanitizers ----------------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Alexey Samsonovb7dd3292014-07-09 19:40:08 +00006//
7//===----------------------------------------------------------------------===//
8//
9// User-provided blacklist used to disable/alter instrumentation done in
10// sanitizers.
11//
12//===----------------------------------------------------------------------===//
Alexey Samsonov8d043e82014-10-15 19:57:45 +000013#include "clang/Basic/SanitizerBlacklist.h"
Alexey Samsonovb7dd3292014-07-09 19:40:08 +000014
15using namespace clang;
Alexey Samsonovb7dd3292014-07-09 19:40:08 +000016
Alexey Samsonova511cdd2015-02-04 17:40:08 +000017SanitizerBlacklist::SanitizerBlacklist(
18 const std::vector<std::string> &BlacklistPaths, SourceManager &SM)
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000019 : SSCL(SanitizerSpecialCaseList::createOrDie(BlacklistPaths)), SM(SM) {}
Alexey Samsonov0b15e342014-10-15 22:17:27 +000020
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000021bool SanitizerBlacklist::isBlacklistedGlobal(SanitizerMask Mask,
22 StringRef GlobalName,
Alexey Samsonova0ac3c22014-10-17 22:37:33 +000023 StringRef Category) const {
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000024 return SSCL->inSection(Mask, "global", GlobalName, Category);
Alexey Samsonovb7dd3292014-07-09 19:40:08 +000025}
Alexey Samsonov84856012014-07-10 22:34:19 +000026
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000027bool SanitizerBlacklist::isBlacklistedType(SanitizerMask Mask,
28 StringRef MangledTypeName,
Kostya Serebryany293dc9b2014-10-16 20:54:52 +000029 StringRef Category) const {
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000030 return SSCL->inSection(Mask, "type", MangledTypeName, Category);
Alexey Samsonov84856012014-07-10 22:34:19 +000031}
Alexey Samsonov74246aa2014-10-16 17:10:38 +000032
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000033bool SanitizerBlacklist::isBlacklistedFunction(SanitizerMask Mask,
34 StringRef FunctionName) const {
35 return SSCL->inSection(Mask, "fun", FunctionName);
Alexey Samsonov74246aa2014-10-16 17:10:38 +000036}
37
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000038bool SanitizerBlacklist::isBlacklistedFile(SanitizerMask Mask,
39 StringRef FileName,
Alexey Samsonov74246aa2014-10-16 17:10:38 +000040 StringRef Category) const {
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000041 return SSCL->inSection(Mask, "src", FileName, Category);
Alexey Samsonov74246aa2014-10-16 17:10:38 +000042}
Alexey Samsonov33e00e22014-10-16 23:50:26 +000043
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000044bool SanitizerBlacklist::isBlacklistedLocation(SanitizerMask Mask,
45 SourceLocation Loc,
Alexey Samsonov33e00e22014-10-16 23:50:26 +000046 StringRef Category) const {
Yaron Kerened1fe5d2015-10-03 05:15:57 +000047 return Loc.isValid() &&
Vlad Tsyrklevich2eccdab2017-09-25 22:11:12 +000048 isBlacklistedFile(Mask, SM.getFilename(SM.getFileLoc(Loc)), Category);
Alexey Samsonov33e00e22014-10-16 23:50:26 +000049}
50