Make __stack_chk_guard dso_local if Reloc::Static
authorFangrui Song <i@maskray.me>
Sat, 5 Dec 2020 00:57:45 +0000 (16:57 -0800)
committerFangrui Song <i@maskray.me>
Sat, 5 Dec 2020 00:57:45 +0000 (16:57 -0800)
This is currently implied by TargetMachine::shouldAssumeDSOLocal
but will be changed in the future.

llvm/lib/CodeGen/TargetLoweringBase.cpp

index 23b6245..61a2de7 100644 (file)
@@ -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.