10 #ifndef LLVM_LIB_EXECUTIONENGINE_MCJIT_H
11 #define LLVM_LIB_EXECUTIONENGINE_MCJIT_H
32 : ParentEngine(Parent), ClientMM(MM) {}
38 unsigned SectionID,
StringRef SectionName) {
39 return ClientMM->allocateCodeSection(Size, Alignment, SectionID, SectionName);
43 unsigned SectionID,
StringRef SectionName,
45 return ClientMM->allocateDataSection(Size, Alignment,
46 SectionID, SectionName, IsReadOnly);
51 ClientMM->notifyObjectLoaded(EE, Obj);
55 ClientMM->registerEHFrames(Addr, LoadAddr, Size);
61 ClientMM->deregisterEHFrames(Addr, LoadAddr, Size);
65 return ClientMM->finalizeMemory(ErrMsg);
95 bool AllocateGVsWithCode);
99 class OwningModuleContainer {
101 OwningModuleContainer() {
103 ~OwningModuleContainer() {
104 freeModulePtrSet(AddedModules);
105 freeModulePtrSet(LoadedModules);
106 freeModulePtrSet(FinalizedModules);
119 AddedModules.insert(M);
123 return AddedModules.erase(M) || LoadedModules.erase(M) ||
124 FinalizedModules.erase(M);
127 bool hasModuleBeenAddedButNotLoaded(
Module *M) {
128 return AddedModules.count(M) != 0;
131 bool hasModuleBeenLoaded(
Module *M) {
134 return (LoadedModules.count(M) != 0 ) || (FinalizedModules.count(M) != 0);
137 bool hasModuleBeenFinalized(
Module *M) {
138 return FinalizedModules.count(M) != 0;
141 bool ownsModule(
Module* M) {
142 return (AddedModules.count(M) != 0) || (LoadedModules.count(M) != 0) ||
143 (FinalizedModules.count(M) != 0);
146 void markModuleAsLoaded(
Module *M) {
150 assert(AddedModules.count(M) &&
151 "markModuleAsLoaded: Module not found in AddedModules");
154 AddedModules.erase(M);
157 LoadedModules.insert(M);
160 void markModuleAsFinalized(
Module *M) {
165 assert(LoadedModules.count(M) &&
166 "markModuleAsFinalized: Module not found in LoadedModules");
169 LoadedModules.erase(M);
173 FinalizedModules.insert(M);
176 void markAllLoadedModulesAsFinalized() {
178 E = LoadedModules.end();
181 FinalizedModules.insert(M);
183 LoadedModules.clear();
207 OwningModuleContainer OwnedModules;
216 Function *FindFunctionNamedInModulePtrSet(
const char *FnName,
220 void runStaticConstructorsDestructorsInModulePtrSet(
bool isDtors,
270 const std::vector<GenericValue> &ArgValues);
281 bool AbortOnFailure =
true);
288 uint64_t TargetAddress) {
309 std::string *ErrorStr,
319 bool CheckFunctionsOnly);
334 bool CheckFunctionsOnly);
static ExecutionEngine *(* MCJITCtor)(Module *M, std::string *ErrorStr, RTDyldMemoryManager *MCJMM, bool GVsWithCode, TargetMachine *TM)
virtual uint8_t * allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, StringRef SectionName)
virtual bool finalizeMemory(std::string *ErrMsg=0)
virtual void * getPointerToBasicBlock(BasicBlock *BB)
The main container class for the LLVM Intermediate Representation.
virtual Function * FindFunctionNamed(const char *FnName)
LinkingMemoryManager(MCJIT *Parent, RTDyldMemoryManager *MM)
virtual void notifyObjectLoaded(ExecutionEngine *EE, const ObjectImage *Obj)
virtual void setObjectCache(ObjectCache *manager)
Sets the object manager that MCJIT should use to avoid compilation.
virtual void * recompileAndRelinkFunction(Function *F)
void runStaticConstructorsDestructors(bool isDtors)
static ExecutionEngine * createJIT(Module *M, std::string *ErrorStr, RTDyldMemoryManager *MemMgr, bool GVsWithCode, TargetMachine *TM)
virtual bool removeModule(Module *M)
virtual void finalizeModule(Module *)
virtual uint64_t getGlobalValueAddress(const std::string &Name)
uint64_t getExistingSymbolAddress(const std::string &Name)
virtual void UnregisterJITEventListener(JITEventListener *L)
virtual void registerEHFrames(uint8_t *Addr, uint64_t LoadAddr, size_t Size)
virtual void * getPointerToNamedFunction(const std::string &Name, bool AbortOnFailure=true)
ObjectBufferStream * emitObject(Module *M)
LLVM Basic Block Representation.
void NotifyObjectEmitted(const ObjectImage &Obj)
Abstract interface for implementation execution of LLVM modules, designed to support both interpreter...
virtual void deregisterEHFrames(uint8_t *Addr, uint64_t LoadAddr, size_t Size)
SmallPtrSetIterator - This implements a const_iterator for SmallPtrSet.
uint64_t getSymbolAddress(const std::string &Name, bool CheckFunctionsOnly)
virtual void * getPointerToFunction(Function *F)
Module * findModuleForSymbol(const std::string &Name, bool CheckFunctionsOnly)
virtual uint64_t getSymbolAddress(const std::string &Name)
void NotifyFreeingObject(const ObjectImage &Obj)
virtual uint8_t * allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, StringRef SectionName, bool IsReadOnly)
virtual void freeMachineCodeForFunction(Function *F)
virtual void addModule(Module *M)
virtual void RegisterJITEventListener(JITEventListener *L)
void mapSectionAddress(const void *LocalAddress, uint64_t TargetAddress)
virtual GenericValue runFunction(Function *F, const std::vector< GenericValue > &ArgValues)
void finalizeLoadedModules()
virtual void mapSectionAddress(const void *LocalAddress, uint64_t TargetAddress)
virtual uint64_t getFunctionAddress(const std::string &Name)
virtual void generateCodeForModule(Module *M)
virtual void finalizeObject()