kstoimenov created this revision. Herald added subscribers: ormris, hiraditya. kstoimenov requested review of this revision. Herald added projects: clang, LLVM. Herald added subscribers: llvm-commits, cfe-commits.
This reverts commit 76ea87b94e5cba335d691e4e18e3464ad45c8b52 <https://reviews.llvm.org/rG76ea87b94e5cba335d691e4e18e3464ad45c8b52>. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D113129 Files: 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
Index: llvm/tools/opt/NewPMDriver.cpp =================================================================== --- llvm/tools/opt/NewPMDriver.cpp +++ llvm/tools/opt/NewPMDriver.cpp @@ -340,16 +340,19 @@ 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; Index: llvm/test/Other/new-pm-print-pipeline.ll =================================================================== --- llvm/test/Other/new-pm-print-pipeline.ll +++ 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> Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll =================================================================== --- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll +++ 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 Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp =================================================================== --- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -1295,28 +1295,17 @@ 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::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; Index: llvm/lib/Passes/PassRegistry.def =================================================================== --- llvm/lib/Passes/PassRegistry.def +++ llvm/lib/Passes/PassRegistry.def @@ -136,7 +136,7 @@ }, parseHWASanPassOptions, "kernel;recover") -MODULE_PASS_WITH_PARAMS("asan", +MODULE_PASS_WITH_PARAMS("asan-module", "ModuleAddressSanitizerPass", [](bool CompileKernel) { return ModuleAddressSanitizerPass(CompileKernel, @@ -393,6 +393,13 @@ "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) { Index: llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h =================================================================== --- llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h +++ llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h @@ -128,10 +128,7 @@ 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 @@ bool UseGlobalGC; bool UseOdrIndicator; AsanDtorKind DestructorKind; - bool UseAfterScope; - AsanDetectStackUseAfterReturnMode UseAfterReturn; }; // Insert AddressSanitizer (address sanity checking) instrumentation Index: clang/lib/CodeGen/BackendUtil.cpp =================================================================== --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -1185,9 +1185,11 @@ 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);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits