From 5acfa9f0fd641906e520a6caaf644d03def27ae0 Mon Sep 17 00:00:00 2001 From: Jim Grosbach Date: Tue, 29 Mar 2011 21:03:05 +0000 Subject: [PATCH] Instantiate a JITMemoryManager for MCJIT Dyld git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128485 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ExecutionEngine/RuntimeDyld.h | 3 ++- lib/ExecutionEngine/MCJIT/MCJIT.cpp | 2 +- lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp | 10 +++++++--- tools/llvm-rtdyld/Makefile | 2 +- tools/llvm-rtdyld/llvm-rtdyld.cpp | 3 ++- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/include/llvm/ExecutionEngine/RuntimeDyld.h b/include/llvm/ExecutionEngine/RuntimeDyld.h index 2b5a6918172..ade0047a591 100644 --- a/include/llvm/ExecutionEngine/RuntimeDyld.h +++ b/include/llvm/ExecutionEngine/RuntimeDyld.h @@ -21,6 +21,7 @@ namespace llvm { class RuntimeDyldImpl; class MemoryBuffer; +class JITMemoryManager; class RuntimeDyld { RuntimeDyld(const RuntimeDyld &); // DO NOT IMPLEMENT @@ -30,7 +31,7 @@ class RuntimeDyld { // interface. RuntimeDyldImpl *Dyld; public: - RuntimeDyld(); + RuntimeDyld(JITMemoryManager*); ~RuntimeDyld(); bool loadObject(MemoryBuffer *InputBuffer); diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/lib/ExecutionEngine/MCJIT/MCJIT.cpp index f3e60876684..2e3c9310fb2 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -67,7 +67,7 @@ ExecutionEngine *MCJIT::createJIT(Module *M, MCJIT::MCJIT(Module *m, TargetMachine *tm, TargetJITInfo &tji, JITMemoryManager *JMM, CodeGenOpt::Level OptLevel, bool AllocateGVsWithCode) - : ExecutionEngine(m), TM(tm), M(m), OS(Buffer) { + : ExecutionEngine(m), TM(tm), M(m), OS(Buffer), Dyld(JMM) { PM.add(new TargetData(*TM->getTargetData())); diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index c6b6a9ee884..c041c940de9 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -18,6 +18,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" #include "llvm/ExecutionEngine/RuntimeDyld.h" +#include "llvm/ExecutionEngine/JITMemoryManager.h" #include "llvm/Object/MachOObject.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" @@ -34,6 +35,9 @@ class RuntimeDyldImpl { unsigned CPUType; unsigned CPUSubtype; + // The JITMemoryManager to load objects into. + JITMemoryManager *JMM; + // Master symbol table. As modules are loaded and external symbols are // resolved, their addresses are stored here. StringMap SymbolTable; @@ -68,7 +72,7 @@ class RuntimeDyldImpl { const InMemoryStruct &SymtabLC); public: - RuntimeDyldImpl() : HasError(false) {} + RuntimeDyldImpl(JITMemoryManager *jmm) : JMM(jmm), HasError(false) {} bool loadObject(MemoryBuffer *InputBuffer); @@ -526,8 +530,8 @@ bool RuntimeDyldImpl::loadObject(MemoryBuffer *InputBuffer) { //===----------------------------------------------------------------------===// // RuntimeDyld class implementation -RuntimeDyld::RuntimeDyld() { - Dyld = new RuntimeDyldImpl; +RuntimeDyld::RuntimeDyld(JITMemoryManager *JMM) { + Dyld = new RuntimeDyldImpl(JMM); } RuntimeDyld::~RuntimeDyld() { diff --git a/tools/llvm-rtdyld/Makefile b/tools/llvm-rtdyld/Makefile index 6a879b3e8c7..0d57277f08d 100644 --- a/tools/llvm-rtdyld/Makefile +++ b/tools/llvm-rtdyld/Makefile @@ -18,6 +18,6 @@ TOOL_NO_EXPORTS = 1 # early so we can set up LINK_COMPONENTS before including Makefile.rules include $(LEVEL)/Makefile.config -LINK_COMPONENTS := $(TARGETS_TO_BUILD) support MC object RuntimeDyld +LINK_COMPONENTS := $(TARGETS_TO_BUILD) support MC object RuntimeDyld JIT include $(LLVM_SRC_ROOT)/Makefile.rules diff --git a/tools/llvm-rtdyld/llvm-rtdyld.cpp b/tools/llvm-rtdyld/llvm-rtdyld.cpp index 286a3f251d8..a6709442356 100644 --- a/tools/llvm-rtdyld/llvm-rtdyld.cpp +++ b/tools/llvm-rtdyld/llvm-rtdyld.cpp @@ -13,6 +13,7 @@ #include "llvm/ADT/StringMap.h" #include "llvm/ADT/OwningPtr.h" +#include "llvm/ExecutionEngine/JITMemoryManager.h" #include "llvm/ExecutionEngine/RuntimeDyld.h" #include "llvm/Object/MachOObject.h" #include "llvm/Support/CommandLine.h" @@ -60,7 +61,7 @@ static int executeInput() { return Error("unable to read input: '" + ec.message() + "'"); // Instantiate a dynamic linker. - RuntimeDyld Dyld; + RuntimeDyld Dyld(JITMemoryManager::CreateDefaultMemManager()); // Load the object file into it. if (Dyld.loadObject(InputBuffer.take())) {