brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 8ca1c2e Raw
63 lines · c
1//===-- RuntimeDyldCOFF.h - Run-time dynamic linker for MC-JIT ---*- C++ -*-==//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// COFF support for MC-JIT runtime dynamic linker.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_RUNTIME_DYLD_COFF_H14#define LLVM_RUNTIME_DYLD_COFF_H15 16#include "RuntimeDyldImpl.h"17#include "llvm/Support/MathExtras.h"18 19namespace llvm {20 21// Common base class for COFF dynamic linker support.22// Concrete subclasses for each target can be found in ./Targets.23class RuntimeDyldCOFF : public RuntimeDyldImpl {24 25public:26  std::unique_ptr<RuntimeDyld::LoadedObjectInfo>27  loadObject(const object::ObjectFile &Obj) override;28  bool isCompatibleFile(const object::ObjectFile &Obj) const override;29 30  static std::unique_ptr<RuntimeDyldCOFF>31  create(Triple::ArchType Arch, RuntimeDyld::MemoryManager &MemMgr,32         JITSymbolResolver &Resolver);33 34protected:35  RuntimeDyldCOFF(RuntimeDyld::MemoryManager &MemMgr,36                  JITSymbolResolver &Resolver, unsigned PointerSize,37                  uint32_t PointerReloc)38      : RuntimeDyldImpl(MemMgr, Resolver), PointerSize(PointerSize),39        PointerReloc(PointerReloc) {40    assert((PointerSize == 4 || PointerSize == 8) && "Unexpected pointer size");41  }42 43  uint64_t getSymbolOffset(const SymbolRef &Sym);44  uint64_t getDLLImportOffset(unsigned SectionID, StubMap &Stubs,45                              StringRef Name, bool SetSectionIDMinus1 = false);46 47  static constexpr StringRef getImportSymbolPrefix() { return "__imp_"; }48 49  bool relocationNeedsDLLImportStub(const RelocationRef &R) const override;50 51  unsigned sizeAfterAddingDLLImportStub(unsigned Size) const override {52    return alignTo(Size, PointerSize) + PointerSize;53  }54 55private:56  unsigned PointerSize;57  uint32_t PointerReloc;58};59 60} // end namespace llvm61 62#endif // LLVM_RUNTIME_DYLD_COFF_H63