@@ -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