[clang] Update Mach-O ptrauth driver defaults (#132834)
Xcode clang default-enables a bunch of ptrauth flags when targeting arm64e. Let's match that.
This commit is contained in:
parent
4cdcf3b193
commit
c4bc1b1d81
@ -1201,6 +1201,13 @@ void DarwinClang::addClangWarningOptions(ArgStringList &CC1Args) const {
|
||||
}
|
||||
}
|
||||
|
||||
void DarwinClang::addClangTargetOptions(
|
||||
const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
|
||||
Action::OffloadKind DeviceOffloadKind) const {
|
||||
|
||||
Darwin::addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadKind);
|
||||
}
|
||||
|
||||
/// Take a path that speculatively points into Xcode and return the
|
||||
/// `XCODE/Contents/Developer` path if it is an Xcode path, or an empty path
|
||||
/// otherwise.
|
||||
@ -3056,9 +3063,43 @@ bool Darwin::isSizedDeallocationUnavailable() const {
|
||||
return TargetVersion < sizedDeallocMinVersion(OS);
|
||||
}
|
||||
|
||||
void MachO::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
|
||||
llvm::opt::ArgStringList &CC1Args,
|
||||
Action::OffloadKind DeviceOffloadKind) const {
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
void Darwin::addClangTargetOptions(
|
||||
const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
|
||||
Action::OffloadKind DeviceOffloadKind) const {
|
||||
|
||||
MachO::addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadKind);
|
||||
|
||||
// Pass "-faligned-alloc-unavailable" only when the user hasn't manually
|
||||
// enabled or disabled aligned allocations.
|
||||
if (!DriverArgs.hasArgNoClaim(options::OPT_faligned_allocation,
|
||||
|
@ -145,6 +145,11 @@ protected:
|
||||
Tool *buildStaticLibTool() const override;
|
||||
Tool *getTool(Action::ActionClass AC) const override;
|
||||
|
||||
void
|
||||
addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
|
||||
llvm::opt::ArgStringList &CC1Args,
|
||||
Action::OffloadKind DeviceOffloadKind) const override;
|
||||
|
||||
private:
|
||||
mutable std::unique_ptr<tools::darwin::Lipo> Lipo;
|
||||
mutable std::unique_ptr<tools::darwin::Dsymutil> Dsymutil;
|
||||
@ -653,6 +658,11 @@ public:
|
||||
|
||||
void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override;
|
||||
|
||||
void
|
||||
addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
|
||||
llvm::opt::ArgStringList &CC1Args,
|
||||
Action::OffloadKind DeviceOffloadKind) const override;
|
||||
|
||||
void AddLinkARCArgs(const llvm::opt::ArgList &Args,
|
||||
llvm::opt::ArgStringList &CmdArgs) const override;
|
||||
|
||||
|
66
clang/test/Driver/arch-arm64e.c
Normal file
66
clang/test/Driver/arch-arm64e.c
Normal file
@ -0,0 +1,66 @@
|
||||
// Check that we can manually enable specific ptrauth features.
|
||||
|
||||
// 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-indirect-gotos"
|
||||
// NONE-NOT: "-fptrauth-auth-traps"
|
||||
|
||||
// RUN: %clang -target arm64-apple-darwin -fptrauth-calls -c %s -### 2>&1 | FileCheck %s --check-prefix CALL
|
||||
// CALL: "-cc1"{{.*}} {{.*}} "-fptrauth-calls"
|
||||
|
||||
// RUN: %clang -target arm64-apple-darwin -fptrauth-intrinsics -c %s -### 2>&1 | FileCheck %s --check-prefix INTRIN
|
||||
// INTRIN: "-cc1"{{.*}} {{.*}} "-fptrauth-intrinsics"
|
||||
|
||||
// RUN: %clang -target arm64-apple-darwin -fptrauth-returns -c %s -### 2>&1 | FileCheck %s --check-prefix RETURN
|
||||
// RETURN: "-cc1"{{.*}} {{.*}} "-fptrauth-returns"
|
||||
|
||||
// RUN: %clang -target arm64-apple-darwin -fptrauth-indirect-gotos -c %s -### 2>&1 | FileCheck %s --check-prefix INDGOTO
|
||||
// INDGOTO: "-cc1"{{.*}} {{.*}} "-fptrauth-indirect-gotos"
|
||||
|
||||
// RUN: %clang -target arm64-apple-darwin -fptrauth-auth-traps -c %s -### 2>&1 | FileCheck %s --check-prefix TRAPS
|
||||
// TRAPS: "-cc1"{{.*}} {{.*}} "-fptrauth-auth-traps"
|
||||
|
||||
|
||||
// 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-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"{{.*}}
|
||||
|
||||
|
||||
// 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"
|
||||
|
||||
|
||||
// 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"
|
||||
|
||||
// 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"{{.*}}
|
||||
|
||||
|
||||
// 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"
|
Loading…
x
Reference in New Issue
Block a user