[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:
committed by
Nemanja Ivanovic
parent
13a442ca49
commit
1cb9f37a17
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user