RuntimeDyldELF.h revision 234982
1//===-- RuntimeDyldELF.h - Run-time dynamic linker for MC-JIT ---*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// ELF support for MC-JIT runtime dynamic linker.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_RUNTIME_DYLD_ELF_H
15#define LLVM_RUNTIME_DYLD_ELF_H
16
17#include "RuntimeDyldImpl.h"
18
19using namespace llvm;
20
21
22namespace llvm {
23class RuntimeDyldELF : public RuntimeDyldImpl {
24protected:
25  ObjectImage *LoadedObject;
26
27  void resolveX86_64Relocation(uint8_t *LocalAddress,
28                               uint64_t FinalAddress,
29                               uint64_t Value,
30                               uint32_t Type,
31                               int64_t Addend);
32
33  void resolveX86Relocation(uint8_t *LocalAddress,
34                            uint32_t FinalAddress,
35                            uint32_t Value,
36                            uint32_t Type,
37                            int32_t Addend);
38
39  void resolveARMRelocation(uint8_t *LocalAddress,
40                            uint32_t FinalAddress,
41                            uint32_t Value,
42                            uint32_t Type,
43                            int32_t Addend);
44
45  virtual void resolveRelocation(uint8_t *LocalAddress,
46                                 uint64_t FinalAddress,
47                                 uint64_t Value,
48                                 uint32_t Type,
49                                 int64_t Addend);
50
51  virtual void processRelocationRef(const ObjRelocationInfo &Rel,
52                                    ObjectImage &Obj,
53                                    ObjSectionToIDMap &ObjSectionToID,
54                                    LocalSymbolMap &Symbols, StubMap &Stubs);
55
56  virtual ObjectImage *createObjectImage(const MemoryBuffer *InputBuffer);
57  virtual void handleObjectLoaded(ObjectImage *Obj);
58
59public:
60  RuntimeDyldELF(RTDyldMemoryManager *mm)
61      : RuntimeDyldImpl(mm), LoadedObject(0) {}
62
63  virtual ~RuntimeDyldELF();
64
65  bool isCompatibleFormat(const MemoryBuffer *InputBuffer) const;
66};
67
68} // end namespace llvm
69
70#endif
71