[llvm] 1cb9f37 - [FreeBSD] Do not mark __stack_chk_guard as dso_local

Nemanja Ivanovic via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 5 05:29:57 PDT 2021


Author: Alfredo Dal'Ava Junior
Date: 2021-11-05T07:29:50-05:00
New Revision: 1cb9f37a17ab528e53d38c790c1bc44a087d2a50

URL: https://github.com/llvm/llvm-project/commit/1cb9f37a17ab528e53d38c790c1bc44a087d2a50
DIFF: https://github.com/llvm/llvm-project/commit/1cb9f37a17ab528e53d38c790c1bc44a087d2a50.diff

LOG: [FreeBSD] Do not mark __stack_chk_guard as dso_local

This symbol is defined in libc.so so it is definitely not DSO-Local.
Marking it as such causes problems on some platforms (such as PowerPC).

Differential revision: https://reviews.llvm.org/D109090

Added: 
    

Modified: 
    llvm/lib/CodeGen/TargetLoweringBase.cpp
    llvm/test/CodeGen/PowerPC/stack-protector.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp
index 811d208313038..0dd45be54464d 100644
--- a/llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -1987,8 +1987,11 @@ void TargetLoweringBase::insertSSPDeclarations(Module &M) const {
     auto *GV = new GlobalVariable(M, Type::getInt8PtrTy(M.getContext()), false,
                                   GlobalVariable::ExternalLinkage, nullptr,
                                   "__stack_chk_guard");
+
+    // FreeBSD has "__stack_chk_guard" defined externally on libc.so
     if (TM.getRelocationModel() == Reloc::Static &&
-        !TM.getTargetTriple().isWindowsGNUEnvironment())
+        !TM.getTargetTriple().isWindowsGNUEnvironment() &&
+        !TM.getTargetTriple().isOSFreeBSD())
       GV->setDSOLocal(true);
   }
 }

diff  --git a/llvm/test/CodeGen/PowerPC/stack-protector.ll b/llvm/test/CodeGen/PowerPC/stack-protector.ll
index 1fcce55087326..0c59bb7e0a277 100644
--- a/llvm/test/CodeGen/PowerPC/stack-protector.ll
+++ b/llvm/test/CodeGen/PowerPC/stack-protector.ll
@@ -3,16 +3,24 @@
 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux < %s | FileCheck -check-prefix=LINUX64 %s
 ; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX32 %s
 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck -check-prefix=AIX64 %s
+; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-freebsd13 < %s | FileCheck -check-prefix=FREEBSD32 %s
+; RUN: llc -verify-machineinstrs -mtriple=powerpcle-unknown-freebsd13 < %s | FileCheck -check-prefix=FREEBSD32 %s
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-freebsd13 < %s | FileCheck -check-prefix=FREEBSD64 %s
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-freebsd13 < %s | FileCheck -check-prefix=FREEBSD64 %s
 
-; LINUX32: lwz {{[0-9]+}}, -28680(2)
-; LINUX64: ld {{[0-9]+}}, -28688(13)
+; LINUX32: lwz [[#]], -28680(2)
+; LINUX64: ld [[#]], -28688(13)
 ; AIX32: lwz {{.*}}__ssp_canary_word
 ; AIX64: ld {{.*}}__ssp_canary_word
+; FREEBSD32: lwz [[#]], __stack_chk_guard at l([[#]])
+; FREEBSD64: ld [[#]], .LC0 at toc@l([[#]])
 
 ; LINUX32: __stack_chk_fail
 ; LINUX64: __stack_chk_fail
 ; AIX32: __stack_chk_fail
 ; AIX64: __stack_chk_fail
+; FREEBSD32: bl __stack_chk_fail
+; FREEBSD64: bl __stack_chk_fail
 
 @"\01LC" = internal constant [11 x i8] c"buf == %s\0A\00"		; <[11 x i8]*> [#uses=1]
 


        


More information about the llvm-commits mailing list