diff --git a/lib/Target/X86/X86CodeEmitter.cpp b/lib/Target/X86/X86CodeEmitter.cpp index e24e2904b51..d4a87070e63 100644 --- a/lib/Target/X86/X86CodeEmitter.cpp +++ b/lib/Target/X86/X86CodeEmitter.cpp @@ -23,8 +23,7 @@ #include "Support/Debug.h" #include "Support/Statistic.h" #include "Config/alloca.h" - -namespace llvm { +using namespace llvm; namespace { Statistic<> @@ -54,6 +53,12 @@ namespace { JITResolver *TheJITResolver; } +void *X86TargetMachine::getJITStubForFunction(Function *F, + MachineCodeEmitter &MCE) { + if (TheJITResolver == 0) + TheJITResolver = new JITResolver(MCE); + return (void*)TheJITResolver->getLazyResolver(F); +} /// addFunctionReference - This method is called when we need to emit the /// address of a function that has not yet been emitted, so we don't know the @@ -591,5 +596,3 @@ void Emitter::emitInstruction(MachineInstr &MI) { break; } } - -} // End llvm namespace diff --git a/lib/Target/X86/X86TargetMachine.h b/lib/Target/X86/X86TargetMachine.h index 12f5c0e6a22..206ef89a46d 100644 --- a/lib/Target/X86/X86TargetMachine.h +++ b/lib/Target/X86/X86TargetMachine.h @@ -55,6 +55,12 @@ public: virtual bool addPassesToEmitAssembly(PassManager &PM, std::ostream &Out); virtual void replaceMachineCodeForFunction (void *Old, void *New); + + /// getJITStubForFunction - Create or return a stub for the specified + /// function. This stub acts just like the specified function, except that it + /// allows the "address" of the function to be taken without having to + /// generate code for it. + virtual void *getJITStubForFunction(Function *F, MachineCodeEmitter &MCE); }; } // End llvm namespace