LLVM 23.0.0git
EPCGenericJITLinkMemoryManager.h
Go to the documentation of this file.
1//===- EPCGenericJITLinkMemoryManager.h - EPC-based mem manager -*- 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-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Implements JITLinkMemoryManager by making remove calls via
10// ExecutorProcessControl::callWrapperAsync.
11//
12// This simplifies the implementaton of new ExecutorProcessControl instances,
13// as this implementation will always work (at the cost of some performance
14// overhead for the calls).
15//
16//===----------------------------------------------------------------------===//
17
18#ifndef LLVM_EXECUTIONENGINE_ORC_EPCGENERICJITLINKMEMORYMANAGER_H
19#define LLVM_EXECUTIONENGINE_ORC_EPCGENERICJITLINKMEMORYMANAGER_H
20
24
25namespace llvm {
26namespace orc {
27
30public:
31 /// Symbol addresses for memory management implementation.
39
40 /// Symbol names for memory management implementation.
48
49 /// Default symbol names for the ORC runtime's SimpleNativeMemoryMap SPS
50 /// interface.
52
53 /// Create an EPCGenericJITLinkMemoryManager instance from a given set of
54 /// function addrs.
57
58 /// Create an EPCGenericJITLinkMemoryManager using the given implementation
59 /// symbol names. These will be looked up in the given JITDylib.
61 Create(JITDylib &JD,
62 SymbolNames SNs = orc_rt_SimpleNativeMemoryMapSPSSymbols);
63
64 /// Create an EPCGenericJITLinkMemoryManager using the given implementation
65 /// symbol names. These will be looked up in the given ExecutionSession's
66 /// Bootstrap JITDylib.
68 Create(ExecutionSession &ES,
69 SymbolNames SNs = orc_rt_SimpleNativeMemoryMapSPSSymbols);
70
71 void allocate(const jitlink::JITLinkDylib *JD, jitlink::LinkGraph &G,
72 OnAllocatedFunction OnAllocated) override;
73
74 // Use overloads from base class.
75 using JITLinkMemoryManager::allocate;
76
77 void deallocate(std::vector<FinalizedAlloc> Allocs,
78 OnDeallocatedFunction OnDeallocated) override;
79
80 // Use overloads from base class.
81 using JITLinkMemoryManager::deallocate;
82
83private:
84 class InFlightAlloc;
85
86 void completeAllocation(ExecutorAddr AllocAddr, jitlink::BasicLayout BL,
87 OnAllocatedFunction OnAllocated);
88
90 SymbolAddrs SAs;
91};
92
93namespace shared {
94
95/// FIXME: This specialization should be moved into TargetProcessControlTypes.h
96/// (or wherever those types get merged to) once ORC depends on JITLink.
97template <>
99 jitlink::JITLinkMemoryManager::FinalizedAlloc> {
100public:
104
105 static bool
111
120};
121
122} // end namespace shared
123} // end namespace orc
124} // end namespace llvm
125
126#endif // LLVM_EXECUTIONENGINE_ORC_EPCGENERICJITLINKMEMORYMANAGER_H
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
#define LLVM_ABI
Definition Compiler.h:213
#define G(x, y, z)
Definition MD5.cpp:55
Tagged union holding either a T or a Error.
Definition Error.h:485
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
EPCGenericJITLinkMemoryManager(ExecutorProcessControl &EPC, SymbolAddrs SAs)
Create an EPCGenericJITLinkMemoryManager instance from a given set of function addrs.
static const SymbolNames orc_rt_SimpleNativeMemoryMapSPSSymbols
Default symbol names for the ORC runtime's SimpleNativeMemoryMap SPS interface.
An ExecutionSession represents a running JIT program.
Definition Core.h:1355
Represents an address in the executor process.
ExecutorProcessControl supports interaction with a JIT target process.
Represents a JIT'd dynamic library.
Definition Core.h:919
A utility class for serializing to a blob from a variadic list.
Input char buffer with underflow check.
Output char buffer with overflow check.
Specialize to describe how to serialize/deserialize to/from the given concrete type.
This is an optimization pass for GlobalISel generic memory operations.
Symbol addresses for memory management implementation.
Symbol names for memory management implementation.