[compiler-rt] [libcxx] [libcxxabi] [libunwind] [runtimes][PAC] Harden unwinding when possible (PR #143230)
Anatoly Trosinenko via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 20 04:19:51 PDT 2025
================
@@ -30,6 +30,51 @@ EXCEPTION_DISPOSITION _GCC_specific_handler(PEXCEPTION_RECORD, void *, PCONTEXT,
_Unwind_Personality_Fn);
#endif
+#if __has_feature(ptrauth_calls)
+#include <ptrauth.h>
+
+#if __has_feature(ptrauth_restricted_intptr_qualifier)
+#define __ptrauth_gcc_personality_intptr(key, addressDiscriminated, \
+ discriminator) \
+ __ptrauth_restricted_intptr(key, addressDiscriminated, discriminator)
+#else
+#define __ptrauth_gcc_personality_intptr(key, addressDiscriminated, \
+ discriminator) \
+ __ptrauth(key, addressDiscriminated, discriminator)
+#endif
+#else
+#define __ptrauth_gcc_personality_intptr(...)
+#endif
+
+#define __ptrauth_gcc_personality_func_key ptrauth_key_function_pointer
+
+// ptrauth_string_discriminator("__gcc_personality_v0'funcStart") == 0xDFEB
+#define __ptrauth_gcc_personality_func_start \
+ __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, \
+ 0xDFEB)
----------------
atrosinenko wrote:
(As an illustration for the "cover letter" of this review) I assume many such macroses define purely internal signing schemas. In such cases it should be possible to compute the discriminator automatically - it could probably improve readability to use something like
```cpp
PTRAUTH_INTPTR(uintptr_t, start) = readEncodedPointer(&p, callSiteEncoding);
```
instead of
```cpp
uintptr_t __ptrauth_gcc_personality_start start =
readEncodedPointer(&p, callSiteEncoding);
```
https://github.com/llvm/llvm-project/pull/143230
More information about the llvm-commits
mailing list