[llvm] b314532 - Revert "[ASan] Process functions in Asan module pass"
Kirill Stoimenov via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 3 11:01:14 PDT 2021
Author: Kirill Stoimenov
Date: 2021-11-03T18:01:01Z
New Revision: b3145323b549eea95b3b088cb2064bf0bf81cfe6
URL: https://github.com/llvm/llvm-project/commit/b3145323b549eea95b3b088cb2064bf0bf81cfe6
DIFF: https://github.com/llvm/llvm-project/commit/b3145323b549eea95b3b088cb2064bf0bf81cfe6.diff
LOG: Revert "[ASan] Process functions in Asan module pass"
This reverts commit 76ea87b94e5cba335d691e4e18e3464ad45c8b52.
Reviewed By: kstoimenov
Differential Revision: https://reviews.llvm.org/D113129
Added:
Modified:
clang/lib/CodeGen/BackendUtil.cpp
llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
llvm/lib/Passes/PassRegistry.def
llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
llvm/test/Other/new-pm-print-pipeline.ll
llvm/tools/opt/NewPMDriver.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp
index cca6eb44938ca..534d98be4344a 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -1185,9 +1185,11 @@ static void addSanitizers(const Triple &TargetTriple,
llvm::AsanDetectStackUseAfterReturnMode UseAfterReturn =
CodeGenOpts.getSanitizeAddressUseAfterReturn();
MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
- MPM.addPass(ModuleAddressSanitizerPass(
- CompileKernel, Recover, ModuleUseAfterScope, UseOdrIndicator,
- DestructorKind, UseAfterScope, UseAfterReturn));
+ MPM.addPass(ModuleAddressSanitizerPass(CompileKernel, Recover,
+ UseGlobalGC, UseOdrIndicator,
+ DestructorKind));
+ MPM.addPass(createModuleToFunctionPassAdaptor(AddressSanitizerPass(
+ {CompileKernel, Recover, UseAfterScope, UseAfterReturn})));
}
};
ASanPass(SanitizerKind::Address, false);
diff --git a/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h b/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
index fb65c59408466..ea18974798570 100644
--- a/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
+++ b/llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
@@ -128,10 +128,7 @@ class ModuleAddressSanitizerPass
explicit ModuleAddressSanitizerPass(
bool CompileKernel = false, bool Recover = false, bool UseGlobalGC = true,
bool UseOdrIndicator = false,
- AsanDtorKind DestructorKind = AsanDtorKind::Global,
- bool UseAfterScope = false,
- AsanDetectStackUseAfterReturnMode UseAfterReturn =
- AsanDetectStackUseAfterReturnMode::Runtime);
+ AsanDtorKind DestructorKind = AsanDtorKind::Global);
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
void printPipeline(raw_ostream &OS,
function_ref<StringRef(StringRef)> MapClassName2PassName);
@@ -143,8 +140,6 @@ class ModuleAddressSanitizerPass
bool UseGlobalGC;
bool UseOdrIndicator;
AsanDtorKind DestructorKind;
- bool UseAfterScope;
- AsanDetectStackUseAfterReturnMode UseAfterReturn;
};
// Insert AddressSanitizer (address sanity checking) instrumentation
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 58966d3e715d3..655c472878a00 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -136,7 +136,7 @@ MODULE_PASS_WITH_PARAMS("hwasan",
},
parseHWASanPassOptions,
"kernel;recover")
-MODULE_PASS_WITH_PARAMS("asan",
+MODULE_PASS_WITH_PARAMS("asan-module",
"ModuleAddressSanitizerPass",
[](bool CompileKernel) {
return ModuleAddressSanitizerPass(CompileKernel,
@@ -393,6 +393,13 @@ FUNCTION_PASS_WITH_PARAMS("loop-unroll",
"no-profile-peeling;profile-peeling;"
"no-runtime;runtime;"
"no-upperbound;upperbound")
+FUNCTION_PASS_WITH_PARAMS("asan",
+ "AddressSanitizerPass",
+ [](AddressSanitizerOptions Opts) {
+ return AddressSanitizerPass(Opts);
+ },
+ parseASanPassOptions,
+ "kernel")
FUNCTION_PASS_WITH_PARAMS("msan",
"MemorySanitizerPass",
[](MemorySanitizerOptions Opts) {
diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
index 9cd63574d266d..5563fc14d151b 100644
--- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,28 +1295,17 @@ void ModuleAddressSanitizerPass::printPipeline(
ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
- AsanDtorKind DestructorKind, bool UseAfterScope,
- AsanDetectStackUseAfterReturnMode UseAfterReturn)
+ AsanDtorKind DestructorKind)
: CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
- UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
- UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
+ UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
- ModuleAnalysisManager &MAM) {
- GlobalsMetadata &GlobalsMD = MAM.getResult<ASanGlobalsMetadataAnalysis>(M);
- ModuleAddressSanitizer ModuleSanitizer(M, &GlobalsMD, CompileKernel, Recover,
- UseGlobalGC, UseOdrIndicator,
- DestructorKind);
- bool Modified = false;
- auto &FAM = MAM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
- for (Function &F : M) {
- AddressSanitizer FunctionSanitizer(M, &GlobalsMD, CompileKernel, Recover,
- UseAfterScope, UseAfterReturn);
- const TargetLibraryInfo &TLI = FAM.getResult<TargetLibraryAnalysis>(F);
- Modified |= FunctionSanitizer.instrumentFunction(F, &TLI);
- }
- Modified |= ModuleSanitizer.instrumentModule(M);
- if (Modified)
+ AnalysisManager<Module> &AM) {
+ GlobalsMetadata &GlobalsMD = AM.getResult<ASanGlobalsMetadataAnalysis>(M);
+ ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
+ UseGlobalGC, UseOdrIndicator,
+ DestructorKind);
+ if (Sanitizer.instrumentModule(M))
return PreservedAnalyses::none();
return PreservedAnalyses::all();
}
@@ -2852,8 +2841,6 @@ bool AddressSanitizer::suppressInstrumentationSiteForDebug(int &Instrumented) {
bool AddressSanitizer::instrumentFunction(Function &F,
const TargetLibraryInfo *TLI) {
- if (F.empty())
- return false;
if (F.getLinkage() == GlobalValue::AvailableExternallyLinkage) return false;
if (!ClDebugFunc.empty() && ClDebugFunc == F.getName()) return false;
if (F.getName().startswith("__asan_")) return false;
diff --git a/llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll b/llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
index 8fb8fe384090f..3f7003b136aef 100644
--- a/llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ b/llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
; Make sure asan does not instrument __sancov_gen_
; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -S | FileCheck %s
-; RUN: opt < %s -passes='module(require<asan-globals-md>,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -S | FileCheck %s
+; RUN: opt < %s -passes='module(require<asan-globals-md>,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -S | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
$Foo = comdat any
diff --git a/llvm/test/Other/new-pm-print-pipeline.ll b/llvm/test/Other/new-pm-print-pipeline.ll
index 3085bcde9fa67..11fa91684c4dc 100644
--- a/llvm/test/Other/new-pm-print-pipeline.ll
+++ b/llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan<kernel;recover>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
; CHECK-14: hwasan<>,hwasan<kernel;recover>
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan<kernel>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: asan<>,asan<kernel>
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan<kernel>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: function(asan<>,asan<kernel>)
; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract<single>)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
; CHECK-16: loop-extract<>,loop-extract<single>
diff --git a/llvm/tools/opt/NewPMDriver.cpp b/llvm/tools/opt/NewPMDriver.cpp
index a3098fa051151..794c01f31c11f 100644
--- a/llvm/tools/opt/NewPMDriver.cpp
+++ b/llvm/tools/opt/NewPMDriver.cpp
@@ -340,16 +340,19 @@ bool llvm::runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM,
PB.registerPipelineParsingCallback(
[](StringRef Name, ModulePassManager &MPM,
ArrayRef<PassBuilder::PipelineElement>) {
+ AddressSanitizerOptions Opts;
if (Name == "asan-pipeline") {
MPM.addPass(
RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
+ MPM.addPass(
+ createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
MPM.addPass(ModuleAddressSanitizerPass());
return true;
} else if (Name == "asan-function-pipeline") {
- // FIXME: now this is the same as asan-pipeline and can me removed.
MPM.addPass(
RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
- MPM.addPass(ModuleAddressSanitizerPass());
+ MPM.addPass(
+ createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
return true;
}
return false;
More information about the llvm-commits
mailing list