26 lines
843 B
Text
26 lines
843 B
Text
|
Add retguard for arm64.
|
||
|
|
||
|
Index: lib/Target/AArch64/AArch64AsmPrinter.cpp
|
||
|
--- lib/Target/AArch64/AArch64AsmPrinter.cpp.orig
|
||
|
+++ lib/Target/AArch64/AArch64AsmPrinter.cpp
|
||
|
@@ -1488,6 +1488,19 @@ void AArch64AsmPrinter::emitInstruction(const MachineI
|
||
|
case AArch64::SEH_EpilogEnd:
|
||
|
TS->emitARM64WinCFIEpilogEnd();
|
||
|
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.
|