diff options
Diffstat (limited to 'contrib/llvm/tools/lli/RemoteMemoryManager.h')
-rw-r--r-- | contrib/llvm/tools/lli/RemoteMemoryManager.h | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/contrib/llvm/tools/lli/RemoteMemoryManager.h b/contrib/llvm/tools/lli/RemoteMemoryManager.h deleted file mode 100644 index 5733fa5..0000000 --- a/contrib/llvm/tools/lli/RemoteMemoryManager.h +++ /dev/null @@ -1,101 +0,0 @@ -//===- RemoteMemoryManager.h - LLI MCJIT recording memory manager ------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This memory manager allocates local storage and keeps a record of each -// allocation. Iterators are provided for all data and code allocations. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_TOOLS_LLI_REMOTEMEMORYMANAGER_H -#define LLVM_TOOLS_LLI_REMOTEMEMORYMANAGER_H - -#include "RemoteTarget.h" -#include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/SmallVector.h" -#include "llvm/ExecutionEngine/RTDyldMemoryManager.h" -#include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/Memory.h" -#include <utility> - -namespace llvm { - -class RemoteMemoryManager : public RTDyldMemoryManager { -public: - // Notice that this structure takes ownership of the memory allocated. - struct Allocation { - Allocation() {} - Allocation(sys::MemoryBlock mb, unsigned a, bool code) - : MB(mb), Alignment(a), IsCode(code) {} - - sys::MemoryBlock MB; - unsigned Alignment; - bool IsCode; - }; - -private: - // This vector contains Allocation objects for all sections which we have - // allocated. This vector effectively owns the memory associated with the - // allocations. - SmallVector<Allocation, 2> AllocatedSections; - - // This vector contains pointers to Allocation objects for any sections we - // have allocated locally but have not yet remapped for the remote target. - // When we receive notification of a completed module load, we will map - // these sections into the remote target. - SmallVector<Allocation, 2> UnmappedSections; - - // This map tracks the sections we have remapped for the remote target - // but have not yet copied to the target. - DenseMap<uint64_t, Allocation> MappedSections; - - // FIXME: This is part of a work around to keep sections near one another - // when MCJIT performs relocations after code emission but before - // the generated code is moved to the remote target. - sys::MemoryBlock Near; - sys::MemoryBlock allocateSection(uintptr_t Size); - - RemoteTarget *Target; - -public: - RemoteMemoryManager() : Target(nullptr) {} - ~RemoteMemoryManager() override; - - uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment, - unsigned SectionID, - StringRef SectionName) override; - - uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment, - unsigned SectionID, StringRef SectionName, - bool IsReadOnly) override; - - // For now, remote symbol resolution is not support in lli. The MCJIT - // interface does support this, but clients must provide their own - // mechanism for finding remote symbol addresses. MCJIT will resolve - // symbols from Modules it contains. - uint64_t getSymbolAddress(const std::string &Name) override { return 0; } - - void notifyObjectLoaded(ExecutionEngine *EE, - const object::ObjectFile &Obj) override; - - bool finalizeMemory(std::string *ErrMsg) override; - - // For now, remote EH frame registration isn't supported. Remote symbol - // resolution is a prerequisite to supporting remote EH frame registration. - void registerEHFrames(uint8_t *Addr, uint64_t LoadAddr, - size_t Size) override {} - void deregisterEHFrames(uint8_t *Addr, uint64_t LoadAddr, - size_t Size) override {} - - // This is a non-interface function used by lli - void setRemoteTarget(RemoteTarget *T) { Target = T; } -}; - -} // end namespace llvm - -#endif |