[clang] [compiler-rt] [PAC][compiler-rt] Use `__ptrauth` qualifier instead of builtins (PR #188109)
Daniil Kovalev via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 23 23:10:03 PDT 2026
https://github.com/kovdan01 updated https://github.com/llvm/llvm-project/pull/188109
>From 9228fb5ad432bd2d48a5c17074cff06f0fd17801 Mon Sep 17 00:00:00 2001
From: Daniil Kovalev <dkovalev at accesssoftek.com>
Date: Mon, 23 Mar 2026 22:29:51 +0300
Subject: [PATCH] [PAC][compiler-rt] Use `__ptrauth` qualifier instead of
builtins
Since #100830 has landed, we no longer need to rely on builtins
---
clang/lib/Headers/ptrauth.h | 8 ++++++++
compiler-rt/lib/builtins/crtbegin.c | 28 ++++++----------------------
2 files changed, 14 insertions(+), 22 deletions(-)
diff --git a/clang/lib/Headers/ptrauth.h b/clang/lib/Headers/ptrauth.h
index af94168c35fb7..cde1b3c4ebbe2 100644
--- a/clang/lib/Headers/ptrauth.h
+++ b/clang/lib/Headers/ptrauth.h
@@ -349,6 +349,14 @@ typedef __UINTPTR_TYPE__ ptrauth_generic_signature_t;
__ptrauth(ptrauth_key_objc_class_ro_pointer, 1, \
__ptrauth_objc_class_ro_discriminator)
+#if __has_feature(ptrauth_init_fini_address_discrimination)
+#define __ptrauth_init_fini_pointer \
+ __ptrauth(ptrauth_key_init_fini_pointer, 1, __ptrauth_init_fini_discriminator)
+#else
+#define __ptrauth_init_fini_pointer \
+ __ptrauth(ptrauth_key_init_fini_pointer, 0, __ptrauth_init_fini_discriminator)
+#endif
+
#else
#define ptrauth_strip(__value, __key) \
diff --git a/compiler-rt/lib/builtins/crtbegin.c b/compiler-rt/lib/builtins/crtbegin.c
index 8b5f98fdd04ed..74becdbe5dd0e 100644
--- a/compiler-rt/lib/builtins/crtbegin.c
+++ b/compiler-rt/lib/builtins/crtbegin.c
@@ -55,17 +55,9 @@ static void __attribute__((used)) __do_init(void) {
#ifdef CRT_HAS_INITFINI_ARRAY
# if __has_feature(ptrauth_init_fini)
-// TODO: use __ptrauth-qualified pointers when they are supported on clang side
-# if __has_feature(ptrauth_init_fini_address_discrimination)
-__attribute__((section(".init_array"), used)) static void *__init =
- ptrauth_sign_constant(&__do_init, ptrauth_key_init_fini_pointer,
- ptrauth_blend_discriminator(
- &__init, __ptrauth_init_fini_discriminator));
-# else
-__attribute__((section(".init_array"), used)) static void *__init =
- ptrauth_sign_constant(&__do_init, ptrauth_key_init_fini_pointer,
- __ptrauth_init_fini_discriminator);
-# endif
+__attribute__((section(".init_array"),
+ used)) static void *__ptrauth_init_fini_pointer __init =
+ __do_init;
# elif __has_feature(ptrauth_calls)
# ifdef __aarch64__
// If ptrauth_init_fini feature is not present, compiler emits raw unsigned
@@ -137,17 +129,9 @@ static void __attribute__((used)) __do_fini(void) {
#ifdef CRT_HAS_INITFINI_ARRAY
# if __has_feature(ptrauth_init_fini)
-// TODO: use __ptrauth-qualified pointers when they are supported on clang side
-# if __has_feature(ptrauth_init_fini_address_discrimination)
-__attribute__((section(".fini_array"), used)) static void *__fini =
- ptrauth_sign_constant(&__do_fini, ptrauth_key_init_fini_pointer,
- ptrauth_blend_discriminator(
- &__fini, __ptrauth_init_fini_discriminator));
-# else
-__attribute__((section(".fini_array"), used)) static void *__fini =
- ptrauth_sign_constant(&__do_fini, ptrauth_key_init_fini_pointer,
- __ptrauth_init_fini_discriminator);
-# endif
+__attribute__((section(".fini_array"),
+ used)) static void *__ptrauth_init_fini_pointer __fini =
+ __do_fini;
# elif __has_feature(ptrauth_calls)
# ifdef __aarch64__
// If ptrauth_init_fini feature is not present, compiler emits raw unsigned
More information about the cfe-commits
mailing list