Skip to content

Commit c0143f3

Browse files
committed
[ORC] Make ObjectLinkingLayer own its jitlink::MemoryManager.
This relieves ObjectLinkingLayer clients of the responsibility of holding the memory manager. This makes it easier to select between RTDyldObjectLinkingLayer (which already owned its memory manager factory) and ObjectLinkingLayer at runtime as clients aren't required to hold a jitlink::MemoryManager field just in case ObjectLinkingLayer is selected.
1 parent 1ea5ce6 commit c0143f3

File tree

4 files changed

+8
-9
lines changed

4 files changed

+8
-9
lines changed

llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class ObjectLinkingLayer : public ObjectLayer {
7979
/// Construct an ObjectLinkingLayer with the given NotifyLoaded,
8080
/// and NotifyEmitted functors.
8181
ObjectLinkingLayer(ExecutionSession &ES,
82-
jitlink::JITLinkMemoryManager &MemMgr);
82+
std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr);
8383

8484
/// Destruct an ObjectLinkingLayer.
8585
~ObjectLinkingLayer();
@@ -145,7 +145,7 @@ class ObjectLinkingLayer : public ObjectLayer {
145145
Error removeAllModules();
146146

147147
mutable std::mutex LayerMutex;
148-
jitlink::JITLinkMemoryManager &MemMgr;
148+
std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr;
149149
bool OverrideObjectFlags = false;
150150
bool AutoClaimObjectSymbols = false;
151151
ReturnObjectBufferFunction ReturnObjectBuffer;

llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class ObjectLinkingLayerJITLinkContext final : public JITLinkContext {
3636
Layer.ReturnObjectBuffer(std::move(ObjBuffer));
3737
}
3838

39-
JITLinkMemoryManager &getMemoryManager() override { return Layer.MemMgr; }
39+
JITLinkMemoryManager &getMemoryManager() override { return *Layer.MemMgr; }
4040

4141
MemoryBufferRef getObjectBuffer() const override {
4242
return ObjBuffer->getMemBufferRef();
@@ -328,9 +328,9 @@ class ObjectLinkingLayerJITLinkContext final : public JITLinkContext {
328328

329329
ObjectLinkingLayer::Plugin::~Plugin() {}
330330

331-
ObjectLinkingLayer::ObjectLinkingLayer(ExecutionSession &ES,
332-
JITLinkMemoryManager &MemMgr)
333-
: ObjectLayer(ES), MemMgr(MemMgr) {}
331+
ObjectLinkingLayer::ObjectLinkingLayer(
332+
ExecutionSession &ES, std::unique_ptr<JITLinkMemoryManager> MemMgr)
333+
: ObjectLayer(ES), MemMgr(std::move(MemMgr)) {}
334334

335335
ObjectLinkingLayer::~ObjectLinkingLayer() {
336336
if (auto Err = removeAllModules())

llvm/tools/llvm-jitlink/llvm-jitlink.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,8 +397,8 @@ static std::unique_ptr<jitlink::JITLinkMemoryManager> createMemoryManager() {
397397
}
398398

399399
Session::Session(Triple TT)
400-
: MainJD(ES.createJITDylib("<main>")), MemMgr(createMemoryManager()),
401-
ObjLayer(ES, *MemMgr), TT(std::move(TT)) {
400+
: MainJD(ES.createJITDylib("<main>")), ObjLayer(ES, createMemoryManager()),
401+
TT(std::move(TT)) {
402402

403403
/// Local ObjectLinkingLayer::Plugin class to forward modifyPassConfig to the
404404
/// Session.

llvm/tools/llvm-jitlink/llvm-jitlink.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ namespace llvm {
2727
struct Session {
2828
orc::ExecutionSession ES;
2929
orc::JITDylib &MainJD;
30-
std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr;
3130
orc::ObjectLinkingLayer ObjLayer;
3231
std::vector<orc::JITDylib *> JDSearchOrder;
3332
Triple TT;

0 commit comments

Comments
 (0)