================
@@ -91,15 +133,37 @@ static void decoratePACWithCFI(MachineBasicBlock &MBB,
auto &MF = *MBB.getParent();
auto &MFnI = *MF.getInfo<AArch64FunctionInfo>();
-
CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::FrameSetup);
+ const Triple &TT = MF.getTarget().getTargetTriple();
+
if (MFnI.branchProtectionPAuthLR()) {
- CFIBuilder.buildNegateRAStateWithPC();
- BuildPACMI();
+ switch (CFILLVMSetRASignStateMode) {
+ case SetRAStateMode::Never:
+ CFIBuilder.buildNegateRAStateWithPC();
+ BuildPACMI();
+ break;
+ case SetRAStateMode::PAuthLR:
+ case SetRAStateMode::Always: {
+ BuildPACMI();
+ MCSymbol *PACSym = MFnI.getSigningInstrLabel();
+ assert(PACSym && "No PAC instruction to refer to");
+ CFIBuilder.buildSetRAState(2, PACSym);
+ break;
+ }
+ }
} else {
- BuildPACMI();
- if (!MF.getTarget().getTargetTriple().isOSBinFormatMachO()) {
- CFIBuilder.buildNegateRAState();
+ switch (CFILLVMSetRASignStateMode) {
+ case SetRAStateMode::Never:
+ case SetRAStateMode::PAuthLR:
+ BuildPACMI();
+ if (!TT.isOSBinFormatMachO()) {
+ CFIBuilder.buildNegateRAState();
+ }
+ break;
+ case SetRAStateMode::Always:
+ BuildPACMI();
+ CFIBuilder.buildSetRAState(1, nullptr);
+ break;
----------------
cofibrant wrote:
```suggestion
BuildPACMI();
switch (CFILLVMSetRASignStateMode) {
case SetRAStateMode::Never:
case SetRAStateMode::PAuthLR:
if (!TT.isOSBinFormatMachO())
CFIBuilder.buildNegateRAState();
break;
case SetRAStateMode::Always:
CFIBuilder.buildSetRAState(1, nullptr);
break;
```
https://github.com/llvm/llvm-project/pull/209949
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits