From 2518433f861fcb877d0a7bdd9aec1aec1f77505a Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Fri, 4 Dec 2020 16:57:45 -0800 Subject: [PATCH] Make __stack_chk_guard dso_local if Reloc::Static This is currently implied by TargetMachine::shouldAssumeDSOLocal but will be changed in the future. --- llvm/lib/CodeGen/TargetLoweringBase.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp index 23b62456e2c3..61a2de711af8 100644 --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -1969,10 +1969,13 @@ Value *TargetLoweringBase::getIRStackGuard(IRBuilder<> &IRB) const { // Currently only support "standard" __stack_chk_guard. // TODO: add LOAD_STACK_GUARD support. void TargetLoweringBase::insertSSPDeclarations(Module &M) const { - if (!M.getNamedValue("__stack_chk_guard")) - new GlobalVariable(M, Type::getInt8PtrTy(M.getContext()), false, - GlobalVariable::ExternalLinkage, - nullptr, "__stack_chk_guard"); + if (!M.getNamedValue("__stack_chk_guard")) { + auto *GV = new GlobalVariable(M, Type::getInt8PtrTy(M.getContext()), false, + GlobalVariable::ExternalLinkage, nullptr, + "__stack_chk_guard"); + if (getTargetMachine().getRelocationModel() == Reloc::Static) + GV->setDSOLocal(true); + } } // Currently only support "standard" __stack_chk_guard.