summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorMax Moroz <mmoroz@chromium.org>2018-10-12 13:59:31 +0000
committerMax Moroz <mmoroz@chromium.org>2018-10-12 13:59:31 +0000
commit4d010ca35bbb9a084f3726c3b463871bf61d8ece (patch)
treeaa0e6f68ce4c35eb5551f83bf386bd4eb9236f7d /llvm/lib/Transforms
parent4cb05713de704d43f6f813dd6d999677b5e84912 (diff)
downloadbcm5719-llvm-4d010ca35bbb9a084f3726c3b463871bf61d8ece.tar.gz
bcm5719-llvm-4d010ca35bbb9a084f3726c3b463871bf61d8ece.zip
[SanitizerCoverage] Make Inline8bit and TracePC counters dead stripping resistant.
Summary: Otherwise, at least on Mac, the linker eliminates unused symbols which causes libFuzzer to error out due to a mismatch of the sizes of coverage tables. Issue in Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=892167 Reviewers: morehouse, kcc, george.karpenkov Reviewed By: morehouse Subscribers: kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D53113 llvm-svn: 344345
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
index 2a055920c3e..bf461c61ede 100644
--- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
+++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
@@ -594,6 +594,7 @@ GlobalVariable *SanitizerCoverageModule::CreateFunctionLocalArrayInSection(
Array->setSection(getSectionName(Section));
Array->setAlignment(Ty->isPointerTy() ? DL->getPointerSize()
: Ty->getPrimitiveSizeInBits() / 8);
+ GlobalsToAppendToUsed.push_back(Array);
GlobalsToAppendToCompilerUsed.push_back(Array);
MDNode *MD = MDNode::get(F.getContext(), ValueAsMetadata::get(&F));
Array->addMetadata(LLVMContext::MD_associated, *MD);
@@ -631,14 +632,14 @@ SanitizerCoverageModule::CreatePCArray(Function &F,
void SanitizerCoverageModule::CreateFunctionLocalArrays(
Function &F, ArrayRef<BasicBlock *> AllBlocks) {
- if (Options.TracePCGuard) {
+ if (Options.TracePCGuard)
FunctionGuardArray = CreateFunctionLocalArrayInSection(
AllBlocks.size(), F, Int32Ty, SanCovGuardsSectionName);
- GlobalsToAppendToUsed.push_back(FunctionGuardArray);
- }
+
if (Options.Inline8bitCounters)
Function8bitCounterArray = CreateFunctionLocalArrayInSection(
AllBlocks.size(), F, Int8Ty, SanCovCountersSectionName);
+
if (Options.PCTable)
FunctionPCsArray = CreatePCArray(F, AllBlocks);
}
OpenPOWER on IntegriCloud