Skip to content

Commit 1fc62bf

Browse files
committed
Merge commit '993c5643ce0f' from llvm.org/release/21.x into stable/21.x
2 parents 4f6818a + 993c564 commit 1fc62bf

File tree

4 files changed

+57
-22
lines changed

4 files changed

+57
-22
lines changed

clang/include/clang/Basic/Features.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ FEATURE(ptrauth_elf_got, LangOpts.PointerAuthELFGOT)
171171

172172
FEATURE(ptrauth_objc_isa, LangOpts.PointerAuthObjcIsa)
173173
FEATURE(ptrauth_objc_interface_sel, LangOpts.PointerAuthObjcInterfaceSel)
174-
FEATURE(ptrauth_objc_signable_class, true)
174+
FEATURE(ptrauth_objc_signable_class, LangOpts.PointerAuthIntrinsics)
175175
FEATURE(ptrauth_objc_method_list_pointer, LangOpts.PointerAuthCalls)
176176

177177
EXTENSION(swiftcc,

clang/lib/Driver/ToolChains/Darwin.cpp

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3330,9 +3330,9 @@ void MachO::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
33303330

33313331
ToolChain::addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadKind);
33323332

3333-
// On arm64e, enable pointer authentication (for the return address and
3334-
// indirect calls), as well as usage of the intrinsics.
3335-
if (getArchName() == "arm64e") {
3333+
// On arm64e, we enable all the features required for the Darwin userspace
3334+
// ABI
3335+
if (getTriple().isArm64e()) {
33363336
// The ptrauth ABI version is 0 by default, but can be overridden.
33373337
static const constexpr unsigned DefaultPtrauthABIVersion = 0;
33383338

@@ -3364,26 +3364,43 @@ void MachO::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
33643364
!DriverArgs.hasArg(options::OPT_fno_ptrauth_kernel_abi_version))
33653365
CC1Args.push_back("-fptrauth-kernel-abi-version");
33663366
}
3367-
3367+
// Core platform ABI
3368+
if (!DriverArgs.hasArg(options::OPT_fptrauth_calls,
3369+
options::OPT_fno_ptrauth_calls))
3370+
CC1Args.push_back("-fptrauth-calls");
33683371
if (!DriverArgs.hasArg(options::OPT_fptrauth_returns,
33693372
options::OPT_fno_ptrauth_returns))
33703373
CC1Args.push_back("-fptrauth-returns");
3371-
33723374
if (!DriverArgs.hasArg(options::OPT_fptrauth_intrinsics,
33733375
options::OPT_fno_ptrauth_intrinsics))
33743376
CC1Args.push_back("-fptrauth-intrinsics");
3375-
3376-
if (!DriverArgs.hasArg(options::OPT_fptrauth_calls,
3377-
options::OPT_fno_ptrauth_calls))
3378-
CC1Args.push_back("-fptrauth-calls");
3379-
33803377
if (!DriverArgs.hasArg(options::OPT_fptrauth_indirect_gotos,
33813378
options::OPT_fno_ptrauth_indirect_gotos))
33823379
CC1Args.push_back("-fptrauth-indirect-gotos");
3383-
33843380
if (!DriverArgs.hasArg(options::OPT_fptrauth_auth_traps,
33853381
options::OPT_fno_ptrauth_auth_traps))
33863382
CC1Args.push_back("-fptrauth-auth-traps");
3383+
3384+
// C++ v-table ABI
3385+
if (!DriverArgs.hasArg(
3386+
options::OPT_fptrauth_vtable_pointer_address_discrimination,
3387+
options::OPT_fno_ptrauth_vtable_pointer_address_discrimination))
3388+
CC1Args.push_back("-fptrauth-vtable-pointer-address-discrimination");
3389+
if (!DriverArgs.hasArg(
3390+
options::OPT_fptrauth_vtable_pointer_type_discrimination,
3391+
options::OPT_fno_ptrauth_vtable_pointer_type_discrimination))
3392+
CC1Args.push_back("-fptrauth-vtable-pointer-type-discrimination");
3393+
3394+
// Objective-C ABI
3395+
if (!DriverArgs.hasArg(options::OPT_fptrauth_objc_isa,
3396+
options::OPT_fno_ptrauth_objc_isa))
3397+
CC1Args.push_back("-fptrauth-objc-isa");
3398+
if (!DriverArgs.hasArg(options::OPT_fptrauth_objc_class_ro,
3399+
options::OPT_fno_ptrauth_objc_class_ro))
3400+
CC1Args.push_back("-fptrauth-objc-class-ro");
3401+
if (!DriverArgs.hasArg(options::OPT_fptrauth_objc_interface_sel,
3402+
options::OPT_fno_ptrauth_objc_interface_sel))
3403+
CC1Args.push_back("-fptrauth-objc-interface-sel");
33873404
}
33883405
}
33893406

clang/test/Driver/arch-arm64e.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,21 @@
22

33
// RUN: %clang -target arm64-apple-darwin -c %s -### 2>&1 | FileCheck %s --check-prefix NONE
44
// NONE: "-cc1"
5-
// NONE-NOT: "-fptrauth-intrinsics"
5+
66
// NONE-NOT: "-fptrauth-calls"
77
// NONE-NOT: "-fptrauth-returns"
8+
// NONE-NOT: "-fptrauth-intrinsics"
89
// NONE-NOT: "-fptrauth-indirect-gotos"
910
// NONE-NOT: "-fptrauth-auth-traps"
1011
// NONE-NOT: "-fptrauth-soft"
12+
// NONE-NOT: "-fptrauth-vtable-pointer-address-discrimination"
13+
// NONE-NOT: "-fptrauth-vtable-pointer-type-discrimination"
14+
// NONE-NOT: "-fptrauth-objc-isa"
15+
// NONE-NOT: "-fptrauth-objc-class-ro"
16+
// NONE-NOT: "-fptrauth-objc-interface-sel"
17+
18+
// Final catch all if any new flags are added
19+
// NONE-NOT: "-fptrauth"
1120

1221
// RUN: %clang -target arm64-apple-darwin -fptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix CALL
1322
// CALL: "-cc1"{{.*}} {{.*}} "-fptrauth-calls"
@@ -31,35 +40,36 @@
3140
// Check the arm64e defaults.
3241

3342
// RUN: %clang -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT
43+
// RUN: %clang -target arm64e-apple-macos -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULTMAC
44+
// RUN: %if system-darwin && target={{.*}}-{{darwin|macos}}{{.*}} %{ %clang -target arm64e-apple-macos -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULTARCH %}
3445
// RUN: %clang -mkernel -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT
3546
// RUN: %clang -fapple-kext -target arm64e-apple-ios -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT
36-
// DEFAULT: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}}
47+
// 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" {{.*}}"-target-cpu" "apple-a12"{{.*}}
48+
// DEFAULTMAC: "-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" {{.*}}"-target-cpu" "apple-m1"{{.*}}
49+
// DEFAULTARCH: "-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"
3750

3851
// RUN: %clang -target arm64e-apple-none-macho -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-MACHO
39-
// DEFAULT-MACHO: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}}
52+
// 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" {{.*}}"-target-cpu" "apple-a12"{{.*}}
4053

4154

4255
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL
43-
// RUN: %clang -mkernel -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL
44-
// RUN: %clang -fapple-kext -target arm64e-apple-ios -fno-ptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix DEFAULT-NOCALL
4556
// DEFAULT-NOCALL-NOT: "-fptrauth-calls"
46-
// DEFAULT-NOCALL: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"
57+
// 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" {{.*}}"-target-cpu" "apple-a12"
4758

4859

4960
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-returns -c %s -### 2>&1 | FileCheck %s --check-prefix NORET
5061

5162
// NORET-NOT: "-fptrauth-returns"
52-
// NORET: "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"
63+
// 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" {{.*}}"-target-cpu" "apple-a12"
5364

5465
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-intrinsics -c %s -### 2>&1 | FileCheck %s --check-prefix NOINTRIN
5566

56-
// NOINTRIN: "-fptrauth-returns"
5767
// NOINTRIN-NOT: "-fptrauth-intrinsics"
58-
// NOINTRIN: "-fptrauth-calls" "-fptrauth-indirect-gotos" "-fptrauth-auth-traps" {{.*}}"-target-cpu" "apple-a12"{{.*}}
68+
// 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" {{.*}}"-target-cpu" "apple-a12"
5969

6070

6171
// RUN: %clang -target arm64e-apple-ios -fno-ptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix NOTRAP
62-
// NOTRAP: "-fptrauth-returns" "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-indirect-gotos" {{.*}}"-target-cpu" "apple-a12"
72+
// 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" {{.*}}"-target-cpu" "apple-a12"
6373

6474

6575
// Check the CPU defaults and overrides.

clang/test/Preprocessor/ptrauth_feature.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,11 @@ void has_ptrauth_elf_got() {}
140140
// NOELFGOT: no_ptrauth_elf_got
141141
void no_ptrauth_elf_got() {}
142142
#endif
143+
144+
#if __has_feature(ptrauth_objc_signable_class)
145+
// INTRIN: has_ptrauth_objc_signable_class
146+
void has_ptrauth_objc_signable_class(){}
147+
#else
148+
// NOINTRIN: no_ptrauth_objc_signable_class
149+
void no_ptrauth_objc_signable_class(){}
150+
#endif

0 commit comments

Comments
 (0)