Skip to content

Commit 706d9f3

Browse files
kettenismordak
authored andcommitted
Fix parsing of branch target protection options on arm64 to enable BTI and PAC again by default on OpenBSD.
ok robert@
1 parent cc19e53 commit 706d9f3

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,15 +1566,21 @@ void AddUnalignedAccessWarning(ArgStringList &CmdArgs) {
15661566

15671567
static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args,
15681568
ArgStringList &CmdArgs, bool isAArch64) {
1569+
const llvm::Triple &Triple = TC.getEffectiveTriple();
15691570
const Arg *A = isAArch64
15701571
? Args.getLastArg(options::OPT_msign_return_address_EQ,
15711572
options::OPT_mbranch_protection_EQ)
15721573
: Args.getLastArg(options::OPT_mbranch_protection_EQ);
1573-
if (!A)
1574+
if (!A) {
1575+
if (Triple.isOSOpenBSD()) {
1576+
CmdArgs.push_back("-msign-return-address=non-leaf");
1577+
CmdArgs.push_back("-msign-return-address-key=a_key");
1578+
CmdArgs.push_back("-mbranch-target-enforce");
1579+
}
15741580
return;
1581+
}
15751582

15761583
const Driver &D = TC.getDriver();
1577-
const llvm::Triple &Triple = TC.getEffectiveTriple();
15781584
if (!(isAArch64 || (Triple.isArmT32() && Triple.isArmMClass())))
15791585
D.Diag(diag::warn_incompatible_branch_protection_option)
15801586
<< Triple.getArchName();
@@ -1613,13 +1619,6 @@ static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args,
16131619
Args.MakeArgString(Twine("-msign-return-address-key=") + Key));
16141620
if (IndirectBranches)
16151621
CmdArgs.push_back("-mbranch-target-enforce");
1616-
else {
1617-
if (Triple.isOSOpenBSD()) {
1618-
CmdArgs.push_back("-msign-return-address=non-leaf");
1619-
CmdArgs.push_back("-msign-return-address-key=a_key");
1620-
CmdArgs.push_back("-mbranch-target-enforce");
1621-
}
1622-
}
16231622
}
16241623

16251624
void Clang::AddARMTargetArgs(const llvm::Triple &Triple, const ArgList &Args,

0 commit comments

Comments
 (0)