@@ -35,11 +35,11 @@ EXCEPTION_DISPOSITION _GCC_specific_handler(PEXCEPTION_RECORD, void *, PCONTEXT,
35
35
36
36
#if __has_feature (ptrauth_restricted_intptr_qualifier )
37
37
#define __ptrauth_gcc_personality_intptr (key , addressDiscriminated , \
38
- discriminator ) \
38
+ discriminator ) \
39
39
__ptrauth_restricted_intptr(key, addressDiscriminated, discriminator)
40
40
#else
41
41
#define __ptrauth_gcc_personality_intptr (key , addressDiscriminated , \
42
- discriminator ) \
42
+ discriminator ) \
43
43
__ptrauth(key, addressDiscriminated, discriminator)
44
44
#endif
45
45
#else
@@ -49,25 +49,30 @@ EXCEPTION_DISPOSITION _GCC_specific_handler(PEXCEPTION_RECORD, void *, PCONTEXT,
49
49
#define __ptrauth_gcc_personality_func_key ptrauth_key_function_pointer
50
50
51
51
// ptrauth_string_discriminator("__gcc_personality_v0'funcStart") == 0xDFEB
52
- #define __ptrauth_gcc_personality_func_start \
53
- __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, 0xDFEB)
52
+ #define __ptrauth_gcc_personality_func_start \
53
+ __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, \
54
+ 0xDFEB)
54
55
55
56
// ptrauth_string_discriminator("__gcc_personality_v0'start") == 0x52DC
56
- #define __ptrauth_gcc_personality_start \
57
- __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, 0x52DC)
57
+ #define __ptrauth_gcc_personality_start \
58
+ __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, \
59
+ 0x52DC)
58
60
59
61
// ptrauth_string_discriminator("__gcc_personality_v0'length") == 0xFFF7
60
- #define __ptrauth_gcc_personality_length \
61
- __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, 0xFFF7)
62
+ #define __ptrauth_gcc_personality_length \
63
+ __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, \
64
+ 0xFFF7)
62
65
63
- // ptrauth_string_discriminator("__gcc_personality_v0'landingPadOffset") == 0x6498
64
- #define __ptrauth_gcc_personality_lpoffset \
65
- __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, 0x6498)
66
+ // ptrauth_string_discriminator("__gcc_personality_v0'landingPadOffset") ==
67
+ // 0x6498
68
+ #define __ptrauth_gcc_personality_lpoffset \
69
+ __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, \
70
+ 0x6498)
66
71
67
72
// ptrauth_string_discriminator("__gcc_personality_v0'landingPad") == 0xA134
68
73
#define __ptrauth_gcc_personality_lpad_disc 0xA134
69
- #define __ptrauth_gcc_personality_lpad \
70
- __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, \
74
+ #define __ptrauth_gcc_personality_lpad \
75
+ __ptrauth_gcc_personality_intptr(__ptrauth_gcc_personality_func_key, 1, \
71
76
__ptrauth_gcc_personality_lpad_disc)
72
77
73
78
// Pointer encodings documented at:
@@ -246,7 +251,7 @@ COMPILER_RT_ABI _Unwind_Reason_Code __gcc_personality_v0(
246
251
247
252
uintptr_t pc = (uintptr_t )_Unwind_GetIP (context ) - 1 ;
248
253
uintptr_t __ptrauth_gcc_personality_func_start funcStart =
249
- (uintptr_t )_Unwind_GetRegionStart (context );
254
+ (uintptr_t )_Unwind_GetRegionStart (context );
250
255
uintptr_t pcOffset = pc - funcStart ;
251
256
252
257
// Parse LSDA header.
@@ -266,11 +271,11 @@ COMPILER_RT_ABI _Unwind_Reason_Code __gcc_personality_v0(
266
271
const uint8_t * p = callSiteTableStart ;
267
272
while (p < callSiteTableEnd ) {
268
273
uintptr_t __ptrauth_gcc_personality_start start =
269
- readEncodedPointer (& p , callSiteEncoding );
274
+ readEncodedPointer (& p , callSiteEncoding );
270
275
size_t __ptrauth_gcc_personality_length length =
271
- readEncodedPointer (& p , callSiteEncoding );
276
+ readEncodedPointer (& p , callSiteEncoding );
272
277
size_t __ptrauth_gcc_personality_lpoffset landingPadOffset =
273
- readEncodedPointer (& p , callSiteEncoding );
278
+ readEncodedPointer (& p , callSiteEncoding );
274
279
readULEB128 (& p ); // action value not used for C code
275
280
if (landingPadOffset == 0 )
276
281
continue ; // no landing pad for this entry
@@ -286,20 +291,16 @@ COMPILER_RT_ABI _Unwind_Reason_Code __gcc_personality_v0(
286
291
funcStart + landingPadOffset ;
287
292
#if __has_feature (ptrauth_calls )
288
293
uintptr_t stackPointer = _Unwind_GetGR (context , -2 );
289
- const uintptr_t existingDiscriminator =
290
- ptrauth_blend_discriminator (& landingPad ,
291
- __ptrauth_gcc_personality_lpad_disc );
294
+ const uintptr_t existingDiscriminator = ptrauth_blend_discriminator (
295
+ & landingPad , __ptrauth_gcc_personality_lpad_disc );
292
296
// newIP is authenticated as if it were qualified with a pseudo qualifier
293
297
// along the lines of:
294
298
// __ptrauth(ptrauth_key_return_address, <stackPointer>, 0)
295
299
// where the stack pointer is used in place of the strict storage
296
300
// address.
297
- uintptr_t newIP =
298
- (uintptr_t )ptrauth_auth_and_resign (* (void * * )& landingPad ,
299
- __ptrauth_gcc_personality_func_key ,
300
- existingDiscriminator ,
301
- ptrauth_key_return_address ,
302
- stackPointer );
301
+ uintptr_t newIP = (uintptr_t )ptrauth_auth_and_resign (
302
+ * (void * * )& landingPad , __ptrauth_gcc_personality_func_key ,
303
+ existingDiscriminator , ptrauth_key_return_address , stackPointer );
303
304
_Unwind_SetIP (context , newIP );
304
305
#else
305
306
_Unwind_SetIP (context , landingPad );
0 commit comments