OSDN Git Service

PowerPC: Initial support for PowerPC64 MCJIT
[android-x86/external-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   void resolveX86_64Relocation(uint8_t *LocalAddress,
26                                uint64_t FinalAddress,
27                                uint64_t Value,
28                                uint32_t Type,
29                                int64_t Addend);
30
31   void resolveX86Relocation(uint8_t *LocalAddress,
32                             uint32_t FinalAddress,
33                             uint32_t Value,
34                             uint32_t Type,
35                             int32_t Addend);
36
37   void resolveARMRelocation(uint8_t *LocalAddress,
38                             uint32_t FinalAddress,
39                             uint32_t Value,
40                             uint32_t Type,
41                             int32_t Addend);
42
43   void resolveMIPSRelocation(uint8_t *LocalAddress,
44                              uint32_t FinalAddress,
45                              uint32_t Value,
46                              uint32_t Type,
47                              int32_t Addend);
48
49   void resolvePPC64Relocation(uint8_t *LocalAddress,
50                               uint64_t FinalAddress,
51                               uint64_t Value,
52                               uint32_t Type,
53                               int64_t Addend);
54
55   virtual void resolveRelocation(uint8_t *LocalAddress,
56                                  uint64_t FinalAddress,
57                                  uint64_t Value,
58                                  uint32_t Type,
59                                  int64_t Addend);
60
61   virtual void processRelocationRef(const ObjRelocationInfo &Rel,
62                                     ObjectImage &Obj,
63                                     ObjSectionToIDMap &ObjSectionToID,
64                                     const SymbolTableMap &Symbols,
65                                     StubMap &Stubs);
66
67   virtual ObjectImage *createObjectImage(ObjectBuffer *InputBuffer);
68
69   uint64_t findPPC64TOC() const;
70   void findOPDEntrySection(ObjectImage &Obj,
71                            ObjSectionToIDMap &LocalSections,
72                            RelocationValueRef &Rel);
73
74 public:
75   RuntimeDyldELF(RTDyldMemoryManager *mm)
76       : RuntimeDyldImpl(mm) {}
77
78   virtual ~RuntimeDyldELF();
79
80   bool isCompatibleFormat(const ObjectBuffer *Buffer) const;
81 };
82
83 } // end namespace llvm
84
85 #endif