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