================
@@ -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

Reply via email to