From: Kostya Serebryany Date: Sat, 9 Sep 2017 05:30:13 +0000 (+0000) Subject: [sanitizer-coverage] call appendToUsed once per module, not once per function (which... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eba4372133e0279fdce28103e32606e985963f36;p=llvm [sanitizer-coverage] call appendToUsed once per module, not once per function (which is too slow) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312855 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index a3128fd089d..d950e2e730f 100644 --- a/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/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,