Skip to content

Commit 0e1bd78

Browse files
committed
Use builtins instead of __ptrauth qualifier
1 parent 64325d5 commit 0e1bd78

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

clang/lib/Headers/ptrauth.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,8 @@ typedef __UINTPTR_TYPE__ ptrauth_generic_signature_t;
233233
[[clang::ptrauth_vtable_pointer(key, address_discrimination, \
234234
extra_discrimination)]]
235235

236+
/* The value is ptrauth_string_discriminator("init_fini") */
236237
#define __ptrauth_init_fini_discriminator 0xd9d4
237-
#define __ptrauth_init_fini_pointer \
238-
__ptrauth(ptrauth_key_init_fini_pointer, 1, __ptrauth_init_fini_discriminator)
239238

240239
#else
241240

compiler-rt/lib/builtins/crtbegin.c

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,16 @@ static void __attribute__((used)) __do_init(void) {
5151

5252
#ifdef CRT_HAS_INITFINI_ARRAY
5353
#if __has_feature(ptrauth_init_fini)
54-
__attribute__((section(".init_array"),
55-
used)) static void *__ptrauth_init_fini_pointer __init =
56-
__do_init;
54+
#if __has_feature(ptrauth_init_fini_address_discrimination)
55+
__attribute__((section(".init_array"), used)) static void *__init =
56+
ptrauth_sign_constant(&__do_init, ptrauth_key_init_fini_pointer,
57+
ptrauth_blend_discriminator(
58+
&__init, __ptrauth_init_fini_discriminator));
59+
#else
60+
__attribute__((section(".init_array"), used)) static void *__init =
61+
ptrauth_sign_constant(&__do_init, ptrauth_key_init_fini_pointer,
62+
__ptrauth_init_fini_discriminator);
63+
#endif
5764
#else
5865
__attribute__((section(".init_array"),
5966
used)) static void (*__init)(void) = __do_init;
@@ -114,9 +121,16 @@ static void __attribute__((used)) __do_fini(void) {
114121

115122
#ifdef CRT_HAS_INITFINI_ARRAY
116123
#if __has_feature(ptrauth_init_fini)
117-
__attribute__((section(".fini_array"),
118-
used)) static void *__ptrauth_init_fini_pointer __fini =
119-
__do_fini;
124+
#if __has_feature(ptrauth_init_fini_address_discrimination)
125+
__attribute__((section(".fini_array"), used)) static void *__fini =
126+
ptrauth_sign_constant(&__do_fini, ptrauth_key_init_fini_pointer,
127+
ptrauth_blend_discriminator(
128+
&__fini, __ptrauth_init_fini_discriminator));
129+
#else
130+
__attribute__((section(".fini_array"), used)) static void *__fini =
131+
ptrauth_sign_constant(&__do_fini, ptrauth_key_init_fini_pointer,
132+
__ptrauth_init_fini_discriminator);
133+
#endif
120134
#else
121135
__attribute__((section(".fini_array"),
122136
used)) static void (*__fini)(void) = __do_fini;

0 commit comments

Comments
 (0)