https://github.com/ojhunt updated https://github.com/llvm/llvm-project/pull/153722
>From 0cbb0846f270c6d6cb15492ba34ff9ae2ed33f67 Mon Sep 17 00:00:00 2001 From: Oliver Hunt <oli...@apple.com> Date: Thu, 14 Aug 2025 17:43:03 -0700 Subject: [PATCH 1/3] [clang][PAC][darwin] Set correct default ptrauth features for arm64e-darwin This PR makes sure that when targeting arm64e on darwin platforms the correct flags are set for the userspace platform ABI. --- clang/include/clang/Basic/Features.def | 2 +- clang/lib/Driver/ToolChains/Darwin.cpp | 33 +++++++ clang/test/Driver/ptrauth-platform-defaults.c | 85 +++++++++++++++++++ clang/test/Sema/ptrauth-platform-defaults.c | 45 ++++++++++ 4 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 clang/test/Driver/ptrauth-platform-defaults.c create mode 100644 clang/test/Sema/ptrauth-platform-defaults.c diff --git a/clang/include/clang/Basic/Features.def b/clang/include/clang/Basic/Features.def index b9efc6a6a2e9d..e59c33a695a4d 100644 --- a/clang/include/clang/Basic/Features.def +++ b/clang/include/clang/Basic/Features.def @@ -164,7 +164,7 @@ FEATURE(ptrauth_elf_got, LangOpts.PointerAuthELFGOT) FEATURE(ptrauth_objc_isa, LangOpts.PointerAuthObjcIsa) FEATURE(ptrauth_objc_interface_sel, LangOpts.PointerAuthObjcInterfaceSel) -FEATURE(ptrauth_objc_signable_class, true) +FEATURE(ptrauth_objc_signable_class, LangOpts.PointerAuthCalls || LangOpts.PointerAuthIntrinsics) FEATURE(ptrauth_objc_method_list_pointer, LangOpts.PointerAuthCalls) EXTENSION(swiftcc, diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index e5075cbcaf660..6dd170d6f2b8c 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -3291,6 +3291,39 @@ void Darwin::addClangTargetOptions( if (!RequiresSubdirectorySearch) CC1Args.push_back("-fno-modulemap-allow-subdirectory-search"); } + + if (getTriple().isArm64e()) { + auto EnsureDefaultPtrauthFlag = [&](OptSpecifier Pos, OptSpecifier Neg) { + assert(Pos != Neg); + if (const Arg *Opt = DriverArgs.getLastArg(Pos, Neg); + Opt && Opt->getOption().matches(Neg)) + return; + Option PosOpt = getDriverOptTable().getOption(Pos); + CC1Args.push_back(PosOpt.getPrefixedName().data()); + }; + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_calls, + options::OPT_fno_ptrauth_calls); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_returns, + options::OPT_fno_ptrauth_returns); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_intrinsics, + options::OPT_fno_ptrauth_intrinsics); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_indirect_gotos, + options::OPT_fno_ptrauth_indirect_gotos); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_auth_traps, + options::OPT_fno_ptrauth_auth_traps); + EnsureDefaultPtrauthFlag( + options::OPT_fptrauth_vtable_pointer_address_discrimination, + options::OPT_fno_ptrauth_vtable_pointer_address_discrimination); + EnsureDefaultPtrauthFlag( + options::OPT_fptrauth_vtable_pointer_type_discrimination, + options::OPT_fno_ptrauth_vtable_pointer_type_discrimination); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_isa, + options::OPT_fno_ptrauth_objc_isa); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_class_ro, + options::OPT_fno_ptrauth_objc_class_ro); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_interface_sel, + options::OPT_fno_ptrauth_objc_interface_sel); + } } void Darwin::addClangCC1ASTargetOptions( diff --git a/clang/test/Driver/ptrauth-platform-defaults.c b/clang/test/Driver/ptrauth-platform-defaults.c new file mode 100644 index 0000000000000..aa2968d9025bc --- /dev/null +++ b/clang/test/Driver/ptrauth-platform-defaults.c @@ -0,0 +1,85 @@ +// RUN: %clang -target arm64 -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64-apple-macosx -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64-apple-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64-apple-ios-macabi -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64e-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target aarch64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults +// RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults +// RUN: %clang -target arm64e-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults +// RUN: %clang -target arm64e-apple-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults +// RUN: %clang -target arm64e-apple-ios-macabi -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults + +// A simple test case to test basic override logic +// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override + +#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \ + _Static_assert(enabled == __has_##kind(feature), \ + "Expected to have the " #feature " " #kind " enabled"); + +#define ASSERT_FEATURE_ENABLED(feature_name) \ + ASSERT_MODE_AND_KIND(feature_name, 1, feature) +#define ASSERT_FEATURE_DISABLED(feature_name) \ + ASSERT_MODE_AND_KIND(feature_name, 0, feature) +#define ASSERT_EXTENSION_ENABLED(extension_name) \ + ASSERT_MODE_AND_KIND(extension_name, 1, extension) +#define ASSERT_EXTENSION_DISABLED(extension_name) \ + ASSERT_MODE_AND_KIND(extension_name, 0, extension) + +#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) +ASSERT_FEATURE_ENABLED(ptrauth_intrinsics) +ASSERT_EXTENSION_ENABLED(ptrauth_qualifier) + +#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) +ASSERT_FEATURE_DISABLED(ptrauth_calls) +// These flags directly reflect the state of ptrauth_calls, but exist +// for backward compatibility reasons +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) +#else +ASSERT_FEATURE_ENABLED(ptrauth_calls) +ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer) +#endif + +ASSERT_FEATURE_ENABLED(ptrauth_returns) +ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) +ASSERT_FEATURE_ENABLED(ptrauth_objc_isa) +ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel) +ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class) +#endif + +#ifdef NO_DEFAULT_PTRAUTH +ASSERT_FEATURE_DISABLED(ptrauth_intrinsics) +ASSERT_EXTENSION_DISABLED(ptrauth_qualifier) +ASSERT_FEATURE_DISABLED(ptrauth_calls) +ASSERT_FEATURE_DISABLED(ptrauth_returns) +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) +ASSERT_FEATURE_DISABLED(ptrauth_objc_isa) +ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel) +ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class) +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) +#endif + +// darwin_ptrauth_defaults-no-diagnostics +// no_default_ptrauth-no-diagnostics +// darwin_ptrauth_override-no-diagnostics diff --git a/clang/test/Sema/ptrauth-platform-defaults.c b/clang/test/Sema/ptrauth-platform-defaults.c new file mode 100644 index 0000000000000..0dcddbfa22f76 --- /dev/null +++ b/clang/test/Sema/ptrauth-platform-defaults.c @@ -0,0 +1,45 @@ +// RUN: %clang_cc1 -triple arm64 %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64-apple-macosx %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64-darwin %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64-apple-darwin %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64-apple-ios-macabi %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64-linux-gnu %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64e-linux-gnu %s -fsyntax-only +// RUN: %clang_cc1 -triple aarch64-linux-gnu %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64e-apple-macosx %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64e-apple-ios %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64e-darwin %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64e-apple-darwin %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64e-apple-ios-macabi %s -fsyntax-only + +// The -cc1 mode should not insert default ptrauth flags + +#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \ + _Static_assert(enabled == __has_##kind(feature), \ + "Expected to have the " #feature " " #kind " enabled"); + +#define ASSERT_FEATURE_DISABLED(feature_name) \ + ASSERT_MODE_AND_KIND(feature_name, 0, feature) +#define ASSERT_EXTENSION_DISABLED(extension_name) \ + ASSERT_MODE_AND_KIND(extension_name, 0, extension) + +ASSERT_FEATURE_DISABLED(ptrauth_intrinsics) +ASSERT_EXTENSION_DISABLED(ptrauth_qualifier) +ASSERT_FEATURE_DISABLED(ptrauth_calls) +ASSERT_FEATURE_DISABLED(ptrauth_returns) +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) +ASSERT_FEATURE_DISABLED(ptrauth_objc_isa) +ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel) +ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class) +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) + +// expected-no-diagnostics >From 4f7927f26fe87c885c71d70fe1060d07e64bf54f Mon Sep 17 00:00:00 2001 From: Oliver Hunt <oli...@apple.com> Date: Sun, 17 Aug 2025 04:39:03 -0700 Subject: [PATCH 2/3] addressng feedback --- clang/lib/Driver/ToolChains/Darwin.cpp | 97 +++++++++---------- clang/test/Driver/arch-arm64e.c | 37 ++++--- clang/test/Driver/ptrauth-platform-defaults.c | 3 - clang/test/Sema/ptrauth-platform-defaults.c | 17 +--- 4 files changed, 67 insertions(+), 87 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 6dd170d6f2b8c..4abc2b1565ba9 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -3187,28 +3187,54 @@ void MachO::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, ToolChain::addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadKind); - // On arm64e, enable pointer authentication (for the return address and - // indirect calls), as well as usage of the intrinsics. - if (getArchName() == "arm64e") { - if (!DriverArgs.hasArg(options::OPT_fptrauth_returns, - options::OPT_fno_ptrauth_returns)) - CC1Args.push_back("-fptrauth-returns"); - - if (!DriverArgs.hasArg(options::OPT_fptrauth_intrinsics, - options::OPT_fno_ptrauth_intrinsics)) - CC1Args.push_back("-fptrauth-intrinsics"); + // On arm64e, we enable all the features required for the Darwin userspace + // ABI + if (getTriple().isArm64e()) { + auto EnsureDefaultPtrauthFlag = [&](OptSpecifier Pos, OptSpecifier Neg, + const char* param_name) { + if (DriverArgs.hasArg(Pos, Neg)) + return; + CC1Args.push_back(param_name); + }; - if (!DriverArgs.hasArg(options::OPT_fptrauth_calls, - options::OPT_fno_ptrauth_calls)) - CC1Args.push_back("-fptrauth-calls"); + // Core platform ABI + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_calls, + options::OPT_fno_ptrauth_calls, + "-fptrauth-calls"); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_returns, + options::OPT_fno_ptrauth_returns, + "-fptrauth-returns"); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_intrinsics, + options::OPT_fno_ptrauth_intrinsics, + "-fptrauth-intrinsics"); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_indirect_gotos, + options::OPT_fno_ptrauth_indirect_gotos, + "-fptrauth-indirect-gotos"); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_auth_traps, + options::OPT_fno_ptrauth_auth_traps, + "-fptrauth-auth-traps"); - if (!DriverArgs.hasArg(options::OPT_fptrauth_indirect_gotos, - options::OPT_fno_ptrauth_indirect_gotos)) - CC1Args.push_back("-fptrauth-indirect-gotos"); + // C++ v-table ABI + EnsureDefaultPtrauthFlag( + options::OPT_fptrauth_vtable_pointer_address_discrimination, + options::OPT_fno_ptrauth_vtable_pointer_address_discrimination, + "-fptrauth-vtable-pointer-address-discrimination" + ); + EnsureDefaultPtrauthFlag( + options::OPT_fptrauth_vtable_pointer_type_discrimination, + options::OPT_fno_ptrauth_vtable_pointer_type_discrimination, + "-fptrauth-vtable-pointer-type-discrimination"); - if (!DriverArgs.hasArg(options::OPT_fptrauth_auth_traps, - options::OPT_fno_ptrauth_auth_traps)) - CC1Args.push_back("-fptrauth-auth-traps"); + // Objective-C ABI + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_isa, + options::OPT_fno_ptrauth_objc_isa, + "-fptrauth-objc-isa"); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_class_ro, + options::OPT_fno_ptrauth_objc_class_ro, + "-fptrauth-objc-class-ro"); + EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_interface_sel, + options::OPT_fno_ptrauth_objc_interface_sel, + "-fptrauth-objc-interface-sel"); } } @@ -3291,39 +3317,6 @@ void Darwin::addClangTargetOptions( if (!RequiresSubdirectorySearch) CC1Args.push_back("-fno-modulemap-allow-subdirectory-search"); } - - if (getTriple().isArm64e()) { - auto EnsureDefaultPtrauthFlag = [&](OptSpecifier Pos, OptSpecifier Neg) { - assert(Pos != Neg); - if (const Arg *Opt = DriverArgs.getLastArg(Pos, Neg); - Opt && Opt->getOption().matches(Neg)) - return; - Option PosOpt = getDriverOptTable().getOption(Pos); - CC1Args.push_back(PosOpt.getPrefixedName().data()); - }; - EnsureDefaultPtrauthFlag(options::OPT_fptrauth_calls, - options::OPT_fno_ptrauth_calls); - EnsureDefaultPtrauthFlag(options::OPT_fptrauth_returns, - options::OPT_fno_ptrauth_returns); - EnsureDefaultPtrauthFlag(options::OPT_fptrauth_intrinsics, - options::OPT_fno_ptrauth_intrinsics); - EnsureDefaultPtrauthFlag(options::OPT_fptrauth_indirect_gotos, - options::OPT_fno_ptrauth_indirect_gotos); - EnsureDefaultPtrauthFlag(options::OPT_fptrauth_auth_traps, - options::OPT_fno_ptrauth_auth_traps); - EnsureDefaultPtrauthFlag( - options::OPT_fptrauth_vtable_pointer_address_discrimination, - options::OPT_fno_ptrauth_vtable_pointer_address_discrimination); - EnsureDefaultPtrauthFlag( - options::OPT_fptrauth_vtable_pointer_type_discrimination, - options::OPT_fno_ptrauth_vtable_pointer_type_discrimination); - EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_isa, - options::OPT_fno_ptrauth_objc_isa); - EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_class_ro, - options::OPT_fno_ptrauth_objc_class_ro); - EnsureDefaultPtrauthFlag(options::OPT_fptrauth_objc_interface_sel, - options::OPT_fno_ptrauth_objc_interface_sel); - } } void Darwin::addClangCC1ASTargetOptions( diff --git a/clang/test/Driver/arch-arm64e.c b/clang/test/Driver/arch-arm64e.c index 0fb12d4dcc5e3..d678a038f1737 100644 --- a/clang/test/Driver/arch-arm64e.c +++ b/clang/test/Driver/arch-arm64e.c @@ -2,11 +2,20 @@ // RUN: %clang -target arm64-apple-darwin -c %s -### 2>&1 | FileCheck %s --check-prefix NONE // NONE: "-cc1" -// NONE-NOT: "-fptrauth-intrinsics" + // NONE-NOT: "-fptrauth-calls" // NONE-NOT: "-fptrauth-returns" +// NONE-NOT: "-fptrauth-intrinsics" // NONE-NOT: "-fptrauth-indirect-gotos" // NONE-NOT: "-fptrauth-auth-traps" +// NONE-NOT: "-fptrauth-vtable-pointer-address-discrimination" +// NONE-NOT: "-fptrauth-vtable-pointer-type-discrimination" +// NONE-NOT: "-fptrauth-objc-isa" +// NONE-NOT: "-fptrauth-objc-class-ro" +// NONE-NOT: "-fptrauth-objc-interface-sel" + +// Final catch all if any new flags are added +// NONE-NOT: "-fptrauth" // RUN: %clang -target arm64-apple-darwin -fptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix CALL // CALL: "-cc1"{{.*}} {{.*}} "-fptrauth-calls" @@ -27,40 +36,28 @@ // Check the arm64e defaults. // RUN: %clang -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT -// RUN: %clang -mkernel -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT -// RUN: %clang -fapple-kext -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT -// DEFAULT: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}} +// RUN: %clang -target arm64e-apple-macos -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT +// DEFAULT: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" // RUN: %clang -target arm64e-apple-none-macho -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-MACHO -// DEFAULT-MACHO: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}} +// DEFAULT-MACHO: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" // RUN: %clang -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL -// RUN: %clang -mkernel -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL -// RUN: %clang -fapple-kext -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL // DEFAULT-NOCALL-NOT: "-fptrauth-calls" -// DEFAULT-NOCALL: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12" +// DEFAULT-NOCALL: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" // RUN: %clang -target arm64e-apple-ios -fno-ptrauth-returns -c %s -### 2>&1 | FileCheck %s --check-prefix NORET // NORET-NOT: "-fptrauth-returns" -// NORET: "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12" +// NORET: "-fptrauth-calls" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" // RUN: %clang -target arm64e-apple-ios -fno-ptrauth-intrinsics -c %s -### 2>&1 | FileCheck %s --check-prefix NOINTRIN -// NOINTRIN: "-fptrauth-returns" // NOINTRIN-NOT: "-fptrauth-intrinsics" -// NOINTRIN: "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}} +// NOINTRIN: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" // RUN: %clang -target arm64e-apple-ios -fno-ptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix NOTRAP -// NOTRAP: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" {{.*}}"-target-cpu" "apple-a12" - - -// Check the CPU defaults and overrides. - -// RUN: %clang -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix APPLE-A12 -// RUN: %clang -target arm64e-apple-ios -mcpu=apple-a13 -c %s -### 2>&1 | FileCheck %s --check-prefix APPLE-A13 -// APPLE-A12: "-cc1"{{.*}} "-target-cpu" "apple-a12" -// APPLE-A13: "-cc1"{{.*}} "-target-cpu" "apple-a13" +// NOTRAP: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" diff --git a/clang/test/Driver/ptrauth-platform-defaults.c b/clang/test/Driver/ptrauth-platform-defaults.c index aa2968d9025bc..c1d065a8808a0 100644 --- a/clang/test/Driver/ptrauth-platform-defaults.c +++ b/clang/test/Driver/ptrauth-platform-defaults.c @@ -3,9 +3,6 @@ // RUN: %clang -target arm64-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth // RUN: %clang -target arm64-apple-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth // RUN: %clang -target arm64-apple-ios-macabi -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth -// RUN: %clang -target arm64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth -// RUN: %clang -target arm64e-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth -// RUN: %clang -target aarch64-linux-gnu -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth // RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults // RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults // RUN: %clang -target arm64e-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults diff --git a/clang/test/Sema/ptrauth-platform-defaults.c b/clang/test/Sema/ptrauth-platform-defaults.c index 0dcddbfa22f76..5a959feca01b8 100644 --- a/clang/test/Sema/ptrauth-platform-defaults.c +++ b/clang/test/Sema/ptrauth-platform-defaults.c @@ -1,30 +1,23 @@ +// The -cc1 mode should not insert default ptrauth flags + // RUN: %clang_cc1 -triple arm64 %s -fsyntax-only // RUN: %clang_cc1 -triple arm64-apple-macosx %s -fsyntax-only -// RUN: %clang_cc1 -triple arm64-darwin %s -fsyntax-only -// RUN: %clang_cc1 -triple arm64-apple-darwin %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64-apple-ios %s -fsyntax-only // RUN: %clang_cc1 -triple arm64-apple-ios-macabi %s -fsyntax-only -// RUN: %clang_cc1 -triple arm64-linux-gnu %s -fsyntax-only -// RUN: %clang_cc1 -triple arm64e-linux-gnu %s -fsyntax-only -// RUN: %clang_cc1 -triple aarch64-linux-gnu %s -fsyntax-only +// RUN: %clang_cc1 -triple arm64e %s -fsyntax-only // RUN: %clang_cc1 -triple arm64e-apple-macosx %s -fsyntax-only // RUN: %clang_cc1 -triple arm64e-apple-ios %s -fsyntax-only -// RUN: %clang_cc1 -triple arm64e-darwin %s -fsyntax-only -// RUN: %clang_cc1 -triple arm64e-apple-darwin %s -fsyntax-only // RUN: %clang_cc1 -triple arm64e-apple-ios-macabi %s -fsyntax-only -// The -cc1 mode should not insert default ptrauth flags - #define ASSERT_MODE_AND_KIND(feature, enabled, kind) \ _Static_assert(enabled == __has_##kind(feature), \ "Expected to have the " #feature " " #kind " enabled"); #define ASSERT_FEATURE_DISABLED(feature_name) \ ASSERT_MODE_AND_KIND(feature_name, 0, feature) -#define ASSERT_EXTENSION_DISABLED(extension_name) \ - ASSERT_MODE_AND_KIND(extension_name, 0, extension) ASSERT_FEATURE_DISABLED(ptrauth_intrinsics) -ASSERT_EXTENSION_DISABLED(ptrauth_qualifier) +ASSERT_FEATURE_DISABLED(ptrauth_qualifier) ASSERT_FEATURE_DISABLED(ptrauth_calls) ASSERT_FEATURE_DISABLED(ptrauth_returns) ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination) >From e47f40fb41d0f285dee3368c67f9c08b2a9aa3b2 Mon Sep 17 00:00:00 2001 From: Oliver Hunt <oli...@apple.com> Date: Sun, 17 Aug 2025 15:13:35 -0700 Subject: [PATCH 3/3] moving test content around and adding a -arch specific set --- .../Driver/arch-arm64e-arch-opt-defaults.c | 138 ++++++++++++++++++ clang/test/Driver/arch-arm64e.c | 80 ++++++++++ clang/test/Driver/ptrauth-platform-defaults.c | 82 ----------- 3 files changed, 218 insertions(+), 82 deletions(-) create mode 100644 clang/test/Driver/arch-arm64e-arch-opt-defaults.c delete mode 100644 clang/test/Driver/ptrauth-platform-defaults.c diff --git a/clang/test/Driver/arch-arm64e-arch-opt-defaults.c b/clang/test/Driver/arch-arm64e-arch-opt-defaults.c new file mode 100644 index 0000000000000..dd7d5836aabf8 --- /dev/null +++ b/clang/test/Driver/arch-arm64e-arch-opt-defaults.c @@ -0,0 +1,138 @@ +// REQUIRES: system-darwin && target={{.*}}-{{darwin|macos}}{{.*}} +// Check the correct ptrauth features are enabled when simply using the -arch +// option + +// RUN: %clang -arch arm64 -c %s -### 2>&1 | FileCheck %s --check-prefix NONE +// NONE: "-cc1" + +// NONE-NOT: "-fptrauth-calls" +// NONE-NOT: "-fptrauth-returns" +// NONE-NOT: "-fptrauth-intrinsics" +// NONE-NOT: "-fptrauth-indirect-gotos" +// NONE-NOT: "-fptrauth-auth-traps" +// NONE-NOT: "-fptrauth-vtable-pointer-address-discrimination" +// NONE-NOT: "-fptrauth-vtable-pointer-type-discrimination" +// NONE-NOT: "-fptrauth-objc-isa" +// NONE-NOT: "-fptrauth-objc-class-ro" +// NONE-NOT: "-fptrauth-objc-interface-sel" + +// Final catch all if any new flags are added +// NONE-NOT: "-fptrauth" + +// RUN: %clang -arch arm64 -fptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix CALL +// CALL: "-cc1"{{.*}} {{.*}} "-fptrauth-calls" + +// RUN: %clang -arch arm64 -fptrauth-intrinsics -c %s -### 2>&1 | FileCheck %s --check-prefix INTRIN +// INTRIN: "-cc1"{{.*}} {{.*}} "-fptrauth-intrinsics" + +// RUN: %clang -arch arm64 -fptrauth-returns -c %s -### 2>&1 | FileCheck %s --check-prefix RETURN +// RETURN: "-cc1"{{.*}} {{.*}} "-fptrauth-returns" + +// RUN: %clang -arch arm64 -fptrauth-indirect-gotos -c %s -### 2>&1 | FileCheck %s --check-prefix INDGOTO +// INDGOTO: "-cc1"{{.*}} {{.*}} "-fptrauth-indirect-gotos" + +// RUN: %clang -arch arm64 -fptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix TRAPS +// TRAPS: "-cc1"{{.*}} {{.*}} "-fptrauth-auth-traps" + + +// Check the `-arch arm64e` defaults. + +// RUN: %clang -arch arm64e -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT +// DEFAULT: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" + +// RUN: %clang -arch arm64e -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL +// DEFAULT-NOCALL-NOT: "-fptrauth-calls" +// DEFAULT-NOCALL: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" + + +// RUN: %clang -arch arm64e -fno-ptrauth-returns -c %s -### 2>&1 | FileCheck %s --check-prefix NORET + +// NORET-NOT: "-fptrauth-returns" +// NORET: "-fptrauth-calls" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" + +// RUN: %clang -arch arm64e -fno-ptrauth-intrinsics -c %s -### 2>&1 | FileCheck %s --check-prefix NOINTRIN + +// NOINTRIN-NOT: "-fptrauth-intrinsics" +// NOINTRIN: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" + + +// RUN: %clang -arch arm64e -fno-ptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix NOTRAP +// NOTRAP: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" + +// Check that the default driver flags correctly propogate through to the compiler + +// RUN: %clang -arch arm64 -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -arch arm64e -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults + +// A simple test case to test basic override logic +// RUN: %clang -arch arm64e -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override + + +#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \ + _Static_assert(enabled == __has_##kind(feature), \ + "Expected to have the " #feature " " #kind " enabled"); + +#define ASSERT_FEATURE_ENABLED(feature_name) \ + ASSERT_MODE_AND_KIND(feature_name, 1, feature) +#define ASSERT_FEATURE_DISABLED(feature_name) \ + ASSERT_MODE_AND_KIND(feature_name, 0, feature) +#define ASSERT_EXTENSION_ENABLED(extension_name) \ + ASSERT_MODE_AND_KIND(extension_name, 1, extension) +#define ASSERT_EXTENSION_DISABLED(extension_name) \ + ASSERT_MODE_AND_KIND(extension_name, 0, extension) + +#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) +ASSERT_FEATURE_ENABLED(ptrauth_intrinsics) +ASSERT_EXTENSION_ENABLED(ptrauth_qualifier) + +#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) +ASSERT_FEATURE_DISABLED(ptrauth_calls) +// These flags directly reflect the state of ptrauth_calls, but exist +// for backward compatibility reasons +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) +#else +ASSERT_FEATURE_ENABLED(ptrauth_calls) +ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer) +#endif + +ASSERT_FEATURE_ENABLED(ptrauth_returns) +ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) +ASSERT_FEATURE_ENABLED(ptrauth_objc_isa) +ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel) +ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class) +#endif + +#ifdef NO_DEFAULT_PTRAUTH +ASSERT_FEATURE_DISABLED(ptrauth_intrinsics) +ASSERT_EXTENSION_DISABLED(ptrauth_qualifier) +ASSERT_FEATURE_DISABLED(ptrauth_calls) +ASSERT_FEATURE_DISABLED(ptrauth_returns) +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) +ASSERT_FEATURE_DISABLED(ptrauth_objc_isa) +ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel) +ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class) +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) +#endif + +// darwin_ptrauth_defaults-no-diagnostics +// no_default_ptrauth-no-diagnostics +// darwin_ptrauth_override-no-diagnostics diff --git a/clang/test/Driver/arch-arm64e.c b/clang/test/Driver/arch-arm64e.c index d678a038f1737..c85f22eac39af 100644 --- a/clang/test/Driver/arch-arm64e.c +++ b/clang/test/Driver/arch-arm64e.c @@ -61,3 +61,83 @@ // RUN: %clang -target arm64e-apple-ios -fno-ptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix NOTRAP // NOTRAP: "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-objc-isa" "-fptrauth-objc-class-ro" "-fptrauth-objc-interface-sel" + +// Check that the default driver flags correctly propogate through to the compiler + +// RUN: %clang -target arm64-apple-macosx -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64-apple-ios -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth +// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults +// RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults + +// A simple test case to test basic override logic +// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override + + +#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \ + _Static_assert(enabled == __has_##kind(feature), \ + "Expected to have the " #feature " " #kind " enabled"); + +#define ASSERT_FEATURE_ENABLED(feature_name) \ + ASSERT_MODE_AND_KIND(feature_name, 1, feature) +#define ASSERT_FEATURE_DISABLED(feature_name) \ + ASSERT_MODE_AND_KIND(feature_name, 0, feature) +#define ASSERT_EXTENSION_ENABLED(extension_name) \ + ASSERT_MODE_AND_KIND(extension_name, 1, extension) +#define ASSERT_EXTENSION_DISABLED(extension_name) \ + ASSERT_MODE_AND_KIND(extension_name, 0, extension) + +#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) +ASSERT_FEATURE_ENABLED(ptrauth_intrinsics) +ASSERT_EXTENSION_ENABLED(ptrauth_qualifier) + +#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) +ASSERT_FEATURE_DISABLED(ptrauth_calls) +// These flags directly reflect the state of ptrauth_calls, but exist +// for backward compatibility reasons +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) +#else +ASSERT_FEATURE_ENABLED(ptrauth_calls) +ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer) +#endif + +ASSERT_FEATURE_ENABLED(ptrauth_returns) +ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) +ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) +ASSERT_FEATURE_ENABLED(ptrauth_objc_isa) +ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel) +ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class) +#endif + +#ifdef NO_DEFAULT_PTRAUTH +ASSERT_FEATURE_DISABLED(ptrauth_intrinsics) +ASSERT_EXTENSION_DISABLED(ptrauth_qualifier) +ASSERT_FEATURE_DISABLED(ptrauth_calls) +ASSERT_FEATURE_DISABLED(ptrauth_returns) +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) +ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini) +ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) +ASSERT_FEATURE_DISABLED(ptrauth_elf_got) +ASSERT_FEATURE_DISABLED(ptrauth_objc_isa) +ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel) +ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class) +ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) +#endif + +// darwin_ptrauth_defaults-no-diagnostics +// no_default_ptrauth-no-diagnostics +// darwin_ptrauth_override-no-diagnostics diff --git a/clang/test/Driver/ptrauth-platform-defaults.c b/clang/test/Driver/ptrauth-platform-defaults.c deleted file mode 100644 index c1d065a8808a0..0000000000000 --- a/clang/test/Driver/ptrauth-platform-defaults.c +++ /dev/null @@ -1,82 +0,0 @@ -// RUN: %clang -target arm64 -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth -// RUN: %clang -target arm64-apple-macosx -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth -// RUN: %clang -target arm64-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth -// RUN: %clang -target arm64-apple-darwin -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth -// RUN: %clang -target arm64-apple-ios-macabi -DNO_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=no_default_ptrauth -// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults -// RUN: %clang -target arm64e-apple-ios -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults -// RUN: %clang -target arm64e-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults -// RUN: %clang -target arm64e-apple-darwin -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults -// RUN: %clang -target arm64e-apple-ios-macabi -DDARWIN_DEFAULT_PTRAUTH %s -fsyntax-only -Xclang -verify=darwin_ptrauth_defaults - -// A simple test case to test basic override logic -// RUN: %clang -target arm64e-apple-macosx -DDARWIN_DEFAULT_PTRAUTH_OVERRIDE -fno-ptrauth-calls %s -fsyntax-only -Xclang -verify=darwin_ptrauth_override - -#define ASSERT_MODE_AND_KIND(feature, enabled, kind) \ - _Static_assert(enabled == __has_##kind(feature), \ - "Expected to have the " #feature " " #kind " enabled"); - -#define ASSERT_FEATURE_ENABLED(feature_name) \ - ASSERT_MODE_AND_KIND(feature_name, 1, feature) -#define ASSERT_FEATURE_DISABLED(feature_name) \ - ASSERT_MODE_AND_KIND(feature_name, 0, feature) -#define ASSERT_EXTENSION_ENABLED(extension_name) \ - ASSERT_MODE_AND_KIND(extension_name, 1, extension) -#define ASSERT_EXTENSION_DISABLED(extension_name) \ - ASSERT_MODE_AND_KIND(extension_name, 0, extension) - -#if defined(DARWIN_DEFAULT_PTRAUTH) || defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) -ASSERT_FEATURE_ENABLED(ptrauth_intrinsics) -ASSERT_EXTENSION_ENABLED(ptrauth_qualifier) - -#if defined(DARWIN_DEFAULT_PTRAUTH_OVERRIDE) -ASSERT_FEATURE_DISABLED(ptrauth_calls) -// These flags directly reflect the state of ptrauth_calls, but exist -// for backward compatibility reasons -ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) -#else -ASSERT_FEATURE_ENABLED(ptrauth_calls) -ASSERT_FEATURE_ENABLED(ptrauth_member_function_pointer_type_discrimination) -ASSERT_FEATURE_ENABLED(ptrauth_objc_method_list_pointer) -#endif - -ASSERT_FEATURE_ENABLED(ptrauth_returns) -ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_address_discrimination) -ASSERT_FEATURE_ENABLED(ptrauth_vtable_pointer_type_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) -ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) -ASSERT_FEATURE_ENABLED(ptrauth_indirect_gotos) -ASSERT_FEATURE_DISABLED(ptrauth_init_fini) -ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_elf_got) -ASSERT_FEATURE_ENABLED(ptrauth_objc_isa) -ASSERT_FEATURE_ENABLED(ptrauth_objc_interface_sel) -ASSERT_FEATURE_ENABLED(ptrauth_objc_signable_class) -#endif - -#ifdef NO_DEFAULT_PTRAUTH -ASSERT_FEATURE_DISABLED(ptrauth_intrinsics) -ASSERT_EXTENSION_DISABLED(ptrauth_qualifier) -ASSERT_FEATURE_DISABLED(ptrauth_calls) -ASSERT_FEATURE_DISABLED(ptrauth_returns) -ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_address_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_vtable_pointer_type_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_type_info_vtable_pointer_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_member_function_pointer_type_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_signed_block_descriptors) -ASSERT_FEATURE_DISABLED(ptrauth_function_pointer_type_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_indirect_gotos) -ASSERT_FEATURE_DISABLED(ptrauth_init_fini) -ASSERT_FEATURE_DISABLED(ptrauth_init_fini_address_discrimination) -ASSERT_FEATURE_DISABLED(ptrauth_elf_got) -ASSERT_FEATURE_DISABLED(ptrauth_objc_isa) -ASSERT_FEATURE_DISABLED(ptrauth_objc_interface_sel) -ASSERT_FEATURE_DISABLED(ptrauth_objc_signable_class) -ASSERT_FEATURE_DISABLED(ptrauth_objc_method_list_pointer) -#endif - -// darwin_ptrauth_defaults-no-diagnostics -// no_default_ptrauth-no-diagnostics -// darwin_ptrauth_override-no-diagnostics _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits