Summary: This is the follow-up patch to D37924. This change refactors clang to use the the newly added section headers in SpecialCaseList to specify which sanitizers blacklists entries should apply to, like so: [cfi-vcall] fun:*bad_vcall* [cfi-derived-cast|cfi-unrelated-cast] fun:*bad_cast* The SanitizerSpecialCaseList class has been added to allow querying by SanitizerMask, and SanitizerBlacklist and its downstream users have been updated to provide that information. Old blacklists not using sections will continue to function identically since the blacklist entries will be placed into a '[*]' section by default matching against all sanitizers. Reviewers: pcc, kcc, eugenis, vsk Reviewed By: eugenis Subscribers: dberris, cfe-commits, mgorny Differential Revision: https://reviews.llvm.org/D37925 llvm-svn: 314171
52 lines
2.0 KiB
C++
52 lines
2.0 KiB
C++
//===--- SanitizerBlacklist.cpp - Blacklist for sanitizers ----------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// User-provided blacklist used to disable/alter instrumentation done in
|
|
// sanitizers.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#include "clang/Basic/SanitizerBlacklist.h"
|
|
|
|
using namespace clang;
|
|
|
|
SanitizerBlacklist::SanitizerBlacklist(
|
|
const std::vector<std::string> &BlacklistPaths, SourceManager &SM)
|
|
: SSCL(SanitizerSpecialCaseList::createOrDie(BlacklistPaths)), SM(SM) {}
|
|
|
|
bool SanitizerBlacklist::isBlacklistedGlobal(SanitizerMask Mask,
|
|
StringRef GlobalName,
|
|
StringRef Category) const {
|
|
return SSCL->inSection(Mask, "global", GlobalName, Category);
|
|
}
|
|
|
|
bool SanitizerBlacklist::isBlacklistedType(SanitizerMask Mask,
|
|
StringRef MangledTypeName,
|
|
StringRef Category) const {
|
|
return SSCL->inSection(Mask, "type", MangledTypeName, Category);
|
|
}
|
|
|
|
bool SanitizerBlacklist::isBlacklistedFunction(SanitizerMask Mask,
|
|
StringRef FunctionName) const {
|
|
return SSCL->inSection(Mask, "fun", FunctionName);
|
|
}
|
|
|
|
bool SanitizerBlacklist::isBlacklistedFile(SanitizerMask Mask,
|
|
StringRef FileName,
|
|
StringRef Category) const {
|
|
return SSCL->inSection(Mask, "src", FileName, Category);
|
|
}
|
|
|
|
bool SanitizerBlacklist::isBlacklistedLocation(SanitizerMask Mask,
|
|
SourceLocation Loc,
|
|
StringRef Category) const {
|
|
return Loc.isValid() &&
|
|
isBlacklistedFile(Mask, SM.getFilename(SM.getFileLoc(Loc)), Category);
|
|
}
|
|
|