diff options
author | Max Moroz <mmoroz@chromium.org> | 2018-10-12 13:59:31 +0000 |
---|---|---|
committer | Max Moroz <mmoroz@chromium.org> | 2018-10-12 13:59:31 +0000 |
commit | 4d010ca35bbb9a084f3726c3b463871bf61d8ece (patch) | |
tree | aa0e6f68ce4c35eb5551f83bf386bd4eb9236f7d /llvm/lib/Transforms | |
parent | 4cb05713de704d43f6f813dd6d999677b5e84912 (diff) | |
download | bcm5719-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.cpp | 7 |
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); } |