https://github.com/jroelofs updated 
https://github.com/llvm/llvm-project/pull/205188

>From c05793d405bb826b25dc54bbb5800d62aee4f34d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Thu, 18 Jun 2026 18:13:35 -0700
Subject: [PATCH 01/14] [libunwind] Fix exposure of UNW_AARCH64_RA_SIGN_STATE
 through _Unwind_GetGR

The pseudo register was previously hacked in unrder kRegisterIsUndefined,
leaving it in a state that was only accessible from within the unwinder itself.
To fix this, allowing external access to the state (and therefore tests!), we
invent a new register location kRegisterIsPseudo to record the additional state
that the register has been defined by a .cfi_negate_ra_state opcode having been
executed.
---
 libunwind/src/DwarfInstructions.hpp   |   8 ++
 libunwind/src/DwarfParser.hpp         |  11 +--
 libunwind/test/ra_sign_state.pass.cpp | 125 ++++++++++++++++++++++++++
 3 files changed, 139 insertions(+), 5 deletions(-)
 create mode 100644 libunwind/test/ra_sign_state.pass.cpp

diff --git a/libunwind/src/DwarfInstructions.hpp 
b/libunwind/src/DwarfInstructions.hpp
index 165c4a99e9a92..0133b2dd330e7 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -113,8 +113,14 @@ typename A::pint_t DwarfInstructions<A, 
R>::getSavedRegister(
 
   case CFI_Parser<A>::kRegisterInRegister:
     return registers.getRegister((int)savedReg.value);
+
   case CFI_Parser<A>::kRegisterUndefined:
     return 0;
+
+  case CFI_Parser<A>::kRegisterIsPseudo:
+#if defined(_LIBUNWIND_TARGET_AARCH64)
+    return savedReg.value;
+#endif
   case CFI_Parser<A>::kRegisterUnused:
   case CFI_Parser<A>::kRegisterOffsetFromCFA:
     // FIX ME
@@ -141,6 +147,7 @@ double DwarfInstructions<A, R>::getSavedFloatRegister(
 #ifndef _LIBUNWIND_TARGET_ARM
     return registers.getFloatRegister((int)savedReg.value);
 #endif
+  case CFI_Parser<A>::kRegisterIsPseudo:
   case CFI_Parser<A>::kRegisterIsExpression:
   case CFI_Parser<A>::kRegisterUnused:
   case CFI_Parser<A>::kRegisterOffsetFromCFA:
@@ -164,6 +171,7 @@ v128 DwarfInstructions<A, R>::getSavedVectorRegister(
         evaluateExpression((pint_t)savedReg.value, addressSpace,
                             registers, cfa));
 
+  case CFI_Parser<A>::kRegisterIsPseudo:
   case CFI_Parser<A>::kRegisterIsExpression:
   case CFI_Parser<A>::kRegisterUnused:
   case CFI_Parser<A>::kRegisterUndefined:
diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index 8e080fb33c5f8..ba40b757ab977 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -81,7 +81,8 @@ class CFI_Parser {
     kRegisterOffsetFromCFA,
     kRegisterInRegister,
     kRegisterAtExpression,
-    kRegisterIsExpression
+    kRegisterIsExpression,
+    kRegisterIsPseudo,
   };
   struct RegisterLocation {
     RegisterSavedWhere location;
@@ -794,8 +795,8 @@ bool CFI_Parser<A>::parseFDEInstructions(
         case REGISTERS_ARM64: {
           int64_t value =
               results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x1;
-          results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
-                                    initialState);
+          results->setRegister(UNW_AARCH64_RA_SIGN_STATE, kRegisterIsPseudo,
+                               value, initialState);
           _LIBUNWIND_TRACE_DWARF("DW_CFA_AARCH64_negate_ra_state\n");
         } break;
 #endif
@@ -846,8 +847,8 @@ bool CFI_Parser<A>::parseFDEInstructions(
       case DW_CFA_AARCH64_negate_ra_state_with_pc: {
         int64_t value =
             results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x3;
-        results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
-                                  initialState);
+        results->setRegister(UNW_AARCH64_RA_SIGN_STATE, kRegisterIsPseudo,
+                             value, initialState);
         // When using Feat_PAuthLR, the PC value needs to be captured so that
         // during unwinding, the correct PC value is used for 
re-authentication.
         // It is assumed that the CFI is placed before the signing instruction.
diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
new file mode 100644
index 0000000000000..1e113955db027
--- /dev/null
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -0,0 +1,125 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// REQUIRES: target={{aarch64.*}}
+// UNSUPPORTED: target={{.*-windows.*}}
+
+#undef NDEBUG
+#include "support/func_bounds.h"
+#include <assert.h>
+#include <inttypes.h>
+#include <libunwind.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <unwind.h>
+
+#if defined(__APPLE__)
+#include <sys/sysctl.h>
+#endif
+
+// Note: This test requires FEAT_PAuth (and is setup to pass on other targets).
+
+#if defined(__APPLE__)
+static bool checkHasPAuth() {
+  int has_pauth = 0;
+  size_t size = sizeof(has_pauth);
+  if (sysctlbyname("hw.optional.arm.FEAT_PAuth", &has_pauth, &size, NULL, 0))
+    return false;
+  return has_pauth != 0;
+}
+#else
+static bool checkHasPAuth() {
+  // TODO: Support other platforms.
+  return false;
+}
+#endif
+
+FUNC_BOUNDS_DECL(main_func);
+
+_Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
+  uint64_t ra_sign_state =
+      (uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
+
+  uintptr_t ip = _Unwind_GetIP(ctx);
+  if (ip >= (uintptr_t)FUNC_START(main_func) &&
+      ip < (uintptr_t)FUNC_END(main_func)) {
+
+    // Collect the RA from the callee that will return to main.
+    *(uint64_t *)arg = ra_sign_state;
+
+    // Unwind until main is reached, above frames depend on the platform and
+    // architecture.
+    return _URC_END_OF_STACK;
+  }
+
+#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+  assert(ra_sign_state == 1);
+#else
+  assert(ra_sign_state == 0);
+#endif
+
+  return _URC_NO_REASON;
+}
+
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
+  uint64_t sign_state = -1;
+  _Unwind_Backtrace(frame_handler, &sign_state);
+  printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+  return sign_state;
+}
+
+__attribute__((noinline)) uint64_t check_vanilla() {
+  return get_main_ra_sign_state();
+}
+
+__attribute__((naked)) uint64_t check_negate() {
+  asm(".cfi_negate_ra_state\n"
+      "pacibsp\n"
+
+      "stp x29, x30, [sp, #-16]!\n"
+      ".cfi_def_cfa_offset 16\n"
+      ".cfi_offset x29, -16\n"
+      ".cfi_offset x30, -8\n"
+
+      "bl _get_main_ra_sign_state\n"
+
+      "ldp x29, x30, [sp], #16\n"
+      ".cfi_def_cfa_offset 0\n"
+      ".cfi_restore x29\n"
+      ".cfi_restore x30\n"
+
+      ".cfi_negate_ra_state\n"
+      "retab");
+}
+
+FUNC_ATTR(main_func) int main(int, char **) {
+  uint64_t ret;
+
+  ret = check_vanilla();
+  assert((ret & 2) == ret);
+
+#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+  assert(ret == 1);
+#else
+  assert(ret == 0);
+#endif
+
+  if (!checkHasPAuth()) {
+    printf("target does not have FEAT_PAuth\n");
+    return 0;
+  }
+
+  ret = check_negate();
+  assert(ret == 1);
+
+  printf("success\n");
+  return 0;
+}

>From b232cd6fe924ff20f7c1f8abca4f3061830a96a1 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Tue, 23 Jun 2026 15:20:55 -0700
Subject: [PATCH 02/14] move/fix state range assertion. add missing target
 feature.

---
 libunwind/test/ra_sign_state.pass.cpp | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index 1e113955db027..2b31ef4000386 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -73,6 +73,7 @@ __attribute__((noinline)) extern "C" uintptr_t 
get_main_ra_sign_state() {
   uint64_t sign_state = -1;
   _Unwind_Backtrace(frame_handler, &sign_state);
   printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+  assert((sign_state & 0x3) == sign_state);
   return sign_state;
 }
 
@@ -80,7 +81,7 @@ __attribute__((noinline)) uint64_t check_vanilla() {
   return get_main_ra_sign_state();
 }
 
-__attribute__((naked)) uint64_t check_negate() {
+__attribute__((naked, target("pauth"))) uint64_t check_negate() {
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"
 
@@ -104,10 +105,8 @@ FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
   ret = check_vanilla();
-  assert((ret & 2) == ret);
-
 #if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
-  assert(ret == 1);
+  assert(ret == 1 || ret == 2);
 #else
   assert(ret == 0);
 #endif

>From 408cdbc859be5961f1d1a66683d9d513ea554a1f Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Wed, 24 Jun 2026 10:02:34 -0700
Subject: [PATCH 03/14] xfail on stdlib=apple-libc++ &&
 target=.*-apple-.*{{<=27.0}}

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index 2b31ef4000386..7e256316e5a17 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -10,6 +10,10 @@
 // REQUIRES: target={{aarch64.*}}
 // UNSUPPORTED: target={{.*-windows.*}}
 
+// The libSystem unwinder does not correctly read UNW_AARCH64_RA_SIGN_STATE, at
+// least through OS version 27.0
+// XFAIL: stdlib=apple-libc++ && 
target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
+
 #undef NDEBUG
 #include "support/func_bounds.h"
 #include <assert.h>

>From bf97dc7d7d95e55e3fa4f7efabf235ff8bfc024a Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Wed, 24 Jun 2026 10:11:22 -0700
Subject: [PATCH 04/14] HWCAP_PACA checks for getauxval/elf_aux_info platforms

---
 libunwind/test/ra_sign_state.pass.cpp | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index 7e256316e5a17..cbeb5c13694de 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -28,6 +28,9 @@
 #if defined(__APPLE__)
 #include <sys/sysctl.h>
 #endif
+#if defined(_LIBUNWIND_HAVE_GETAUXVAL) || defined(_LIBUNWIND_HAVE_ELF_AUX_INFO)
+#include <sys/auxv.h>
+#endif
 
 // Note: This test requires FEAT_PAuth (and is setup to pass on other targets).
 
@@ -39,6 +42,19 @@ static bool checkHasPAuth() {
     return false;
   return has_pauth != 0;
 }
+#elif defined(_LIBUNWIND_HAVE_GETAUXVAL)
+static bool checkHasPAuth() {
+  constexpr unsigned long hwcap_paca = (1UL << 30);
+  unsigned long hwcap = getauxval(AT_HWCAP);
+  return (hwcap & hwcap_paca) != 0;
+}
+#elif defined(_LIBUNWIND_HAVE_ELF_AUX_INFO)
+static bool checkHasPAuth() {
+  constexpr unsigned long hwcap_paca = (1UL << 30);
+  unsigned long hwcap = 0;
+  elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
+  return (hwcap & hwcap_paca) != 0;
+}
 #else
 static bool checkHasPAuth() {
   // TODO: Support other platforms.

>From a2bff648464dcbf4802d1436c7c9047717fe6b1f Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Wed, 24 Jun 2026 10:14:47 -0700
Subject: [PATCH 05/14] tell clang-format to go away

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index cbeb5c13694de..88b8425073fea 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -7,6 +7,8 @@
 //
 
//===----------------------------------------------------------------------===//
 
+// clang-format-off
+
 // REQUIRES: target={{aarch64.*}}
 // UNSUPPORTED: target={{.*-windows.*}}
 
@@ -14,6 +16,8 @@
 // least through OS version 27.0
 // XFAIL: stdlib=apple-libc++ && 
target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
 
+// clang-format-on
+
 #undef NDEBUG
 #include "support/func_bounds.h"
 #include <assert.h>

>From f4f205e35841a9d61520dda56a1cdccc1422dbbc Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Wed, 24 Jun 2026 10:23:08 -0700
Subject: [PATCH 06/14] really tell clang-format off

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index 88b8425073fea..6b8fb3373565d 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -7,7 +7,7 @@
 //
 
//===----------------------------------------------------------------------===//
 
-// clang-format-off
+// clang-format off
 
 // REQUIRES: target={{aarch64.*}}
 // UNSUPPORTED: target={{.*-windows.*}}
@@ -16,7 +16,7 @@
 // least through OS version 27.0
 // XFAIL: stdlib=apple-libc++ && 
target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
 
-// clang-format-on
+// clang-format on
 
 #undef NDEBUG
 #include "support/func_bounds.h"

>From 708273e49151faf9c3e9bc479ae5cde5e618f47d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Wed, 24 Jun 2026 14:29:14 -0700
Subject: [PATCH 07/14] user-label-prefix extern C symbol

---
 libunwind/test/ra_sign_state.pass.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index 6b8fb3373565d..8ce0e36dd99a4 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -19,6 +19,7 @@
 // clang-format on
 
 #undef NDEBUG
+#include "../src/config.h"
 #include "support/func_bounds.h"
 #include <assert.h>
 #include <inttypes.h>
@@ -106,6 +107,7 @@ __attribute__((noinline)) uint64_t check_vanilla() {
 }
 
 __attribute__((naked, target("pauth"))) uint64_t check_negate() {
+  // clang-format off
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"
 
@@ -114,7 +116,7 @@ __attribute__((naked, target("pauth"))) uint64_t 
check_negate() {
       ".cfi_offset x29, -16\n"
       ".cfi_offset x30, -8\n"
 
-      "bl _get_main_ra_sign_state\n"
+      "bl " SYMBOL_NAME(get_main_ra_sign_state) "\n"
 
       "ldp x29, x30, [sp], #16\n"
       ".cfi_def_cfa_offset 0\n"
@@ -123,6 +125,7 @@ __attribute__((naked, target("pauth"))) uint64_t 
check_negate() {
 
       ".cfi_negate_ra_state\n"
       "retab");
+  // clang-format on
 }
 
 FUNC_ATTR(main_func) int main(int, char **) {

>From a9c26c85267293b5949b7d09792af7f1a556e05e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Thu, 25 Jun 2026 14:05:02 -0700
Subject: [PATCH 08/14] fix XFAIL regex

---
 libunwind/test/ra_sign_state.pass.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index 8ce0e36dd99a4..e6349a83b583a 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -14,7 +14,8 @@
 
 // The libSystem unwinder does not correctly read UNW_AARCH64_RA_SIGN_STATE, at
 // least through OS version 27.0
-// XFAIL: stdlib=apple-libc++ && 
target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
+// XFAIL: stdlib=apple-libc++ && 
target={{.*}}-apple-{{.*}}{{(11|12|13|14|15|26)(\.\d+)?}}
+// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}27.0
 
 // clang-format on
 

>From 4a487f5b48fbabcaa3bf4428a3388b35ffe13c12 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Wed, 24 Jun 2026 20:24:25 -0700
Subject: [PATCH 09/14] printf debug

premerge testing fails with:

```
 -- Testing: 21 tests, 16 workers --
  Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
  FAIL: llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp (21 of 21)
  ******************** TEST 'llvm-libunwind-shared.cfg.in :: 
ra_sign_state.pass.cpp' FAILED ********************
  Exit Code: 252

  Command Output (stdout):
  --
  # COMPILED WITH
  /__w/llvm-project/llvm-project/build/./bin/clang++ 
/__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp  
--target=aarch64-unknown-linux-gnu -nostdinc++ -I 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include
 -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall 
-Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template 
-Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move 
-Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier 
-Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value 
-Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread 
-Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code 
-Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions 
-Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete 
-Wno-redundant-move -Wno-self-move -Wno-nullability-completeness 
-flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 
-Wuser-defined-warnings  -L 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu
 
-Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu
 -lunwind -Wl,--export-dynamic -ldl -latomic -o 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # executed command: /__w/llvm-project/llvm-project/build/./bin/clang++ 
/__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp 
--target=aarch64-unknown-linux-gnu -nostdinc++ -I 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include
 -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall 
-Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template 
-Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move 
-Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier 
-Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value 
-Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread 
-Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code 
-Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions 
-Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete 
-Wno-redundant-move -Wno-self-move -Wno-nullability-completeness 
-flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER 
-Wuser-defined-warnings -L 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu
 
-Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu
 -lunwind -Wl,--export-dynamic -ldl -latomic -o 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # note: command had no output on stdout or stderr
  # EXECUTED AS
  /usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir
 --  
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # executed command: /usr/bin/python3 
/__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir
 -- 
/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
  # note: command had no output on stdout or stderr
  # error: command failed with exit status: 252

  --
```

https://github.com/llvm/llvm-project/actions/runs/28131005033/job/83306950690?pr=205442
---
 libunwind/test/ra_sign_state.pass.cpp | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index e6349a83b583a..d589a2a787bc0 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -95,19 +95,20 @@ _Unwind_Reason_Code frame_handler(struct _Unwind_Context 
*ctx, void *arg) {
   return _URC_NO_REASON;
 }
 
-__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state(const 
char *note) {
+  printf("check: %s\n", note);
   uint64_t sign_state = -1;
   _Unwind_Backtrace(frame_handler, &sign_state);
-  printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+  printf("UNW_AARCH64_RA_SIGN_STATE for %s = %" PRIu64 "\n", note, sign_state);
   assert((sign_state & 0x3) == sign_state);
   return sign_state;
 }
 
-__attribute__((noinline)) uint64_t check_vanilla() {
-  return get_main_ra_sign_state();
+__attribute__((noinline)) uint64_t check_vanilla(const char *note) {
+  return get_main_ra_sign_state(note);
 }
 
-__attribute__((naked, target("pauth"))) uint64_t check_negate() {
+__attribute__((naked, target("pauth"))) uint64_t check_negate(const char 
*note) {
   // clang-format off
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"
@@ -132,7 +133,7 @@ __attribute__((naked, target("pauth"))) uint64_t 
check_negate() {
 FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
-  ret = check_vanilla();
+  ret = check_vanilla("check_vanilla");
 #if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
   assert(ret == 1 || ret == 2);
 #else
@@ -144,7 +145,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
     return 0;
   }
 
-  ret = check_negate();
+  ret = check_negate("check_negate");
   assert(ret == 1);
 
   printf("success\n");

>From 8354ca738a056975a66d7c61bc1997d55e68e36c Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Thu, 25 Jun 2026 14:17:20 -0700
Subject: [PATCH 10/14] clang-format

---
 libunwind/test/ra_sign_state.pass.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index d589a2a787bc0..9732f85f8a84f 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -95,7 +95,8 @@ _Unwind_Reason_Code frame_handler(struct _Unwind_Context 
*ctx, void *arg) {
   return _URC_NO_REASON;
 }
 
-__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state(const 
char *note) {
+__attribute__((noinline)) extern "C" uintptr_t
+get_main_ra_sign_state(const char *note) {
   printf("check: %s\n", note);
   uint64_t sign_state = -1;
   _Unwind_Backtrace(frame_handler, &sign_state);
@@ -108,7 +109,8 @@ __attribute__((noinline)) uint64_t check_vanilla(const char 
*note) {
   return get_main_ra_sign_state(note);
 }
 
-__attribute__((naked, target("pauth"))) uint64_t check_negate(const char 
*note) {
+__attribute__((naked, target("pauth"))) uint64_t
+check_negate(const char *note) {
   // clang-format off
   asm(".cfi_negate_ra_state\n"
       "pacibsp\n"

>From a3ae8e496cd5aa42283228506d74f05a5f702405 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Fri, 26 Jun 2026 10:55:35 -0700
Subject: [PATCH 11/14] static

---
 libunwind/test/ra_sign_state.pass.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index 9732f85f8a84f..e25a1c12720c9 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -70,7 +70,8 @@ static bool checkHasPAuth() {
 
 FUNC_BOUNDS_DECL(main_func);
 
-_Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
+static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
+                                         void *arg) {
   uint64_t ra_sign_state =
       (uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
 
@@ -105,11 +106,11 @@ get_main_ra_sign_state(const char *note) {
   return sign_state;
 }
 
-__attribute__((noinline)) uint64_t check_vanilla(const char *note) {
+__attribute__((noinline)) static uint64_t check_vanilla(const char *note) {
   return get_main_ra_sign_state(note);
 }
 
-__attribute__((naked, target("pauth"))) uint64_t
+__attribute__((naked, target("pauth"))) static uint64_t
 check_negate(const char *note) {
   // clang-format off
   asm(".cfi_negate_ra_state\n"

>From 65ac137bf5173e26e1f394a78da0f437a41e08e5 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Fri, 26 Jun 2026 10:56:09 -0700
Subject: [PATCH 12/14] _LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index e25a1c12720c9..cea5117e09c61 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -87,7 +87,7 @@ static _Unwind_Reason_Code frame_handler(struct 
_Unwind_Context *ctx,
     return _URC_END_OF_STACK;
   }
 
-#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ra_sign_state == 1);
 #else
   assert(ra_sign_state == 0);
@@ -137,7 +137,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
   uint64_t ret;
 
   ret = check_vanilla("check_vanilla");
-#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ret == 1 || ret == 2);
 #else
   assert(ret == 0);

>From a6a4939d6e502d466a826c1ac5828237cb3c47bb Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Fri, 26 Jun 2026 10:57:35 -0700
Subject: [PATCH 13/14] ra_sign_state == 2

---
 libunwind/test/ra_sign_state.pass.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index cea5117e09c61..2244cddca0786 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -88,7 +88,7 @@ static _Unwind_Reason_Code frame_handler(struct 
_Unwind_Context *ctx,
   }
 
 #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
-  assert(ra_sign_state == 1);
+  assert(ra_sign_state == 1 || ra_sign_state == 2);
 #else
   assert(ra_sign_state == 0);
 #endif

>From f8b6bbe0c5b9cf7ba65d3697bfbb4c6fd8f9ab90 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <[email protected]>
Date: Thu, 2 Jul 2026 13:05:03 -0700
Subject: [PATCH 14/14] relax ra sign state checks on
 !_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING

---
 libunwind/test/ra_sign_state.pass.cpp | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/libunwind/test/ra_sign_state.pass.cpp 
b/libunwind/test/ra_sign_state.pass.cpp
index 2244cddca0786..9649ffc6afa5b 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -89,8 +89,6 @@ static _Unwind_Reason_Code frame_handler(struct 
_Unwind_Context *ctx,
 
 #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ra_sign_state == 1 || ra_sign_state == 2);
-#else
-  assert(ra_sign_state == 0);
 #endif
 
   return _URC_NO_REASON;
@@ -139,8 +137,6 @@ FUNC_ATTR(main_func) int main(int, char **) {
   ret = check_vanilla("check_vanilla");
 #if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
   assert(ret == 1 || ret == 2);
-#else
-  assert(ret == 0);
 #endif
 
   if (!checkHasPAuth()) {

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

Reply via email to