https://github.com/zyedidia updated 
https://github.com/llvm/llvm-project/pull/209392

>From f359b85d31fca47d5f2d3d45767a579661124fc1 Mon Sep 17 00:00:00 2001
From: Zachary Yedidia <[email protected]>
Date: Wed, 29 Apr 2026 18:00:29 -0400
Subject: [PATCH 1/2] [LFI] Remove stg/za instructions in libunwind

---
 libunwind/src/DwarfInstructions.hpp | 2 +-
 libunwind/src/UnwindRegistersSave.S | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/libunwind/src/DwarfInstructions.hpp 
b/libunwind/src/DwarfInstructions.hpp
index 56220c327a7fa..4f53df3e74b75 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -216,7 +216,7 @@ int DwarfInstructions<A, R>::stepWithDwarf(
       // __unw_step_stage2 is not used for cross unwinding, so we use
       // __aarch64__ rather than LIBUNWIND_TARGET_AARCH64 to make sure we are
       // building for AArch64 natively.
-#if defined(__aarch64__)
+#if defined(__aarch64__) && !defined(__LFI__)
       if (stage2 && cieInfo.mteTaggedFrame) {
         pint_t sp = registers.getSP();
         pint_t p = sp;
diff --git a/libunwind/src/UnwindRegistersSave.S 
b/libunwind/src/UnwindRegistersSave.S
index a82ebd1ead23b..708dcd9c50711 100644
--- a/libunwind/src/UnwindRegistersSave.S
+++ b/libunwind/src/UnwindRegistersSave.S
@@ -854,6 +854,10 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
   .p2align 2
 DEFINE_LIBUNWIND_FUNCTION(__libunwind_Registers_arm64_za_disable)
   .variant_pcs __libunwind_Registers_arm64_za_disable
+#if defined(__LFI__)
+  mov x0, xzr
+  ret
+#else
 #if __has_feature(ptrauth_calls)
   pacibsp
 #endif
@@ -897,6 +901,7 @@ 
DEFINE_LIBUNWIND_FUNCTION(__libunwind_Registers_arm64_za_disable)
 #else
   ret
 #endif
+#endif
 
 #elif defined(__arm__) && !defined(__APPLE__)
 

>From 593b10db637bea6c46a4b69fbdb6972ac6ba40fb Mon Sep 17 00:00:00 2001
From: Zachary Yedidia <[email protected]>
Date: Sat, 18 Jul 2026 17:26:39 -0400
Subject: [PATCH 2/2] Return 1 from function to indicate failure

---
 libunwind/src/UnwindRegistersSave.S | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/src/UnwindRegistersSave.S 
b/libunwind/src/UnwindRegistersSave.S
index 708dcd9c50711..f89709d64358d 100644
--- a/libunwind/src/UnwindRegistersSave.S
+++ b/libunwind/src/UnwindRegistersSave.S
@@ -855,7 +855,7 @@ DEFINE_LIBUNWIND_FUNCTION(__unw_getcontext)
 DEFINE_LIBUNWIND_FUNCTION(__libunwind_Registers_arm64_za_disable)
   .variant_pcs __libunwind_Registers_arm64_za_disable
 #if defined(__LFI__)
-  mov x0, xzr
+  mov x0, #1
   ret
 #else
 #if __has_feature(ptrauth_calls)

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to