summaryrefslogtreecommitdiff
path: root/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h
diff options
context:
space:
mode:
authorDanil Malyshev <dmalyshev@accesssoftek.com>2012-03-29 21:46:18 +0000
committerDanil Malyshev <dmalyshev@accesssoftek.com>2012-03-29 21:46:18 +0000
commit4b0b8ef1b0edc2c343145f6b029c43b00a6f5c13 (patch)
tree3129fed4802e6e32ce38ca8dc4295d7b0ceffb09 /lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h
parent6c31ee2b10827583a0fbcb39623fdfb440c917ef (diff)
downloadllvm-4b0b8ef1b0edc2c343145f6b029c43b00a6f5c13.tar.gz
llvm-4b0b8ef1b0edc2c343145f6b029c43b00a6f5c13.tar.bz2
llvm-4b0b8ef1b0edc2c343145f6b029c43b00a6f5c13.tar.xz
Re-factored RuntimeDyld.
Added ExecutionEngine/MCJIT tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153694 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h')
-rw-r--r--lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h176
1 files changed, 30 insertions, 146 deletions
diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h
index e0f7d54f43..36566da57a 100644
--- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h
+++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.h
@@ -21,158 +21,42 @@ using namespace llvm;
namespace llvm {
class RuntimeDyldELF : public RuntimeDyldImpl {
- // For each symbol, keep a list of relocations based on it. Anytime
- // its address is reassigned (the JIT re-compiled the function, e.g.),
- // the relocations get re-resolved.
- struct RelocationEntry {
- // Function or section this relocation is contained in.
- std::string Target;
- // Offset into the target function or section for the relocation.
- uint32_t Offset;
- // Relocation type
- uint32_t Type;
- // Addend encoded in the instruction itself, if any.
- int32_t Addend;
- // Has the relocation been recalcuated as an offset within a function?
- bool IsFunctionRelative;
- // Has this relocation been resolved previously?
- bool isResolved;
-
- RelocationEntry(StringRef t,
- uint32_t offset,
- uint32_t type,
- int32_t addend,
- bool isFunctionRelative)
- : Target(t)
- , Offset(offset)
- , Type(type)
- , Addend(addend)
- , IsFunctionRelative(isFunctionRelative)
- , isResolved(false) { }
- };
- typedef SmallVector<RelocationEntry, 4> RelocationList;
- StringMap<RelocationList> Relocations;
- unsigned Arch;
-
- void resolveRelocations();
-
- void resolveX86_64Relocation(StringRef Name,
- uint8_t *Addr,
- const RelocationEntry &RE);
-
- void resolveX86Relocation(StringRef Name,
- uint8_t *Addr,
- const RelocationEntry &RE);
-
- void resolveArmRelocation(StringRef Name,
- uint8_t *Addr,
- const RelocationEntry &RE);
-
- void resolveRelocation(StringRef Name,
- uint8_t *Addr,
- const RelocationEntry &RE);
-
-public:
- RuntimeDyldELF(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm) {}
-
- bool loadObject(MemoryBuffer *InputBuffer);
-
- void reassignSymbolAddress(StringRef Name, uint8_t *Addr);
- void reassignSectionAddress(unsigned SectionID, uint64_t Addr);
-
- bool isCompatibleFormat(const MemoryBuffer *InputBuffer) const;
-};
-
-} // end namespace llvm
-
-#endif
-
-//===-- RuntimeDyldELF.h - Run-time dynamic linker for MC-JIT ---*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// ELF support for MC-JIT runtime dynamic linker.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_RUNTIME_DYLD_ELF_H
-#define LLVM_RUNTIME_DYLD_ELF_H
-
-#include "RuntimeDyldImpl.h"
-
-using namespace llvm;
-
-
-namespace llvm {
-class RuntimeDyldELF : public RuntimeDyldImpl {
- // For each symbol, keep a list of relocations based on it. Anytime
- // its address is reassigned (the JIT re-compiled the function, e.g.),
- // the relocations get re-resolved.
- struct RelocationEntry {
- // Function or section this relocation is contained in.
- std::string Target;
- // Offset into the target function or section for the relocation.
- uint32_t Offset;
- // Relocation type
- uint32_t Type;
- // Addend encoded in the instruction itself, if any.
- int32_t Addend;
- // Has the relocation been recalcuated as an offset within a function?
- bool IsFunctionRelative;
- // Has this relocation been resolved previously?
- bool isResolved;
-
- RelocationEntry(StringRef t,
- uint32_t offset,
- uint32_t type,
- int32_t addend,
- bool isFunctionRelative)
- : Target(t)
- , Offset(offset)
- , Type(type)
- , Addend(addend)
- , IsFunctionRelative(isFunctionRelative)
- , isResolved(false) { }
- };
- typedef SmallVector<RelocationEntry, 4> RelocationList;
- StringMap<RelocationList> Relocations;
- unsigned Arch;
-
- void resolveRelocations();
-
- void resolveX86_64Relocation(StringRef Name,
- uint8_t *Addr,
- const RelocationEntry &RE);
-
- void resolveX86Relocation(StringRef Name,
- uint8_t *Addr,
- const RelocationEntry &RE);
-
- void resolveArmRelocation(StringRef Name,
- uint8_t *Addr,
- const RelocationEntry &RE);
-
- void resolveRelocation(StringRef Name,
- uint8_t *Addr,
- const RelocationEntry &RE);
+protected:
+ void resolveX86_64Relocation(uint8_t *LocalAddress,
+ uint64_t FinalAddress,
+ uint64_t Value,
+ uint32_t Type,
+ int64_t Addend);
+
+ void resolveX86Relocation(uint8_t *LocalAddress,
+ uint32_t FinalAddress,
+ uint32_t Value,
+ uint32_t Type,
+ int32_t Addend);
+
+ void resolveARMRelocation(uint8_t *LocalAddress,
+ uint32_t FinalAddress,
+ uint32_t Value,
+ uint32_t Type,
+ int32_t Addend);
+
+ virtual void resolveRelocation(uint8_t *LocalAddress,
+ uint64_t FinalAddress,
+ uint64_t Value,
+ uint32_t Type,
+ int64_t Addend);
+
+ virtual void processRelocationRef(const ObjRelocationInfo &Rel,
+ const ObjectFile &Obj,
+ ObjSectionToIDMap &ObjSectionToID,
+ LocalSymbolMap &Symbols, StubMap &Stubs);
public:
RuntimeDyldELF(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm) {}
- bool loadObject(MemoryBuffer *InputBuffer);
-
- void reassignSymbolAddress(StringRef Name, uint8_t *Addr);
- void reassignSectionAddress(unsigned SectionID, uint64_t Addr);
-
bool isCompatibleFormat(const MemoryBuffer *InputBuffer) const;
};
} // end namespace llvm
-#endif
-
+#endif