[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
This commit is contained in:
Alfredo Dal'Ava Junior
2021-11-05 07:23:24 -05:00
committed by Nemanja Ivanovic
parent 13a442ca49
commit 1cb9f37a17
2 changed files with 14 additions and 3 deletions

View File

@@ -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);
}
}

View File

@@ -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]