@@ -51,9 +51,16 @@ static void __attribute__((used)) __do_init(void) {
51
51
52
52
#ifdef CRT_HAS_INITFINI_ARRAY
53
53
#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
57
64
#else
58
65
__attribute__((section (".init_array" ),
59
66
used )) static void (* __init )(void ) = __do_init ;
@@ -114,9 +121,16 @@ static void __attribute__((used)) __do_fini(void) {
114
121
115
122
#ifdef CRT_HAS_INITFINI_ARRAY
116
123
#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
120
134
#else
121
135
__attribute__((section (".fini_array" ),
122
136
used )) static void (* __fini )(void ) = __do_fini ;
0 commit comments