|
| 1 | +// RUN: %clang -target arm64 -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth |
| 2 | +// RUN: %clang -target arm64-apple-macosx -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth |
| 3 | +// RUN: %clang -target arm64-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth |
| 4 | +// RUN: %clang -target arm64-apple-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth |
| 5 | +// RUN: %clang -target arm64-apple-ios-macabi -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth |
| 6 | +// RUN: %clang -target arm64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth |
| 7 | +// RUN: %clang -target arm64e-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth |
| 8 | +// RUN: %clang -target aarch64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth |
| 9 | +// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults |
| 10 | +// RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults |
| 11 | +// RUN: %clang -target arm64e-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults |
| 12 | +// RUN: %clang -target arm64e-apple-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults |
| 13 | +// RUN: %clang -target arm64e-apple-ios-macabi -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults |
| 14 | + |
| 15 | +// A simple test case to test basic override logic |
| 16 | +// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override |
| 17 | + |
| 18 | +#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \ |
| 19 | + _Static_assert(enabled == __has_##kind(feature), \ |
| 20 | + "Expected to have the " #feature " " #kind " enabled"); |
| 21 | + |
| 22 | +#define ASSERT_FEATURE_ENABLED(feature_name) \ |
| 23 | + ASSERT_MODE_AND_KIND(feature_name, 1, feature) |
| 24 | +#define ASSERT_FEATURE_DISABLED(feature_name) \ |
| 25 | + ASSERT_MODE_AND_KIND(feature_name, 0, feature) |
| 26 | +#define ASSERT_EXTENSION_ENABLED(extension_name) \ |
| 27 | + ASSERT_MODE_AND_KIND(extension_name, 1, extension) |
| 28 | +#define ASSERT_EXTENSION_DISABLED(extension_name) \ |
| 29 | + ASSERT_MODE_AND_KIND(extension_name, 0, extension) |
| 30 | + |
| 31 | +#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) |
| 32 | +ASSERT_FEATURE_ENABLED(ptrauth_intrinsics) |
| 33 | +ASSERT_EXTENSION_ENABLED(ptrauth_qualifier) |
| 34 | + |
| 35 | +#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) |
| 36 | +ASSERT_FEATURE_DISABLED(ptrauth_calls) |
| 37 | +// These flags directly reflect the state of ptrauth_calls, but exist |
| 38 | +// for backward compatibility reasons |
| 39 | +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) |
| 40 | +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) |
| 41 | +#else |
| 42 | +ASSERT_FEATURE_ENABLED(ptrauth_calls) |
| 43 | +ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination) |
| 44 | +ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer) |
| 45 | +#endif |
| 46 | + |
| 47 | +ASSERT_FEATURE_ENABLED(ptrauth_returns) |
| 48 | +ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination) |
| 49 | +ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination) |
| 50 | +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) |
| 51 | +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) |
| 52 | +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) |
| 53 | +ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos) |
| 54 | +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) |
| 55 | +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) |
| 56 | +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) |
| 57 | +ASSERT_FEATURE_ENABLED(ptrauth_objc_isa) |
| 58 | +ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel) |
| 59 | +ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class) |
| 60 | +#endif |
| 61 | + |
| 62 | +#ifdef NO_DEFAULT_PTRAUTH |
| 63 | +ASSERT_FEATURE_DISABLED(ptrauth_intrinsics) |
| 64 | +ASSERT_EXTENSION_DISABLED(ptrauth_qualifier) |
| 65 | +ASSERT_FEATURE_DISABLED(ptrauth_calls) |
| 66 | +ASSERT_FEATURE_DISABLED(ptrauth_returns) |
| 67 | +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination) |
| 68 | +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination) |
| 69 | +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) |
| 70 | +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) |
| 71 | +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) |
| 72 | +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) |
| 73 | +ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos) |
| 74 | +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) |
| 75 | +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) |
| 76 | +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) |
| 77 | +ASSERT_FEATURE_DISABLED(ptrauth_objc_isa) |
| 78 | +ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel) |
| 79 | +ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class) |
| 80 | +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) |
| 81 | +#endif |
| 82 | + |
| 83 | +// darwin_ptrauth_defaults-no-diagnostics |
| 84 | +// no_default_ptrauth-no-diagnostics |
| 85 | +// darwin_ptrauth_override-no-diagnostics |
0 commit comments