This revision was automatically updated to reflect the committed changes. Closed by commit rGa55c4ec1cee7: [ASan] Process functions in Asan module pass (authored by kstoimenov).
Changed prior to commit: https://reviews.llvm.org/D112732?vs=384544&id=384571#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112732/new/ https://reviews.llvm.org/D112732 Files: clang/lib/CodeGen/BackendUtil.cpp llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll llvm/tools/opt/NewPMDriver.cpp Index: llvm/tools/opt/NewPMDriver.cpp =================================================================== --- llvm/tools/opt/NewPMDriver.cpp +++ llvm/tools/opt/NewPMDriver.cpp @@ -344,8 +344,6 @@ if (Name == "asan-pipeline") { MPM.addPass( RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>()); - MPM.addPass( - createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts))); MPM.addPass(ModuleAddressSanitizerPass(Opts)); return true; } else if (Name == "asan-function-pipeline") { 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-module),function(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)' -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 @@ -1300,14 +1300,22 @@ UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {} PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M, - AnalysisManager<Module> &AM) { - GlobalsMetadata &GlobalsMD = AM.getResult<ASanGlobalsMetadataAnalysis>(M); - ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, Options.CompileKernel, - Options.Recover, UseGlobalGC, - UseOdrIndicator, DestructorKind); - if (Sanitizer.instrumentModule(M)) - return PreservedAnalyses::none(); - return PreservedAnalyses::all(); + ModuleAnalysisManager &MAM) { + GlobalsMetadata &GlobalsMD = MAM.getResult<ASanGlobalsMetadataAnalysis>(M); + ModuleAddressSanitizer ModuleSanitizer(M, &GlobalsMD, Options.CompileKernel, + Options.Recover, UseGlobalGC, + UseOdrIndicator, DestructorKind); + bool Modified = false; + auto &FAM = MAM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager(); + for (Function &F : M) { + AddressSanitizer FunctionSanitizer(M, &GlobalsMD, Options.CompileKernel, + Options.Recover, Options.UseAfterScope, + Options.UseAfterReturn); + const TargetLibraryInfo &TLI = FAM.getResult<TargetLibraryAnalysis>(F); + Modified |= FunctionSanitizer.instrumentFunction(F, &TLI); + } + Modified |= ModuleSanitizer.instrumentModule(M); + return Modified ? PreservedAnalyses::none() : PreservedAnalyses::all(); } INITIALIZE_PASS(ASanGlobalsMetadataWrapperPass, "asan-globals-md", @@ -2841,6 +2849,8 @@ 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: clang/lib/CodeGen/BackendUtil.cpp =================================================================== --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -1188,8 +1188,6 @@ MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>()); MPM.addPass(ModuleAddressSanitizerPass( Opts, UseGlobalGC, UseOdrIndicator, DestructorKind)); - MPM.addPass( - createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts))); } }; ASanPass(SanitizerKind::Address, false);
Index: llvm/tools/opt/NewPMDriver.cpp =================================================================== --- llvm/tools/opt/NewPMDriver.cpp +++ llvm/tools/opt/NewPMDriver.cpp @@ -344,8 +344,6 @@ if (Name == "asan-pipeline") { MPM.addPass( RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>()); - MPM.addPass( - createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts))); MPM.addPass(ModuleAddressSanitizerPass(Opts)); return true; } else if (Name == "asan-function-pipeline") { 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-module),function(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)' -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 @@ -1300,14 +1300,22 @@ UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {} PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M, - AnalysisManager<Module> &AM) { - GlobalsMetadata &GlobalsMD = AM.getResult<ASanGlobalsMetadataAnalysis>(M); - ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, Options.CompileKernel, - Options.Recover, UseGlobalGC, - UseOdrIndicator, DestructorKind); - if (Sanitizer.instrumentModule(M)) - return PreservedAnalyses::none(); - return PreservedAnalyses::all(); + ModuleAnalysisManager &MAM) { + GlobalsMetadata &GlobalsMD = MAM.getResult<ASanGlobalsMetadataAnalysis>(M); + ModuleAddressSanitizer ModuleSanitizer(M, &GlobalsMD, Options.CompileKernel, + Options.Recover, UseGlobalGC, + UseOdrIndicator, DestructorKind); + bool Modified = false; + auto &FAM = MAM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager(); + for (Function &F : M) { + AddressSanitizer FunctionSanitizer(M, &GlobalsMD, Options.CompileKernel, + Options.Recover, Options.UseAfterScope, + Options.UseAfterReturn); + const TargetLibraryInfo &TLI = FAM.getResult<TargetLibraryAnalysis>(F); + Modified |= FunctionSanitizer.instrumentFunction(F, &TLI); + } + Modified |= ModuleSanitizer.instrumentModule(M); + return Modified ? PreservedAnalyses::none() : PreservedAnalyses::all(); } INITIALIZE_PASS(ASanGlobalsMetadataWrapperPass, "asan-globals-md", @@ -2841,6 +2849,8 @@ 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: clang/lib/CodeGen/BackendUtil.cpp =================================================================== --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -1188,8 +1188,6 @@ MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>()); MPM.addPass(ModuleAddressSanitizerPass( Opts, UseGlobalGC, UseOdrIndicator, DestructorKind)); - MPM.addPass( - createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts))); } }; ASanPass(SanitizerKind::Address, false);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits