From 4192b9631372b5a43c256fcaec98e6aaa9975d05 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Sat, 9 Sep 2017 05:30:13 +0000 Subject: [PATCH] [sanitizer-coverage] call appendToUsed once per module, not once per function (which is too slow) llvm-svn: 312855 --- .../Instrumentation/SanitizerCoverage.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index a3128fd089dc..d950e2e730f2 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -242,6 +242,7 @@ private: GlobalVariable *FunctionGuardArray; // for trace-pc-guard. GlobalVariable *Function8bitCounterArray; // for inline-8bit-counters. GlobalVariable *FunctionPCsArray; // for pc-table. + SmallVector GlobalsToAppendToUsed; SanitizerCoverageOptions Options; }; @@ -400,6 +401,10 @@ bool SanitizerCoverageModule::runOnModule(Module &M) { {IRB.CreatePointerCast(SecStartEnd.first, IntptrPtrTy), IRB.CreatePointerCast(SecStartEnd.second, IntptrPtrTy)}); } + // We don't reference these arrays directly in any of our runtime functions, + // so we need to prevent them from being dead stripped. + if (TargetTriple.isOSBinFormatMachO()) + appendToUsed(M, GlobalsToAppendToUsed); return true; } @@ -579,25 +584,20 @@ SanitizerCoverageModule::CreatePCArray(Function &F, void SanitizerCoverageModule::CreateFunctionLocalArrays( Function &F, ArrayRef AllBlocks) { - SmallVector LocalArrays; if (Options.TracePCGuard) { FunctionGuardArray = CreateFunctionLocalArrayInSection( AllBlocks.size(), F, Int32Ty, SanCovGuardsSectionName); - LocalArrays.push_back(FunctionGuardArray); + GlobalsToAppendToUsed.push_back(FunctionGuardArray); } if (Options.Inline8bitCounters) { Function8bitCounterArray = CreateFunctionLocalArrayInSection( AllBlocks.size(), F, Int8Ty, SanCovCountersSectionName); - LocalArrays.push_back(Function8bitCounterArray); + GlobalsToAppendToUsed.push_back(Function8bitCounterArray); } if (Options.PCTable) { FunctionPCsArray = CreatePCArray(F, AllBlocks); - LocalArrays.push_back(FunctionPCsArray); + GlobalsToAppendToUsed.push_back(FunctionPCsArray); } - - // We don't reference these arrays directly in any of our runtime functions, - // so we need to prevent them from being dead stripped. - appendToUsed(*F.getParent(), LocalArrays); } bool SanitizerCoverageModule::InjectCoverage(Function &F,