$OpenBSD: patch-lib_Target_AArch64_AArch64AsmPrinter_cpp,v 1.1 2018/08/21 06:56:09 ajacoutot Exp $

Add retguard for arm64.

Index: lib/Target/AArch64/AArch64AsmPrinter.cpp
--- lib/Target/AArch64/AArch64AsmPrinter.cpp.orig
+++ lib/Target/AArch64/AArch64AsmPrinter.cpp
@@ -708,6 +708,19 @@ void AArch64AsmPrinter::EmitInstruction(const MachineI
   case TargetOpcode::PATCHABLE_TAIL_CALL:
     LowerPATCHABLE_TAIL_CALL(*MI);
     return;
+
+  case AArch64::RETGUARD_JMP_TRAP:
+    {
+    MCSymbol *RGSuccSym = OutContext.createTempSymbol();
+    /* Compare and branch */
+    EmitToStreamer(*OutStreamer, MCInstBuilder(AArch64::CBZX)
+        .addReg(MI->getOperand(0).getReg())
+        .addExpr(MCSymbolRefExpr::create(RGSuccSym, OutContext)));
+    EmitToStreamer(*OutStreamer, MCInstBuilder(AArch64::BRK).addImm(1));
+    OutStreamer->EmitLabel(RGSuccSym);
+    return;
+    }
+
   }
 
   // Finally, do the automated lowerings for everything else.
