Author: Brad Smith Date: 2025-02-06T02:27:10-05:00 New Revision: 6567122a057ab2992b9a68b674e14f073a3c9e59
URL: https://github.com/llvm/llvm-project/commit/6567122a057ab2992b9a68b674e14f073a3c9e59 DIFF: https://github.com/llvm/llvm-project/commit/6567122a057ab2992b9a68b674e14f073a3c9e59.diff LOG: [PAC][Driver] Enable BTI and PAC by default on OpenBSD/aarch64 (#125392) Added: Modified: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/openbsd.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 050a159ad42b867..9ca56f5bdf4d814 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -1560,15 +1560,21 @@ static void handlePAuthABI(const ArgList &DriverArgs, ArgStringList &CC1Args) { static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool isAArch64) { + const llvm::Triple &Triple = TC.getEffectiveTriple(); const Arg *A = isAArch64 ? Args.getLastArg(options::OPT_msign_return_address_EQ, options::OPT_mbranch_protection_EQ) : Args.getLastArg(options::OPT_mbranch_protection_EQ); - if (!A) + if (!A) { + if (Triple.isOSOpenBSD() && isAArch64) { + CmdArgs.push_back("-msign-return-address=non-leaf"); + CmdArgs.push_back("-msign-return-address-key=a_key"); + CmdArgs.push_back("-mbranch-target-enforce"); + } return; + } const Driver &D = TC.getDriver(); - const llvm::Triple &Triple = TC.getEffectiveTriple(); if (!(isAArch64 || (Triple.isArmT32() && Triple.isArmMClass()))) D.Diag(diag::warn_incompatible_branch_protection_option) << Triple.getArchName(); @@ -1582,7 +1588,7 @@ static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, D.Diag(diag::err_drv_unsupported_option_argument) << A->getSpelling() << Scope; Key = "a_key"; - IndirectBranches = false; + IndirectBranches = Triple.isOSOpenBSD() && isAArch64; BranchProtectionPAuthLR = false; GuardedControlStack = false; } else { diff --git a/clang/test/Driver/openbsd.c b/clang/test/Driver/openbsd.c index 672cd3adf44a691..68c114f063d04cd 100644 --- a/clang/test/Driver/openbsd.c +++ b/clang/test/Driver/openbsd.c @@ -136,3 +136,8 @@ // RUN: %clang --target=amd64-unknown-openbsd -flto -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-LTO-FLAGS %s // CHECK-LTO-FLAGS: "-plugin-opt=mcpu=x86-64" + +// Check 64-bit ARM for BTI and PAC flags +// RUN: %clang --target=aarch64-unknown-openbsd -### -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AARCH64-BTI-PAC %s +// CHECK-AARCH64-BTI-PAC: "-msign-return-address=non-leaf" "-msign-return-address-key=a_key" "-mbranch-target-enforce" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits