@@ -24,15 +24,9 @@ using namespace llvm::AArch64PAuth;
2424
2525namespace {
2626
27- class AArch64PointerAuth : public MachineFunctionPass {
27+ class AArch64PointerAuthImpl {
2828public:
29- static char ID;
30-
31- AArch64PointerAuth () : MachineFunctionPass(ID) {}
32-
33- bool runOnMachineFunction (MachineFunction &MF) override ;
34-
35- StringRef getPassName () const override { return AARCH64_POINTER_AUTH_NAME; }
29+ bool run (MachineFunction &MF);
3630
3731private:
3832 const AArch64Subtarget *Subtarget = nullptr ;
@@ -44,16 +38,27 @@ class AArch64PointerAuth : public MachineFunctionPass {
4438 MachineBasicBlock::iterator MBBI) const ;
4539};
4640
41+ class AArch64PointerAuthLegacy : public MachineFunctionPass {
42+ public:
43+ static char ID;
44+
45+ AArch64PointerAuthLegacy () : MachineFunctionPass(ID) {}
46+
47+ bool runOnMachineFunction (MachineFunction &MF) override ;
48+
49+ StringRef getPassName () const override { return AARCH64_POINTER_AUTH_NAME; }
50+ };
51+
4752} // end anonymous namespace
4853
49- INITIALIZE_PASS (AArch64PointerAuth , " aarch64-ptrauth" ,
54+ INITIALIZE_PASS (AArch64PointerAuthLegacy , " aarch64-ptrauth" ,
5055 AARCH64_POINTER_AUTH_NAME, false , false )
5156
5257FunctionPass *llvm::createAArch64PointerAuthPass() {
53- return new AArch64PointerAuth ();
58+ return new AArch64PointerAuthLegacy ();
5459}
5560
56- char AArch64PointerAuth ::ID = 0 ;
61+ char AArch64PointerAuthLegacy ::ID = 0 ;
5762
5863static void emitPACSymOffsetIntoX16 (const TargetInstrInfo &TII,
5964 MachineBasicBlock &MBB,
@@ -80,8 +85,8 @@ static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
8085 : CFIBuilder.buildNegateRAState ();
8186}
8287
83- void AArch64PointerAuth ::signLR (MachineFunction &MF,
84- MachineBasicBlock::iterator MBBI) const {
88+ void AArch64PointerAuthImpl ::signLR (MachineFunction &MF,
89+ MachineBasicBlock::iterator MBBI) const {
8590 auto &MFnI = *MF.getInfo <AArch64FunctionInfo>();
8691 bool UseBKey = MFnI.shouldSignWithBKey ();
8792 bool EmitCFI = MFnI.needsDwarfUnwindInfo (MF);
@@ -134,7 +139,7 @@ void AArch64PointerAuth::signLR(MachineFunction &MF,
134139 }
135140}
136141
137- void AArch64PointerAuth ::authenticateLR (
142+ void AArch64PointerAuthImpl ::authenticateLR (
138143 MachineFunction &MF, MachineBasicBlock::iterator MBBI) const {
139144 const AArch64FunctionInfo *MFnI = MF.getInfo <AArch64FunctionInfo>();
140145 bool UseBKey = MFnI->shouldSignWithBKey ();
@@ -223,7 +228,7 @@ unsigned llvm::AArch64PAuth::getCheckerSizeInBytes(AuthCheckMethod Method) {
223228 llvm_unreachable (" Unknown AuthCheckMethod enum" );
224229}
225230
226- bool AArch64PointerAuth::runOnMachineFunction (MachineFunction &MF) {
231+ bool AArch64PointerAuthImpl::run (MachineFunction &MF) {
227232 Subtarget = &MF.getSubtarget <AArch64Subtarget>();
228233 TII = Subtarget->getInstrInfo ();
229234
@@ -261,3 +266,18 @@ bool AArch64PointerAuth::runOnMachineFunction(MachineFunction &MF) {
261266
262267 return Modified;
263268}
269+
270+ bool AArch64PointerAuthLegacy::runOnMachineFunction (MachineFunction &MF) {
271+ return AArch64PointerAuthImpl ().run (MF);
272+ }
273+
274+ PreservedAnalyses
275+ AArch64PointerAuthPass::run (MachineFunction &MF,
276+ MachineFunctionAnalysisManager &MFAM) {
277+ const bool Changed = AArch64PointerAuthImpl ().run (MF);
278+ if (!Changed)
279+ return PreservedAnalyses::all ();
280+ PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses ();
281+ PA.preserveSet <CFGAnalyses>();
282+ return PA;
283+ }
0 commit comments