The qualifier allows programmer to directly control how pointers are signed when they are stored in a particular variable. The qualifier takes three arguments: the signing key, a flag specifying whether address discrimination should be used, and a non-negative integer that is used for additional discrimination. ``` typedef void (*my_callback)(const void*); my_callback __ptrauth(ptrauth_key_process_dependent_code, 1, 0xe27a) callback; ``` Co-Authored-By: John McCall rjmccall@apple.com
14 lines
407 B
C
14 lines
407 B
C
// RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-intrinsics | \
|
|
// RUN: FileCheck %s --check-prefixes=INTRIN
|
|
|
|
// RUN: %clang_cc1 -E %s -triple=aarch64 -fptrauth-calls | \
|
|
// RUN: FileCheck %s --check-prefixes=NOINTRIN
|
|
|
|
#if __has_extension(ptrauth_qualifier)
|
|
// INTRIN: has_ptrauth_qualifier
|
|
void has_ptrauth_qualifier() {}
|
|
#else
|
|
// NOINTRIN: no_ptrauth_qualifier
|
|
void no_ptrauth_qualifier() {}
|
|
#endif
|