@@ -1566,15 +1566,21 @@ void AddUnalignedAccessWarning(ArgStringList &CmdArgs) {
15661566
15671567static 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
16251624void Clang::AddARMTargetArgs (const llvm::Triple &Triple, const ArgList &Args,
0 commit comments