[llvm] 654a835 - [PS5] Trap after noreturn calls, with special case for stack-check-fail
Paul Robinson via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 15 09:02:28 PDT 2022
Author: Paul Robinson
Date: 2022-06-15T09:02:17-07:00
New Revision: 654a835c3f992c9da9e1f4175570304b7e1451f0
URL: https://github.com/llvm/llvm-project/commit/654a835c3f992c9da9e1f4175570304b7e1451f0
DIFF: https://github.com/llvm/llvm-project/commit/654a835c3f992c9da9e1f4175570304b7e1451f0.diff
LOG: [PS5] Trap after noreturn calls, with special case for stack-check-fail
Added:
Modified:
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
llvm/lib/Target/X86/X86TargetMachine.cpp
llvm/test/CodeGen/X86/ps4-noreturn.ll
llvm/test/CodeGen/X86/ps4-ssp-nop.ll
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index de5ccb261e555..f5f097f4bce0e 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -3261,14 +3261,13 @@ bool IRTranslator::emitSPDescriptorFailure(StackProtectorDescriptor &SPD,
return false;
}
- // On PS4, the "return address" must still be within the calling function,
- // even if it's at the very end, so emit an explicit TRAP here.
- // Passing 'true' for doesNotReturn above won't generate the trap for us.
+ // On PS4/PS5, the "return address" must still be within the calling
+ // function, even if it's at the very end, so emit an explicit TRAP here.
// WebAssembly needs an unreachable instruction after a non-returning call,
// because the function return type can be
diff erent from __stack_chk_fail's
// return type (void).
const TargetMachine &TM = MF->getTarget();
- if (TM.getTargetTriple().isPS4() || TM.getTargetTriple().isWasm()) {
+ if (TM.getTargetTriple().isPS() || TM.getTargetTriple().isWasm()) {
LLVM_DEBUG(dbgs() << "Unhandled trap emission for stack protector fail\n");
return false;
}
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 49d8b1cfe1fd0..dca2478dc2f5d 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -2747,10 +2747,10 @@ SelectionDAGBuilder::visitSPDescriptorFailure(StackProtectorDescriptor &SPD) {
SDValue Chain =
TLI.makeLibCall(DAG, RTLIB::STACKPROTECTOR_CHECK_FAIL, MVT::isVoid,
None, CallOptions, getCurSDLoc()).second;
- // On PS4, the "return address" must still be within the calling function,
- // even if it's at the very end, so emit an explicit TRAP here.
+ // On PS4/PS5, the "return address" must still be within the calling
+ // function, even if it's at the very end, so emit an explicit TRAP here.
// Passing 'true' for doesNotReturn above won't generate the trap for us.
- if (TM.getTargetTriple().isPS4())
+ if (TM.getTargetTriple().isPS())
Chain = DAG.getNode(ISD::TRAP, getCurSDLoc(), MVT::Other, Chain);
// WebAssembly needs an unreachable instruction after a non-returning call,
// because the function return type can be
diff erent from __stack_chk_fail's
diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp
index 7834162e1d9c5..3818a49558215 100644
--- a/llvm/lib/Target/X86/X86TargetMachine.cpp
+++ b/llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -222,9 +222,9 @@ X86TargetMachine::X86TargetMachine(const Target &T, const Triple &TT,
getEffectiveX86CodeModel(CM, JIT, TT.getArch() == Triple::x86_64),
OL),
TLOF(createTLOF(getTargetTriple())), IsJIT(JIT) {
- // On PS4, the "return address" of a 'noreturn' call must still be within
+ // On PS4/PS5, the "return address" of a 'noreturn' call must still be within
// the calling function, and TrapUnreachable is an easy way to get that.
- if (TT.isPS4() || TT.isOSBinFormatMachO()) {
+ if (TT.isPS() || TT.isOSBinFormatMachO()) {
this->Options.TrapUnreachable = true;
this->Options.NoTrapAfterNoreturn = TT.isOSBinFormatMachO();
}
diff --git a/llvm/test/CodeGen/X86/ps4-noreturn.ll b/llvm/test/CodeGen/X86/ps4-noreturn.ll
index 4c14f21893258..4dd853a798a08 100644
--- a/llvm/test/CodeGen/X86/ps4-noreturn.ll
+++ b/llvm/test/CodeGen/X86/ps4-noreturn.ll
@@ -1,4 +1,5 @@
; RUN: llc < %s -mtriple=x86_64-scei-ps4 | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-sie-ps5 | FileCheck %s
declare i32 @personality(...)
diff --git a/llvm/test/CodeGen/X86/ps4-ssp-nop.ll b/llvm/test/CodeGen/X86/ps4-ssp-nop.ll
index 9fefeca92e5a7..b43c66fd92fef 100644
--- a/llvm/test/CodeGen/X86/ps4-ssp-nop.ll
+++ b/llvm/test/CodeGen/X86/ps4-ssp-nop.ll
@@ -1,9 +1,13 @@
; Verify that a ud2 is generated after the call to __stack_chk_fail.
; RUN: llc < %s -mtriple=x86_64-scei-ps4 -enable-selectiondag-sp=false -O0 -o - | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-sie-ps5 -enable-selectiondag-sp=false -O0 -o - | FileCheck %s
; RUN: llc < %s -mtriple=x86_64-scei-ps4 -enable-selectiondag-sp=false -O2 -o - | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-sie-ps5 -enable-selectiondag-sp=false -O2 -o - | FileCheck %s
; RUN: llc < %s -mtriple=x86_64-scei-ps4 -enable-selectiondag-sp=true -O0 -o - | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-sie-ps5 -enable-selectiondag-sp=true -O0 -o - | FileCheck %s
; RUN: llc < %s -mtriple=x86_64-scei-ps4 -enable-selectiondag-sp=true -O2 -o - | FileCheck %s
+; RUN: llc < %s -mtriple=x86_64-sie-ps5 -enable-selectiondag-sp=true -O2 -o - | FileCheck %s
; CHECK: check_input:
More information about the llvm-commits
mailing list