Skip to content

Commit

Permalink
[FreeBSD] Do not mark __stack_chk_guard as dso_local
Browse files Browse the repository at this point in the history
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
  • Loading branch information
adalava authored and nemanjai committed Nov 5, 2021
1 parent 13a442c commit 1cb9f37
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
5 changes: 4 additions & 1 deletion llvm/lib/CodeGen/TargetLoweringBase.cpp
Expand Up @@ -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);
}
}
Expand Down
12 changes: 10 additions & 2 deletions llvm/test/CodeGen/PowerPC/stack-protector.ll
Expand Up @@ -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@l([[#]])
; FREEBSD64: ld [[#]], .LC0@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]

Expand Down

0 comments on commit 1cb9f37

Please sign in to comment.