[lld] [lld] Error on unsupported split stack (PR #88063)

Patrick O'Neill via llvm-commits llvm-commits at lists.llvm.org
Fri May 3 17:06:24 PDT 2024


https://github.com/patrick-rivos updated https://github.com/llvm/llvm-project/pull/88063

>From 9bc9fb0aa4374f62c3538d3df1e252e416c85afc Mon Sep 17 00:00:00 2001
From: Patrick O'Neill <patrick at rivosinc.com>
Date: Mon, 8 Apr 2024 15:54:46 -0700
Subject: [PATCH 1/2] [lld] Error on unsupported split stack

Targets with no `-fstack-split` support now emit `ld.lld: error: Target doesn't support split stacks.` instead of `UNREACHABLE executed` with a backtrace asking the user to report a bug.

Resolves #88061
---
 lld/ELF/Target.cpp                             |  2 +-
 lld/test/ELF/Inputs/riscv-split-stack-callee.s |  4 ++++
 lld/test/ELF/riscv-split-stack.s               | 15 +++++++++++++++
 3 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 lld/test/ELF/Inputs/riscv-split-stack-callee.s
 create mode 100644 lld/test/ELF/riscv-split-stack.s

diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index d879a427e9c096..735b2a82d851b4 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -141,7 +141,7 @@ bool TargetInfo::needsThunk(RelExpr expr, RelType type, const InputFile *file,
 
 bool TargetInfo::adjustPrologueForCrossSplitStack(uint8_t *loc, uint8_t *end,
                                                   uint8_t stOther) const {
-  llvm_unreachable("Target doesn't support split stacks.");
+  fatal("Target doesn't support split stacks.");
 }
 
 bool TargetInfo::inBranchRange(RelType type, uint64_t src, uint64_t dst) const {
diff --git a/lld/test/ELF/Inputs/riscv-split-stack-callee.s b/lld/test/ELF/Inputs/riscv-split-stack-callee.s
new file mode 100644
index 00000000000000..f4368e50623fee
--- /dev/null
+++ b/lld/test/ELF/Inputs/riscv-split-stack-callee.s
@@ -0,0 +1,4 @@
+        .globl  test
+        .type   test, at function
+test:
+	ret
diff --git a/lld/test/ELF/riscv-split-stack.s b/lld/test/ELF/riscv-split-stack.s
new file mode 100644
index 00000000000000..86f9b2711334d3
--- /dev/null
+++ b/lld/test/ELF/riscv-split-stack.s
@@ -0,0 +1,15 @@
+# REQUIRES: riscv
+
+# RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.64.o
+# RUN: llvm-mc -filetype=obj -triple=riscv64 %p/Inputs/riscv-split-stack-callee.s -o %t.64.2.o
+# RUN: not ld.lld %t.64.o %t.64.2.o -o %t.64 2>&1 | FileCheck %s
+# CHECK: ld.lld: error: Target doesn't support split stacks.
+
+        .globl  _start
+        .type   _start, at function
+_start:
+        call    test
+	ret
+end:
+        .size   _start, end-_start
+        .section        ".note.GNU-split-stack","", at progbits

>From b9207232ff7010bc8ede8e68f19119086e15429c Mon Sep 17 00:00:00 2001
From: Patrick O'Neill <patrick at rivosinc.com>
Date: Fri, 3 May 2024 17:05:28 -0700
Subject: [PATCH 2/2] fixup! [lld] Error on unsupported split stack

---
 lld/ELF/Target.cpp                             |  2 +-
 lld/test/ELF/Inputs/riscv-split-stack-callee.s |  4 ----
 lld/test/ELF/riscv-split-stack.s               | 15 ++++++++++++---
 3 files changed, 13 insertions(+), 8 deletions(-)
 delete mode 100644 lld/test/ELF/Inputs/riscv-split-stack-callee.s

diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index 735b2a82d851b4..3e221646ce2470 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -141,7 +141,7 @@ bool TargetInfo::needsThunk(RelExpr expr, RelType type, const InputFile *file,
 
 bool TargetInfo::adjustPrologueForCrossSplitStack(uint8_t *loc, uint8_t *end,
                                                   uint8_t stOther) const {
-  fatal("Target doesn't support split stacks.");
+  fatal("target doesn't support split stacks");
 }
 
 bool TargetInfo::inBranchRange(RelType type, uint64_t src, uint64_t dst) const {
diff --git a/lld/test/ELF/Inputs/riscv-split-stack-callee.s b/lld/test/ELF/Inputs/riscv-split-stack-callee.s
deleted file mode 100644
index f4368e50623fee..00000000000000
--- a/lld/test/ELF/Inputs/riscv-split-stack-callee.s
+++ /dev/null
@@ -1,4 +0,0 @@
-        .globl  test
-        .type   test, at function
-test:
-	ret
diff --git a/lld/test/ELF/riscv-split-stack.s b/lld/test/ELF/riscv-split-stack.s
index 86f9b2711334d3..e6ebf9f3cb5aec 100644
--- a/lld/test/ELF/riscv-split-stack.s
+++ b/lld/test/ELF/riscv-split-stack.s
@@ -1,10 +1,12 @@
 # REQUIRES: riscv
 
-# RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.64.o
-# RUN: llvm-mc -filetype=obj -triple=riscv64 %p/Inputs/riscv-split-stack-callee.s -o %t.64.2.o
+# RUN: split-file %s %t
+# RUN: llvm-mc -filetype=obj -triple=riscv64 %t/main.s -o %t.64.o
+# RUN: llvm-mc -filetype=obj -triple=riscv64 %t/callee.s -o %t.64.2.o
 # RUN: not ld.lld %t.64.o %t.64.2.o -o %t.64 2>&1 | FileCheck %s
-# CHECK: ld.lld: error: Target doesn't support split stacks.
+# CHECK: error: target doesn't support split stacks
 
+#--- main.s
         .globl  _start
         .type   _start, at function
 _start:
@@ -13,3 +15,10 @@ _start:
 end:
         .size   _start, end-_start
         .section        ".note.GNU-split-stack","", at progbits
+
+
+#--- callee.s
+        .globl  test
+        .type   test, at function
+test:
+	ret



More information about the llvm-commits mailing list