Implement GDB integration for source level debugging of code JITed using
[oota-llvm.git] / lib / ExecutionEngine / RuntimeDyld / RuntimeDyldELF.h
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
19 using namespace llvm;
20
21
22 namespace llvm {
23 class RuntimeDyldELF : public RuntimeDyldImpl {
24 protected:
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
59 public:
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