176463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//===-- RuntimeDyldMachO.h - Run-time dynamic linker for MC-JIT ---*- C++ -*-=//
276463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//
376463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//                     The LLVM Compiler Infrastructure
476463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//
576463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky// This file is distributed under the University of Illinois Open Source
676463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky// License. See LICENSE.TXT for details.
776463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//
876463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//===----------------------------------------------------------------------===//
976463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//
1076463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky// MachO support for MC-JIT runtime dynamic linker.
1176463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//
1276463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky//===----------------------------------------------------------------------===//
1376463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
1476463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky#ifndef LLVM_RUNTIME_DYLD_MACHO_H
1576463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky#define LLVM_RUNTIME_DYLD_MACHO_H
1676463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
17a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "RuntimeDyldImpl.h"
1876463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky#include "llvm/ADT/IndexedMap.h"
192173e1839c2d00f7f980450dd537047b7b376e6bRafael Espindola#include "llvm/Object/MachO.h"
2076463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky#include "llvm/Support/Format.h"
2176463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
2276463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Benderskyusing namespace llvm;
2376463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Benderskyusing namespace llvm::object;
2476463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
2576463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
2676463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Benderskynamespace llvm {
2776463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Benderskyclass RuntimeDyldMachO : public RuntimeDyldImpl {
28b38aae442f0e3ce11a6231455b180bfc66ab5d3eSean Callanan  bool resolveI386Relocation(uint8_t *LocalAddress,
29b38aae442f0e3ce11a6231455b180bfc66ab5d3eSean Callanan                             uint64_t FinalAddress,
30b38aae442f0e3ce11a6231455b180bfc66ab5d3eSean Callanan                             uint64_t Value,
31b38aae442f0e3ce11a6231455b180bfc66ab5d3eSean Callanan                             bool isPCRel,
32b38aae442f0e3ce11a6231455b180bfc66ab5d3eSean Callanan                             unsigned Type,
33b38aae442f0e3ce11a6231455b180bfc66ab5d3eSean Callanan                             unsigned Size,
34b38aae442f0e3ce11a6231455b180bfc66ab5d3eSean Callanan                             int64_t Addend);
3561dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan  bool resolveX86_64Relocation(uint8_t *LocalAddress,
3661dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                               uint64_t FinalAddress,
3761dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                               uint64_t Value,
3861dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                               bool isPCRel,
3961dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                               unsigned Type,
4061dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                               unsigned Size,
4161dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                               int64_t Addend);
4261dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan  bool resolveARMRelocation(uint8_t *LocalAddress,
4361dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                            uint64_t FinalAddress,
4461dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                            uint64_t Value,
4561dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                            bool isPCRel,
4661dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                            unsigned Type,
4761dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                            unsigned Size,
4861dfa77fce2b6b6261e43334aec060129eac5c6cSean Callanan                            int64_t Addend);
4976463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
5087b5017139e9d8ac9b046b3284a9cc68c76185d6Rafael Espindola  void resolveRelocation(const SectionEntry &Section,
5187b5017139e9d8ac9b046b3284a9cc68c76185d6Rafael Espindola                         uint64_t Offset,
5287b5017139e9d8ac9b046b3284a9cc68c76185d6Rafael Espindola                         uint64_t Value,
5387b5017139e9d8ac9b046b3284a9cc68c76185d6Rafael Espindola                         uint32_t Type,
5487b5017139e9d8ac9b046b3284a9cc68c76185d6Rafael Espindola                         int64_t Addend,
5587b5017139e9d8ac9b046b3284a9cc68c76185d6Rafael Espindola                         bool isPCRel,
5687b5017139e9d8ac9b046b3284a9cc68c76185d6Rafael Espindola                         unsigned Size);
5776463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Benderskypublic:
5876463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky  RuntimeDyldMachO(RTDyldMemoryManager *mm) : RuntimeDyldImpl(mm) {}
5976463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
608393b99ed0fb60a966bc40610b8a63029f85962cRafael Espindola  virtual void resolveRelocation(const RelocationEntry &RE, uint64_t Value);
618393b99ed0fb60a966bc40610b8a63029f85962cRafael Espindola  virtual void processRelocationRef(unsigned SectionID,
628393b99ed0fb60a966bc40610b8a63029f85962cRafael Espindola                                    RelocationRef RelI,
638393b99ed0fb60a966bc40610b8a63029f85962cRafael Espindola                                    ObjectImage &Obj,
648393b99ed0fb60a966bc40610b8a63029f85962cRafael Espindola                                    ObjSectionToIDMap &ObjSectionToID,
658393b99ed0fb60a966bc40610b8a63029f85962cRafael Espindola                                    const SymbolTableMap &Symbols,
668393b99ed0fb60a966bc40610b8a63029f85962cRafael Espindola                                    StubMap &Stubs);
678393b99ed0fb60a966bc40610b8a63029f85962cRafael Espindola  virtual bool isCompatibleFormat(const ObjectBuffer *Buffer) const;
68a2e40fbd624916c187a95ed76939ca7f02ed3e53Rafael Espindola  virtual StringRef getEHFrameSection();
6976463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky};
7076463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
7176463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky} // end namespace llvm
7276463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky
7376463fdeb603e1d89b05f094bfd6fe73b90d0b61Eli Bendersky#endif
74