[libcxx-commits] [compiler-rt] [libcxx] [libcxxabi] [libunwind] [runtimes][PAC] Harden unwinding when possible (PR #143230)

Daniil Kovalev via libcxx-commits libcxx-commits at lists.llvm.org
Mon Sep 29 08:22:50 PDT 2025


================
@@ -300,12 +302,12 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
 
       isSignalFrame = cieInfo.isSignalFrame;
 
-#if defined(_LIBUNWIND_TARGET_AARCH64)
-      // If the target is aarch64 then the return address may have been signed
-      // using the v8.3 pointer authentication extensions. The original
-      // return address needs to be authenticated before the return address is
-      // restored. autia1716 is used instead of autia as autia1716 assembles
-      // to a NOP on pre-v8.3a architectures.
+#if defined(__ARM64E__)
----------------
kovdan01 wrote:

I've not done local testing with the latest version of the PR, but it looks like that this changes implements *exactly* the opposite behavior of what we are trying to achieve :)

The code under this conditional serves for handling LR signed with pac-ret. And we actually need this to be guarded with smth like `#ifndef LIBUNWIND_PTRAUTH_CALLS_AND_RETURNS` to avoid executing this code when using Apple's arm64e/Linux's pauthtest (because this way, LR is signed as part of corresponding ABI and not by pac-ret).

If we put this under `#if defined(__ARM64E__)`, we entirely disable pac-ret handling for non-arm64e. This would break things which were working as intended before this change.

See my comment https://github.com/llvm/llvm-project/pull/143230#discussion_r2369419226 and commit with proposed fix ced8b99373c9b0756f1718999996f44a74bdf46d

Please let me know if any help is needed with fixing the issue.

https://github.com/llvm/llvm-project/pull/143230


More information about the libcxx-commits mailing list