================ @@ -1537,11 +1570,16 @@ static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, if (!isAArch64 && PBP.Key == "b_key") D.Diag(diag::warn_unsupported_branch_protection) << "b-key" << A->getAsString(Args); + if (!isAArch64 && PBP.HasPauthABI) + D.Diag(diag::warn_unsupported_branch_protection) + << "pauthabi" << A->getAsString(Args); Scope = PBP.Scope; Key = PBP.Key; BranchProtectionPAuthLR = PBP.BranchProtectionPAuthLR; IndirectBranches = PBP.BranchTargetEnforcement; GuardedControlStack = PBP.GuardedControlStack; + if (isAArch64 && PBP.HasPauthABI) ---------------- kovdan01 wrote:
@DanielKristofKiss Thanks! Yes, I now see that authenticating branch instructions also set the `PSTATE.BTYPE`. So, I agree that we can allow pauthabi+bti. The codegen when `pauthabi+bti` is passed as branch protection looks OK on downstream: - for functions which do not sign LR (w/o `pacibsp` in the beginning, e.g. leaf functions), a proper `bti` instruction is emitted in the beginning of the function; - for function which sign LR (with `pacibsp` in the beginning), no additional `bti` instruction is emitted since `pacibsp` also has `bti` built-in, see `SetBTypeCompatible` in https://developer.arm.com/documentation/ddi0602/2022-06/Base-Instructions/PACIB--PACIB1716--PACIBSP--PACIBZ--PACIZB--Pointer-Authentication-Code-for-Instruction-address--using-key-B- In mainline, codegen with `-fptrauth-returns` is not implemented yet, so I can't provide tests verifying generated assembly correctness right now. I'll add them as soon as codegen support for this flag is merged. I've implemented a check which only allows `bti` with `pauthabi` and does not allow `pac-ret[+leaf,+pc,+b-key]` and `gcs`. See 3067c934a957eed21cb3ae73404675242425e5cb Tagging @smithp35 https://github.com/llvm/llvm-project/pull/97237 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits