summaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
authorJonathan Metzman <metzman@chromium.org>2019-01-14 21:02:02 +0000
committerJonathan Metzman <metzman@chromium.org>2019-01-14 21:02:02 +0000
commit8c1bb502a7ec0fb6037ba2dc85b00e0970ec9dc4 (patch)
treeb32a95adad0d04fff99aab25225a163cbc6eef9b /lib/Transforms
parent4b787d748299e03623273191691b7360710044a1 (diff)
downloadllvm-8c1bb502a7ec0fb6037ba2dc85b00e0970ec9dc4.tar.gz
[SanitizerCoverage][NFC] Use appendToUsed instead of include
Summary: Use appendToUsed instead of include to ensure that SanitizerCoverage's constructors are not stripped. Also, use isOSBinFormatCOFF() to determine if target binary format is COFF. Reviewers: pcc Reviewed By: pcc Subscribers: hiraditya Differential Revision: https://reviews.llvm.org/D56369 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351118 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Instrumentation/SanitizerCoverage.cpp23
1 files changed, 7 insertions, 16 deletions
diff --git a/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
index 7f683ad089fb..729197fcefdc 100644
--- a/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
+++ b/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
@@ -264,7 +264,7 @@ SanitizerCoverageModule::CreateSecStartEnd(Module &M, const char *Section,
SecEnd->setVisibility(GlobalValue::HiddenVisibility);
IRBuilder<> IRB(M.getContext());
Value *SecEndPtr = IRB.CreatePointerCast(SecEnd, Ty);
- if (TargetTriple.getObjectFormat() != Triple::COFF)
+ if (!TargetTriple.isOSBinFormatCOFF())
return std::make_pair(IRB.CreatePointerCast(SecStart, Ty), SecEndPtr);
// Account for the fact that on windows-msvc __start_* symbols actually
@@ -293,24 +293,15 @@ Function *SanitizerCoverageModule::CreateInitCallsForSections(
appendToGlobalCtors(M, CtorFunc, SanCtorAndDtorPriority);
}
- if (TargetTriple.getObjectFormat() == Triple::COFF) {
+ if (TargetTriple.isOSBinFormatCOFF()) {
// In COFF files, if the contructors are set as COMDAT (they are because
// COFF supports COMDAT) and the linker flag /OPT:REF (strip unreferenced
// functions and data) is used, the constructors get stripped. To prevent
- // this, give the constructors weak ODR linkage and tell the linker to
- // always include the sancov constructor. This way the linker can
- // deduplicate the constructors but always leave one copy.
+ // this, give the constructors weak ODR linkage and ensure the linker knows
+ // to include the sancov constructor. This way the linker can deduplicate
+ // the constructors but always leave one copy.
CtorFunc->setLinkage(GlobalValue::WeakODRLinkage);
- SmallString<20> PartialIncDirective("/include:");
- // Get constructor's mangled name in order to support i386.
- SmallString<40> MangledName;
- Mangler().getNameWithPrefix(MangledName, CtorFunc, true);
- Twine IncDirective = PartialIncDirective + MangledName;
- Metadata *Args[1] = {MDString::get(*C, IncDirective.str())};
- MDNode *MetadataNode = MDNode::get(*C, Args);
- NamedMDNode *NamedMetadata =
- M.getOrInsertNamedMetadata("llvm.linker.options");
- NamedMetadata->addOperand(MetadataNode);
+ appendToUsed(M, CtorFunc);
}
return CtorFunc;
}
@@ -833,7 +824,7 @@ void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F, BasicBlock &BB,
std::string
SanitizerCoverageModule::getSectionName(const std::string &Section) const {
- if (TargetTriple.getObjectFormat() == Triple::COFF) {
+ if (TargetTriple.isOSBinFormatCOFF()) {
if (Section == SanCovCountersSectionName)
return ".SCOV$CM";
if (Section == SanCovPCsSectionName)