diff options
author | Jonathan Metzman <metzman@chromium.org> | 2019-01-14 21:02:02 +0000 |
---|---|---|
committer | Jonathan Metzman <metzman@chromium.org> | 2019-01-14 21:02:02 +0000 |
commit | 8c1bb502a7ec0fb6037ba2dc85b00e0970ec9dc4 (patch) | |
tree | b32a95adad0d04fff99aab25225a163cbc6eef9b /lib/Transforms | |
parent | 4b787d748299e03623273191691b7360710044a1 (diff) | |
download | llvm-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.cpp | 23 |
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) |