98#if __has_feature(ptrauth_intrinsics) || defined(__PTRAUTH__)
109#define ptrauth_strip(__value, __key) __builtin_ptrauth_strip(__value, __key)
125#define ptrauth_blend_discriminator(__pointer, __integer) \
126 __builtin_ptrauth_blend_discriminator(__pointer, __integer)
139#define ptrauth_sign_constant(__value, __key, __data) \
140 __builtin_ptrauth_sign_constant(__value, __key, __data)
154#define ptrauth_sign_unauthenticated(__value, __key, __data) \
155 __builtin_ptrauth_sign_unauthenticated(__value, __key, __data)
176#define ptrauth_auth_and_resign(__value, __old_key, __old_data, __new_key, \
178 __builtin_ptrauth_auth_and_resign(__value, __old_key, __old_data, __new_key, \
201#define ptrauth_auth_with_pc_and_resign(__value, __old_key, __old_data, \
202 __old_pc, __new_key, __new_data) \
203 __builtin_ptrauth_auth_with_pc_and_resign(__value, __old_key, __old_data, \
204 __old_pc, __new_key, __new_data)
226#define ptrauth_auth_load_relative_and_sign(__value, __old_key, __old_data, \
227 __new_key, __new_data, __offset) \
228 __builtin_ptrauth_auth_load_relative_and_sign( \
229 __value, __old_key, __old_data, __new_key, __new_data, __offset)
248#define ptrauth_auth_function(__value, __old_key, __old_data) \
249 ptrauth_auth_and_resign(__value, __old_key, __old_data, \
250 ptrauth_key_function_pointer, 0)
261#define ptrauth_auth_data(__value, __old_key, __old_data) \
262 __builtin_ptrauth_auth(__value, __old_key, __old_data)
274#define ptrauth_string_discriminator(__string) \
275 __builtin_ptrauth_string_discriminator(__string)
291#define ptrauth_type_discriminator(__type) \
292 __builtin_ptrauth_type_discriminator(__type)
298#if __has_feature(ptrauth_function_pointer_type_discrimination)
299#define ptrauth_function_pointer_type_discriminator(__type) \
300 __builtin_ptrauth_type_discriminator(__type)
302#define ptrauth_function_pointer_type_discriminator(__type) \
303 ((ptrauth_extra_data_t)0)
325#define ptrauth_sign_generic_data(__value, __data) \
326 __builtin_ptrauth_sign_generic_data(__value, __data)
329#define ptrauth_cxx_vtable_pointer(key, address_discrimination, \
330 extra_discrimination...) \
331 [[clang::ptrauth_vtable_pointer(key, address_discrimination, \
332 extra_discrimination)]]
335#define __ptrauth_init_fini_discriminator 0xd9d4
338#define __ptrauth_objc_method_list_imp \
339 __ptrauth(ptrauth_key_function_pointer, 1, 0)
341#if __has_feature(ptrauth_objc_method_list_pointer)
342#define __ptrauth_objc_method_list_pointer \
343 __ptrauth(ptrauth_key_method_list_pointer, 1, 0xC310)
345#define __ptrauth_objc_method_list_pointer
348#define __ptrauth_isa_discriminator 0x6AE1
349#define __ptrauth_super_discriminator 0xB5AB
350#define __ptrauth_objc_isa_pointer \
351 __ptrauth(ptrauth_key_objc_isa_pointer, 1, __ptrauth_isa_discriminator)
352#if __has_feature(ptrauth_restricted_intptr_qualifier)
353#define __ptrauth_objc_isa_uintptr \
354 __ptrauth_restricted_intptr(ptrauth_key_objc_isa_pointer, 1, \
355 __ptrauth_isa_discriminator)
357#define __ptrauth_objc_isa_uintptr \
358 __ptrauth(ptrauth_key_objc_isa_pointer, 1, __ptrauth_isa_discriminator)
361#define __ptrauth_objc_super_pointer \
362 __ptrauth(ptrauth_key_objc_super_pointer, 1, __ptrauth_super_discriminator)
364#define __ptrauth_objc_sel_discriminator 0x57c2
365#if __has_feature(ptrauth_objc_interface_sel)
366#define __ptrauth_objc_sel \
367 __ptrauth(ptrauth_key_objc_sel_pointer, 1, __ptrauth_objc_sel_discriminator)
369#define __ptrauth_objc_sel
372#define __ptrauth_objc_class_ro_discriminator 0x61f8
373#define __ptrauth_objc_class_ro \
374 __ptrauth(ptrauth_key_objc_class_ro_pointer, 1, \
375 __ptrauth_objc_class_ro_discriminator)
377#if __has_feature(ptrauth_init_fini_address_discrimination)
378#define __ptrauth_init_fini_pointer \
379 __ptrauth(ptrauth_key_init_fini_pointer, 1, __ptrauth_init_fini_discriminator)
381#define __ptrauth_init_fini_pointer \
382 __ptrauth(ptrauth_key_init_fini_pointer, 0, __ptrauth_init_fini_discriminator)
387#define ptrauth_strip(__value, __key) \
393#define ptrauth_blend_discriminator(__pointer, __integer) \
397 ((ptrauth_extra_data_t)0); \
400#define ptrauth_sign_constant(__value, __key, __data) \
407#define ptrauth_sign_unauthenticated(__value, __key, __data) \
414#define ptrauth_auth_and_resign(__value, __old_key, __old_data, __new_key, \
424#define ptrauth_auth_with_pc_and_resign(__value, __old_key, __old_data, \
425 __old_pc, __new_key, __new_data) \
435#define ptrauth_auth_load_relative_and_sign(__value, __old_key, __old_data, \
436 __new_key, __new_data, __offset) \
442 const char *__value_tmp = (const char *)(__value); \
443 (void *)(__value_tmp + *(const int *)(__value_tmp + (__offset))); \
446#define ptrauth_auth_function(__value, __old_key, __old_data) \
453#define ptrauth_auth_data(__value, __old_key, __old_data) \
460#define ptrauth_string_discriminator(__string) \
463 ((ptrauth_extra_data_t)0); \
466#define ptrauth_type_discriminator(__type) ((ptrauth_extra_data_t)0)
467#define ptrauth_function_pointer_type_discriminator(__type) \
468 ((ptrauth_extra_data_t)0)
470#define ptrauth_sign_generic_data(__value, __data) \
474 ((ptrauth_generic_signature_t)0); \
477#define ptrauth_cxx_vtable_pointer(key, address_discrimination, \
478 extra_discrimination...)
480#define __ptrauth_objc_isa_pointer
481#define __ptrauth_objc_isa_uintptr
482#define __ptrauth_objc_super_pointer
__UINTPTR_TYPE__ ptrauth_extra_data_t
__UINTPTR_TYPE__ ptrauth_generic_signature_t
@ ptrauth_key_method_list_pointer
@ ptrauth_key_return_address
@ ptrauth_key_process_independent_code
@ ptrauth_key_process_dependent_code
@ ptrauth_key_process_independent_data
@ ptrauth_key_cxx_vtable_pointer
@ ptrauth_key_objc_super_pointer
@ ptrauth_key_init_fini_pointer
@ ptrauth_key_objc_isa_pointer
@ ptrauth_key_objc_sel_pointer
@ ptrauth_key_objc_class_ro_pointer
@ ptrauth_key_process_dependent_data
@ ptrauth_key_function_pointer