summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2018-10-12 23:21:48 +0000
committerKostya Serebryany <kcc@google.com>2018-10-12 23:21:48 +0000
commitbc504559ec6723b61535fb8df48a736420db3891 (patch)
treebec4968362f2f65520fe63c6703cbd9c7dceb0e3 /llvm/lib/Transforms
parent748d080e6288ec3b2edd1a1bfdcf21491e816fd3 (diff)
downloadbcm5719-llvm-bc504559ec6723b61535fb8df48a736420db3891.tar.gz
bcm5719-llvm-bc504559ec6723b61535fb8df48a736420db3891.zip
move GetOrCreateFunctionComdat to Instrumentation.cpp/Instrumentation.h
Summary: GetOrCreateFunctionComdat is currently used in SanitizerCoverage, where it's defined. I'm planing to use it in HWASAN as well, so moving it into a common location. NFC Reviewers: morehouse Reviewed By: morehouse Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D53218 llvm-svn: 344433
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Instrumentation/Instrumentation.cpp15
-rw-r--r--llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp22
2 files changed, 19 insertions, 18 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp b/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp
index 1c739c09e39..55b449ffca1 100644
--- a/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp
+++ b/llvm/lib/Transforms/Instrumentation/Instrumentation.cpp
@@ -70,6 +70,21 @@ GlobalVariable *llvm::createPrivateGlobalForString(Module &M, StringRef Str,
return GV;
}
+Comdat *llvm::GetOrCreateFunctionComdat(Function &F,
+ const std::string &ModuleId) {
+ if (auto Comdat = F.getComdat()) return Comdat;
+ assert(F.hasName());
+ Module *M = F.getParent();
+ std::string Name = F.getName();
+ if (F.hasLocalLinkage()) {
+ if (ModuleId.empty())
+ return nullptr;
+ Name += ModuleId;
+ }
+ F.setComdat(M->getOrInsertComdat(Name));
+ return F.getComdat();
+}
+
/// initializeInstrumentation - Initialize all passes in the TransformUtils
/// library.
void llvm::initializeInstrumentation(PassRegistry &Registry) {
diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
index 0bed4139518..b3450728f04 100644
--- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
+++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
@@ -220,8 +220,6 @@ private:
MDNode::get(*C, None));
}
- Comdat *GetOrCreateFunctionComdat(Function &F);
-
std::string getSectionName(const std::string &Section) const;
std::string getSectionStart(const std::string &Section) const;
std::string getSectionEnd(const std::string &Section) const;
@@ -590,28 +588,16 @@ bool SanitizerCoverageModule::runOnFunction(Function &F) {
return true;
}
-Comdat *SanitizerCoverageModule::GetOrCreateFunctionComdat(Function &F) {
- if (auto Comdat = F.getComdat()) return Comdat;
- if (!TargetTriple.isOSBinFormatELF()) return nullptr;
- assert(F.hasName());
- std::string Name = F.getName();
- if (F.hasLocalLinkage()) {
- if (CurModuleUniqueId.empty()) return nullptr;
- Name += CurModuleUniqueId;
- }
- auto Comdat = CurModule->getOrInsertComdat(Name);
- F.setComdat(Comdat);
- return Comdat;
-}
-
GlobalVariable *SanitizerCoverageModule::CreateFunctionLocalArrayInSection(
size_t NumElements, Function &F, Type *Ty, const char *Section) {
ArrayType *ArrayTy = ArrayType::get(Ty, NumElements);
auto Array = new GlobalVariable(
*CurModule, ArrayTy, false, GlobalVariable::PrivateLinkage,
Constant::getNullValue(ArrayTy), "__sancov_gen_");
- if (auto Comdat = GetOrCreateFunctionComdat(F))
- Array->setComdat(Comdat);
+
+ if (TargetTriple.isOSBinFormatELF())
+ if (auto Comdat = GetOrCreateFunctionComdat(F, CurModuleUniqueId))
+ Array->setComdat(Comdat);
Array->setSection(getSectionName(Section));
Array->setAlignment(Ty->isPointerTy() ? DL->getPointerSize()
: Ty->getPrimitiveSizeInBits() / 8);
OpenPOWER on IntegriCloud