LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RuntimeDyldMachO.h
Go to the documentation of this file.
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 "RuntimeDyldImpl.h"
18 #include "llvm/ADT/IndexedMap.h"
19 #include "llvm/Object/MachO.h"
20 #include "llvm/Support/Format.h"
21 
22 using namespace llvm;
23 using namespace llvm::object;
24 
25 
26 namespace llvm {
28  bool resolveI386Relocation(uint8_t *LocalAddress,
29  uint64_t FinalAddress,
30  uint64_t Value,
31  bool isPCRel,
32  unsigned Type,
33  unsigned Size,
34  int64_t Addend);
35  bool resolveX86_64Relocation(uint8_t *LocalAddress,
36  uint64_t FinalAddress,
37  uint64_t Value,
38  bool isPCRel,
39  unsigned Type,
40  unsigned Size,
41  int64_t Addend);
42  bool resolveARMRelocation(uint8_t *LocalAddress,
43  uint64_t FinalAddress,
44  uint64_t Value,
45  bool isPCRel,
46  unsigned Type,
47  unsigned Size,
48  int64_t Addend);
49 
50  void resolveRelocation(const SectionEntry &Section,
51  uint64_t Offset,
52  uint64_t Value,
53  uint32_t Type,
54  int64_t Addend,
55  bool isPCRel,
56  unsigned Size);
57 
58  unsigned getMaxStubSize() {
59  if (Arch == Triple::arm || Arch == Triple::thumb)
60  return 8; // 32-bit instruction and 32-bit address
61  else if (Arch == Triple::x86_64)
62  return 8; // GOT entry
63  else
64  return 0;
65  }
66 
67  unsigned getStubAlignment() {
68  return 1;
69  }
70 
71  struct EHFrameRelatedSections {
72  EHFrameRelatedSections() : EHFrameSID(RTDYLD_INVALID_SECTION_ID),
74  ExceptTabSID(RTDYLD_INVALID_SECTION_ID) {}
75  EHFrameRelatedSections(SID EH, SID T, SID Ex)
76  : EHFrameSID(EH), TextSID(T), ExceptTabSID(Ex) {}
77  SID EHFrameSID;
78  SID TextSID;
79  SID ExceptTabSID;
80  };
81 
82  // When a module is loaded we save the SectionID of the EH frame section
83  // in a table until we receive a request to register all unregistered
84  // EH frame sections with the memory manager.
85  SmallVector<EHFrameRelatedSections, 2> UnregisteredEHFrameSections;
86 public:
88 
89  virtual void resolveRelocation(const RelocationEntry &RE, uint64_t Value);
90  virtual void processRelocationRef(unsigned SectionID,
91  RelocationRef RelI,
92  ObjectImage &Obj,
93  ObjSectionToIDMap &ObjSectionToID,
94  const SymbolTableMap &Symbols,
95  StubMap &Stubs);
96  virtual bool isCompatibleFormat(const ObjectBuffer *Buffer) const;
97  virtual void registerEHFrames();
98  virtual void finalizeLoad(ObjSectionToIDMap &SectionMap);
99 };
100 
101 } // end namespace llvm
102 
103 #endif
RuntimeDyldMachO(RTDyldMemoryManager *mm)
#define RTDYLD_INVALID_SECTION_ID
LLVM Value Representation.
Definition: Value.h:66