summaryrefslogtreecommitdiff
path: root/clang/lib/Driver/ToolChains/Darwin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Driver/ToolChains/Darwin.cpp')
-rw-r--r--clang/lib/Driver/ToolChains/Darwin.cpp38
1 files changed, 28 insertions, 10 deletions
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp
index e5075cbcaf66..234683f2f488 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -3187,28 +3187,46 @@ 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") {
+ // On arm64e, we enable all the features required for the Darwin userspace
+ // ABI
+ if (getTriple().isArm64e()) {
+ // Core platform ABI
+ if (!DriverArgs.hasArg(options::OPT_fptrauth_calls,
+ options::OPT_fno_ptrauth_calls))
+ CC1Args.push_back("-fptrauth-calls");
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");
-
- if (!DriverArgs.hasArg(options::OPT_fptrauth_calls,
- options::OPT_fno_ptrauth_calls))
- CC1Args.push_back("-fptrauth-calls");
-
if (!DriverArgs.hasArg(options::OPT_fptrauth_indirect_gotos,
options::OPT_fno_ptrauth_indirect_gotos))
CC1Args.push_back("-fptrauth-indirect-gotos");
-
if (!DriverArgs.hasArg(options::OPT_fptrauth_auth_traps,
options::OPT_fno_ptrauth_auth_traps))
CC1Args.push_back("-fptrauth-auth-traps");
+
+ // C++ v-table ABI
+ if (!DriverArgs.hasArg(
+ options::OPT_fptrauth_vtable_pointer_address_discrimination,
+ options::OPT_fno_ptrauth_vtable_pointer_address_discrimination))
+ CC1Args.push_back("-fptrauth-vtable-pointer-address-discrimination");
+ if (!DriverArgs.hasArg(
+ options::OPT_fptrauth_vtable_pointer_type_discrimination,
+ options::OPT_fno_ptrauth_vtable_pointer_type_discrimination))
+ CC1Args.push_back("-fptrauth-vtable-pointer-type-discrimination");
+
+ // Objective-C ABI
+ if (!DriverArgs.hasArg(options::OPT_fptrauth_objc_isa,
+ options::OPT_fno_ptrauth_objc_isa))
+ CC1Args.push_back("-fptrauth-objc-isa");
+ if (!DriverArgs.hasArg(options::OPT_fptrauth_objc_class_ro,
+ options::OPT_fno_ptrauth_objc_class_ro))
+ CC1Args.push_back("-fptrauth-objc-class-ro");
+ if (!DriverArgs.hasArg(options::OPT_fptrauth_objc_interface_sel,
+ options::OPT_fno_ptrauth_objc_interface_sel))
+ CC1Args.push_back("-fptrauth-objc-interface-sel");
}
}