diff options
| author | Matt Morehouse <mascasa@google.com> | 2018-06-15 20:12:58 +0000 | 
|---|---|---|
| committer | Matt Morehouse <mascasa@google.com> | 2018-06-15 20:12:58 +0000 | 
| commit | 0ea9a90b3d6b2920e96dd8bbc971c236fe048139 (patch) | |
| tree | cb23edde20cd7f8e201132f79a509276c6fba76a /llvm/lib/Transforms | |
| parent | 82b2e7431ded460124a31efe5e541db20c61c497 (diff) | |
| download | bcm5719-llvm-0ea9a90b3d6b2920e96dd8bbc971c236fe048139.tar.gz bcm5719-llvm-0ea9a90b3d6b2920e96dd8bbc971c236fe048139.zip | |
[SanitizerCoverage] Add associated metadata to pc-tables.
Summary:
Using associated metadata rather than llvm.used allows linkers to
perform dead stripping with -fsanitize-coverage=pc-table.  Unfortunately
in my local tests, LLD was the only linker that made use of this metadata.
Partially addresses https://bugs.llvm.org/show_bug.cgi?id=34636 and fixes
https://github.com/google/sanitizers/issues/971.
Reviewers: eugenis
Reviewed By: eugenis
Subscribers: Dor1s, hiraditya, llvm-commits, kcc
Differential Revision: https://reviews.llvm.org/D48203
llvm-svn: 334858
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index a19cd6d2332..fe08632f4df 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -243,6 +243,7 @@ private:    GlobalVariable *Function8bitCounterArray;  // for inline-8bit-counters.    GlobalVariable *FunctionPCsArray;  // for pc-table.    SmallVector<GlobalValue *, 20> GlobalsToAppendToUsed; +  SmallVector<GlobalValue *, 20> GlobalsToAppendToCompilerUsed;    SanitizerCoverageOptions Options;  }; @@ -405,6 +406,7 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {    // so we need to prevent them from being dead stripped.    if (TargetTriple.isOSBinFormatMachO())      appendToUsed(M, GlobalsToAppendToUsed); +  appendToCompilerUsed(M, GlobalsToAppendToCompilerUsed);    return true;  } @@ -598,7 +600,9 @@ void SanitizerCoverageModule::CreateFunctionLocalArrays(    }    if (Options.PCTable) {      FunctionPCsArray = CreatePCArray(F, AllBlocks); -    GlobalsToAppendToUsed.push_back(FunctionPCsArray); +    GlobalsToAppendToCompilerUsed.push_back(FunctionPCsArray); +    MDNode *MD = MDNode::get(F.getContext(), ValueAsMetadata::get(&F)); +    FunctionPCsArray->addMetadata(LLVMContext::MD_associated, *MD);    }  } | 

