[PATCH] D109090: [PPC64] fix/workaround runtime crash on FreeBSD with llvm12 and later

Alfredo Dal'Ava JĂșnior via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 15 08:09:10 PDT 2021


adalava updated this revision to Diff 380010.
adalava added a comment.

- Simplified register number check as suggested by @MaskRay
- Added test for powerpcle (32 bits LE)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D109090/new/

https://reviews.llvm.org/D109090

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


Index: llvm/test/CodeGen/PowerPC/stack-protector.ll
===================================================================
--- llvm/test/CodeGen/PowerPC/stack-protector.ll
+++ 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]
 
Index: llvm/lib/CodeGen/TargetLoweringBase.cpp
===================================================================
--- llvm/lib/CodeGen/TargetLoweringBase.cpp
+++ llvm/lib/CodeGen/TargetLoweringBase.cpp
@@ -1980,8 +1980,11 @@
     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);
   }
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109090.380010.patch
Type: text/x-patch
Size: 2371 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211015/2002ceaf/attachment.bin>


More information about the llvm-commits mailing list