1 //===-- RuntimeDyldCOFF.h - Run-time dynamic linker for MC-JIT ---*- C++ -*-==//
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-exception
7 //===----------------------------------------------------------------------===//
9 // COFF support for MC-JIT runtime dynamic linker.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_RUNTIME_DYLD_COFF_H
14 #define LLVM_RUNTIME_DYLD_COFF_H
16 #include "RuntimeDyldImpl.h"
18 #define DEBUG_TYPE "dyld"
24 // Common base class for COFF dynamic linker support.
25 // Concrete subclasses for each target can be found in ./Targets.
26 class RuntimeDyldCOFF
: public RuntimeDyldImpl
{
29 std::unique_ptr
<RuntimeDyld::LoadedObjectInfo
>
30 loadObject(const object::ObjectFile
&Obj
) override
;
31 bool isCompatibleFile(const object::ObjectFile
&Obj
) const override
;
33 static std::unique_ptr
<RuntimeDyldCOFF
>
34 create(Triple::ArchType Arch
, RuntimeDyld::MemoryManager
&MemMgr
,
35 JITSymbolResolver
&Resolver
);
38 RuntimeDyldCOFF(RuntimeDyld::MemoryManager
&MemMgr
,
39 JITSymbolResolver
&Resolver
, unsigned PointerSize
,
40 uint32_t PointerReloc
)
41 : RuntimeDyldImpl(MemMgr
, Resolver
), PointerSize(PointerSize
),
42 PointerReloc(PointerReloc
) {
43 assert((PointerSize
== 4 || PointerSize
== 8) && "Unexpected pointer size");
46 uint64_t getSymbolOffset(const SymbolRef
&Sym
);
47 uint64_t getDLLImportOffset(unsigned SectionID
, StubMap
&Stubs
,
48 StringRef Name
, bool SetSectionIDMinus1
= false);
50 static constexpr StringRef
getImportSymbolPrefix() { return "__imp_"; }
54 uint32_t PointerReloc
;
57 } // end namespace llvm