RuntimeDyldMachO.h revision 234353
1//===-- RuntimeDyldMachO.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// MachO support for MC-JIT runtime dynamic linker.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_RUNTIME_DYLD_MACHO_H
15#define LLVM_RUNTIME_DYLD_MACHO_H
16
17#include "llvm/ADT/IndexedMap.h"
18#include "llvm/Object/MachOObject.h"
19#include "llvm/Support/Format.h"
20#include "RuntimeDyldImpl.h"
21
22using namespace llvm;
23using namespace llvm::object;
24
25
26namespace llvm {
27class RuntimeDyldMachO : public RuntimeDyldImpl {
28protected:
29  bool resolveI386Relocation(uint8_t *LocalAddress,
30                             uint64_t FinalAddress,
31                             uint64_t Value,
32                             bool isPCRel,
33                             unsigned Type,
34                             unsigned Size,
35                             int64_t Addend);
36  bool resolveX86_64Relocation(uint8_t *LocalAddress,
37                               uint64_t FinalAddress,
38                               uint64_t Value,
39                               bool isPCRel,
40                               unsigned Type,
41                               unsigned Size,
42                               int64_t Addend);
43  bool resolveARMRelocation(uint8_t *LocalAddress,
44                            uint64_t FinalAddress,
45                            uint64_t Value,
46                            bool isPCRel,
47                            unsigned Type,
48                            unsigned Size,
49                            int64_t Addend);
50
51  virtual void processRelocationRef(const ObjRelocationInfo &Rel,
52                                    const ObjectFile &Obj,
53                                    ObjSectionToIDMap &ObjSectionToID,
54                                    LocalSymbolMap &Symbols, StubMap &Stubs);
55
56public:
57  virtual void resolveRelocation(uint8_t *LocalAddress,
58                                 uint64_t FinalAddress,
59                                 uint64_t Value,
60                                 uint32_t Type,
61                                 int64_t Addend);
62
63  RuntimeDyldMachO(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm) {}
64
65  bool isCompatibleFormat(const MemoryBuffer *InputBuffer) const;
66};
67
68} // end namespace llvm
69
70#endif
71