diff options
author | Nirav Dave <niravd@google.com> | 2017-01-31 17:00:27 +0000 |
---|---|---|
committer | Nirav Dave <niravd@google.com> | 2017-01-31 17:00:27 +0000 |
commit | a7c041d1477bdfd753f7155b2cb1fb739eaddb0f (patch) | |
tree | aae0d257c08f5dfe97a7e8820d81e23986524b5e /llvm/lib/Target/X86/X86MCInstLower.cpp | |
parent | 62b83ede84f5965358a6f91e52d0f9fc841ff556 (diff) | |
download | bcm5719-llvm-a7c041d1477bdfd753f7155b2cb1fb739eaddb0f.tar.gz bcm5719-llvm-a7c041d1477bdfd753f7155b2cb1fb739eaddb0f.zip |
[X86] Implement -mfentry
Summary: Insert calls to __fentry__ at function entry.
Reviewers: hfinkel, craig.topper
Subscribers: mgorny, llvm-commits
Differential Revision: https://reviews.llvm.org/D28000
llvm-svn: 293648
Diffstat (limited to 'llvm/lib/Target/X86/X86MCInstLower.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86MCInstLower.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 8fa43141225..c7cc1a08237 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -919,6 +919,19 @@ void X86AsmPrinter::LowerFAULTING_LOAD_OP(const MachineInstr &MI, OutStreamer->EmitInstruction(LoadMI, getSubtargetInfo()); } +void X86AsmPrinter::LowerFENTRY_CALL(const MachineInstr &MI, + X86MCInstLower &MCIL) { + bool Is64Bits = Subtarget->is64Bit(); + MCContext &Ctx = OutStreamer->getContext(); + MCSymbol *fentry = Ctx.getOrCreateSymbol("__fentry__"); + const MCSymbolRefExpr *Op = + MCSymbolRefExpr::create(fentry, MCSymbolRefExpr::VK_None, Ctx); + + EmitAndCountInstruction( + MCInstBuilder(Is64Bits ? X86::CALL64pcrel32 : X86::CALLpcrel32) + .addExpr(Op)); +} + void X86AsmPrinter::LowerPATCHABLE_OP(const MachineInstr &MI, X86MCInstLower &MCIL) { // PATCHABLE_OP minsize, opcode, operands @@ -1377,6 +1390,9 @@ void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) { case TargetOpcode::FAULTING_LOAD_OP: return LowerFAULTING_LOAD_OP(*MI, MCInstLowering); + case TargetOpcode::FENTRY_CALL: + return LowerFENTRY_CALL(*MI, MCInstLowering); + case TargetOpcode::PATCHABLE_OP: return LowerPATCHABLE_OP(*MI, MCInstLowering); |