Decouple llvm::SpecialCaseList text representation and its LLVM IR semantics.
Turn llvm::SpecialCaseList into a simple class that parses text files in a specified format and knows nothing about LLVM IR. Move this class into LLVMSupport library. Implement two users of this class: * DFSanABIList in DFSan instrumentation pass. * SanitizerBlacklist in Clang CodeGen library. The latter will be modified to use actual source-level information from frontend (source file names) instead of unstable LLVM IR things (LLVM Module identifier). Remove dependency edge from ClangCodeGen/ClangDriver to LLVMTransformUtils. No functionality change. llvm-svn: 212643
This commit is contained in:
@@ -87,9 +87,8 @@ CodeGenModule::CodeGenModule(ASTContext &C, const CodeGenOptions &CGO,
|
||||
NSConcreteStackBlock(nullptr), BlockObjectAssign(nullptr),
|
||||
BlockObjectDispose(nullptr), BlockDescriptorType(nullptr),
|
||||
GenericBlockLiteralType(nullptr), LifetimeStartFn(nullptr),
|
||||
LifetimeEndFn(nullptr),
|
||||
SanitizerBlacklist(
|
||||
llvm::SpecialCaseList::createOrDie(CGO.SanitizerBlacklistFile)) {
|
||||
LifetimeEndFn(nullptr), SanitizerBL(llvm::SpecialCaseList::createOrDie(
|
||||
CGO.SanitizerBlacklistFile)) {
|
||||
|
||||
// Initialize the type cache.
|
||||
llvm::LLVMContext &LLVMContext = M.getContext();
|
||||
@@ -730,7 +729,7 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
|
||||
B.addAttribute(llvm::Attribute::StackProtectReq);
|
||||
|
||||
// Add sanitizer attributes if function is not blacklisted.
|
||||
if (!SanitizerBlacklist->isIn(*F)) {
|
||||
if (!SanitizerBL.isIn(*F)) {
|
||||
// When AddressSanitizer is enabled, set SanitizeAddress attribute
|
||||
// unless __attribute__((no_sanitize_address)) is used.
|
||||
if (LangOpts.Sanitize.Address && !D->hasAttr<NoSanitizeAddressAttr>())
|
||||
@@ -1965,8 +1964,8 @@ void CodeGenModule::reportGlobalToASan(llvm::GlobalVariable *GV,
|
||||
SourceLocation Loc, bool IsDynInit) {
|
||||
if (!LangOpts.Sanitize.Address)
|
||||
return;
|
||||
IsDynInit &= !SanitizerBlacklist->isIn(*GV, "init");
|
||||
bool IsBlacklisted = SanitizerBlacklist->isIn(*GV);
|
||||
IsDynInit &= !SanitizerBL.isIn(*GV, "init");
|
||||
bool IsBlacklisted = SanitizerBL.isIn(*GV);
|
||||
|
||||
llvm::LLVMContext &LLVMCtx = TheModule.getContext();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user