diff options
author | Jim Grosbach <grosbach@apple.com> | 2011-04-04 23:04:39 +0000 |
---|---|---|
committer | Jim Grosbach <grosbach@apple.com> | 2011-04-04 23:04:39 +0000 |
commit | fcbe5b71936b820647dffff0e4f9c60ece3988a5 (patch) | |
tree | dd2bae41b7d089760ca4f8477d732a1d1ca22e13 /include/llvm/ExecutionEngine | |
parent | c15a91dfc84822037c40ae9d37f63ce1b1a763bb (diff) |
Layer the memory manager between the JIT and the runtime Dyld.
The JITMemory manager references LLVM IR constructs directly, while the
runtime Dyld works at a lower level and can handle objects which may not
originate from LLVM IR. Introduce a new layer for the memory manager to
handle the interface between them. For the MCJIT, this layer will be almost
entirely simply a call-through w/ translation between the IR objects and
symbol names.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128851 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ExecutionEngine')
-rw-r--r-- | include/llvm/ExecutionEngine/RuntimeDyld.h | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/include/llvm/ExecutionEngine/RuntimeDyld.h b/include/llvm/ExecutionEngine/RuntimeDyld.h index ade0047a59..01fc338316 100644 --- a/include/llvm/ExecutionEngine/RuntimeDyld.h +++ b/include/llvm/ExecutionEngine/RuntimeDyld.h @@ -21,7 +21,29 @@ namespace llvm { class RuntimeDyldImpl; class MemoryBuffer; -class JITMemoryManager; + +// RuntimeDyld clients often want to handle the memory management of +// what gets placed where. For JIT clients, this is an abstraction layer +// over the JITMemoryManager, which references objects by their source +// representations in LLVM IR. +// FIXME: As the RuntimeDyld fills out, additional routines will be needed +// for the varying types of objects to be allocated. +class RTDyldMemoryManager { + RTDyldMemoryManager(const RTDyldMemoryManager&); // DO NOT IMPLEMENT + void operator=(const RTDyldMemoryManager&); // DO NOT IMPLEMENT +public: + RTDyldMemoryManager() {} + + // Allocate ActualSize bytes, or more, for the named function. Return + // a pointer to the allocated memory and update Size to reflect how much + // memory was acutally allocated. + virtual uint64_t startFunctionBody(const char *Name, uintptr_t &Size) = 0; + + // Mark the end of the function, including how much of the allocated + // memory was actually used. + virtual void endFunctionBody(const char *Name, uint64_t FunctionStart, + uint64_t FunctionEnd) = 0; +}; class RuntimeDyld { RuntimeDyld(const RuntimeDyld &); // DO NOT IMPLEMENT @@ -31,11 +53,12 @@ class RuntimeDyld { // interface. RuntimeDyldImpl *Dyld; public: - RuntimeDyld(JITMemoryManager*); + RuntimeDyld(RTDyldMemoryManager*); ~RuntimeDyld(); bool loadObject(MemoryBuffer *InputBuffer); - void *getSymbolAddress(StringRef Name); + uint64_t getSymbolAddress(StringRef Name); + void reassignSymbolAddress(StringRef Name, uint64_t Addr); // FIXME: Should be parameterized to get the memory block associated with // a particular loaded object. sys::MemoryBlock getMemoryBlock(); |