Skip to content

Commit bf6d7ca

Browse files
committed
[ORC] Add JITDylib argument to ResourceManager notify-removing/transferring ops.
In some cases it's helpful to group trackers by JITDylib. E.g. Platform classes may want to track initializer symbols with a `JITDylib -> Tracker -> [ Symbol ]` map. This makes it easy to collect all symbols for the JITDylib, while still allowing efficient removal of a single tracker. Passing the JITDylib as an argument to ResourceManager::notifyRemovingResources and ResourceManager::notifyTransferringResources supports such use-cases.
1 parent 1a22f1b commit bf6d7ca

File tree

16 files changed

+86
-70
lines changed

16 files changed

+86
-70
lines changed

llvm/examples/OrcV2Examples/LLJITWithObjectLinkingLayerPlugin/LLJITWithObjectLinkingLayerPlugin.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ class MyPlugin : public ObjectLinkingLayer::Plugin {
8383
return Error::success();
8484
}
8585

86-
Error notifyRemovingResources(ResourceKey K) override {
86+
Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override {
8787
return Error::success();
8888
}
8989

90-
void notifyTransferringResources(ResourceKey DstKey,
90+
void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
9191
ResourceKey SrcKey) override {}
9292

9393
private:

llvm/include/llvm/ExecutionEngine/Orc/COFFPlatform.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,11 @@ class COFFPlatform : public Platform {
104104
return Error::success();
105105
}
106106

107-
Error notifyRemovingResources(ResourceKey K) override {
107+
Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override {
108108
return Error::success();
109109
}
110110

111-
void notifyTransferringResources(ResourceKey DstKey,
111+
void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
112112
ResourceKey SrcKey) override {}
113113

114114
private:

llvm/include/llvm/ExecutionEngine/Orc/Core.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,9 @@ class ResourceTracker : public ThreadSafeRefCountedBase<ResourceTracker> {
101101
class ResourceManager {
102102
public:
103103
virtual ~ResourceManager();
104-
virtual Error handleRemoveResources(ResourceKey K) = 0;
105-
virtual void handleTransferResources(ResourceKey DstK, ResourceKey SrcK) = 0;
104+
virtual Error handleRemoveResources(JITDylib &JD, ResourceKey K) = 0;
105+
virtual void handleTransferResources(JITDylib &JD, ResourceKey DstK,
106+
ResourceKey SrcK) = 0;
106107
};
107108

108109
/// A set of symbol names (represented by SymbolStringPtrs for

llvm/include/llvm/ExecutionEngine/Orc/DebugObjectManagerPlugin.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ class DebugObjectManagerPlugin : public ObjectLinkingLayer::Plugin {
5757

5858
Error notifyEmitted(MaterializationResponsibility &MR) override;
5959
Error notifyFailed(MaterializationResponsibility &MR) override;
60-
Error notifyRemovingResources(ResourceKey K) override;
60+
Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override;
6161

62-
void notifyTransferringResources(ResourceKey DstKey,
62+
void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
6363
ResourceKey SrcKey) override;
6464

6565
void modifyPassConfig(MaterializationResponsibility &MR,

llvm/include/llvm/ExecutionEngine/Orc/DebuggerSupportPlugin.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ class GDBJITDebugInfoRegistrationPlugin : public ObjectLinkingLayer::Plugin {
4141
: RegisterActionAddr(RegisterActionAddr) {}
4242

4343
Error notifyFailed(MaterializationResponsibility &MR) override;
44-
Error notifyRemovingResources(ResourceKey K) override;
44+
Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override;
4545

46-
void notifyTransferringResources(ResourceKey DstKey,
46+
void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
4747
ResourceKey SrcKey) override;
4848

4949
void modifyPassConfig(MaterializationResponsibility &MR,

llvm/include/llvm/ExecutionEngine/Orc/ELFNixPlatform.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,11 @@ class ELFNixPlatform : public Platform {
143143
return Error::success();
144144
}
145145

146-
Error notifyRemovingResources(ResourceKey K) override {
146+
Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override {
147147
return Error::success();
148148
}
149149

150-
void notifyTransferringResources(ResourceKey DstKey,
150+
void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
151151
ResourceKey SrcKey) override {}
152152

153153
private:

llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,11 @@ class MachOPlatform : public Platform {
127127
return Error::success();
128128
}
129129

130-
Error notifyRemovingResources(ResourceKey K) override {
130+
Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override {
131131
return Error::success();
132132
}
133133

134-
void notifyTransferringResources(ResourceKey DstKey,
134+
void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
135135
ResourceKey SrcKey) override {}
136136

137137
private:

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ class ObjectLinkingLayer : public RTTIExtends<ObjectLinkingLayer, ObjectLayer>,
8080
return Error::success();
8181
}
8282
virtual Error notifyFailed(MaterializationResponsibility &MR) = 0;
83-
virtual Error notifyRemovingResources(ResourceKey K) = 0;
84-
virtual void notifyTransferringResources(ResourceKey DstKey,
83+
virtual Error notifyRemovingResources(JITDylib &JD, ResourceKey K) = 0;
84+
virtual void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
8585
ResourceKey SrcKey) = 0;
8686

8787
/// Return any dependencies that synthetic symbols (e.g. init symbols)
@@ -188,8 +188,9 @@ class ObjectLinkingLayer : public RTTIExtends<ObjectLinkingLayer, ObjectLayer>,
188188
void notifyLoaded(MaterializationResponsibility &MR);
189189
Error notifyEmitted(MaterializationResponsibility &MR, FinalizedAlloc FA);
190190

191-
Error handleRemoveResources(ResourceKey K) override;
192-
void handleTransferResources(ResourceKey DstKey, ResourceKey SrcKey) override;
191+
Error handleRemoveResources(JITDylib &JD, ResourceKey K) override;
192+
void handleTransferResources(JITDylib &JD, ResourceKey DstKey,
193+
ResourceKey SrcKey) override;
193194

194195
mutable std::mutex LayerMutex;
195196
jitlink::JITLinkMemoryManager &MemMgr;
@@ -211,8 +212,8 @@ class EHFrameRegistrationPlugin : public ObjectLinkingLayer::Plugin {
211212
jitlink::PassConfiguration &PassConfig) override;
212213
Error notifyEmitted(MaterializationResponsibility &MR) override;
213214
Error notifyFailed(MaterializationResponsibility &MR) override;
214-
Error notifyRemovingResources(ResourceKey K) override;
215-
void notifyTransferringResources(ResourceKey DstKey,
215+
Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override;
216+
void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
216217
ResourceKey SrcKey) override;
217218

218219
private:

llvm/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,9 @@ class RTDyldObjectLinkingLayer
140140
std::unique_ptr<RuntimeDyld::LoadedObjectInfo> LoadedObjInfo,
141141
Error Err);
142142

143-
Error handleRemoveResources(ResourceKey K) override;
144-
void handleTransferResources(ResourceKey DstKey, ResourceKey SrcKey) override;
143+
Error handleRemoveResources(JITDylib &JD, ResourceKey K) override;
144+
void handleTransferResources(JITDylib &JD, ResourceKey DstKey,
145+
ResourceKey SrcKey) override;
145146

146147
mutable std::mutex RTDyldLayerMutex;
147148
GetMemoryManagerFunction GetMemoryManager;

llvm/lib/ExecutionEngine/Orc/Core.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2285,9 +2285,10 @@ Error ExecutionSession::removeResourceTracker(ResourceTracker &RT) {
22852285

22862286
Error Err = Error::success();
22872287

2288+
auto &JD = RT.getJITDylib();
22882289
for (auto *L : reverse(CurrentResourceManagers))
2289-
Err =
2290-
joinErrors(std::move(Err), L->handleRemoveResources(RT.getKeyUnsafe()));
2290+
Err = joinErrors(std::move(Err),
2291+
L->handleRemoveResources(JD, RT.getKeyUnsafe()));
22912292

22922293
for (auto &Q : QueriesToFail)
22932294
Q->handleFailed(
@@ -2316,7 +2317,8 @@ void ExecutionSession::transferResourceTracker(ResourceTracker &DstRT,
23162317
auto &JD = DstRT.getJITDylib();
23172318
JD.transferTracker(DstRT, SrcRT);
23182319
for (auto *L : reverse(ResourceManagers))
2319-
L->handleTransferResources(DstRT.getKeyUnsafe(), SrcRT.getKeyUnsafe());
2320+
L->handleTransferResources(JD, DstRT.getKeyUnsafe(),
2321+
SrcRT.getKeyUnsafe());
23202322
});
23212323
}
23222324

llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,8 @@ Error DebugObjectManagerPlugin::notifyFailed(
492492
return Error::success();
493493
}
494494

495-
void DebugObjectManagerPlugin::notifyTransferringResources(ResourceKey DstKey,
495+
void DebugObjectManagerPlugin::notifyTransferringResources(JITDylib &JD,
496+
ResourceKey DstKey,
496497
ResourceKey SrcKey) {
497498
// Debug objects are stored by ResourceKey only after registration.
498499
// Thus, pending objects don't need to be updated here.
@@ -507,7 +508,8 @@ void DebugObjectManagerPlugin::notifyTransferringResources(ResourceKey DstKey,
507508
}
508509
}
509510

510-
Error DebugObjectManagerPlugin::notifyRemovingResources(ResourceKey Key) {
511+
Error DebugObjectManagerPlugin::notifyRemovingResources(JITDylib &JD,
512+
ResourceKey Key) {
511513
// Removing the resource for a pending object fails materialization, so they
512514
// get cleaned up in the notifyFailed() handler.
513515
std::lock_guard<std::mutex> Lock(RegisteredObjsLock);

llvm/lib/ExecutionEngine/Orc/DebuggerSupportPlugin.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,12 +390,12 @@ Error GDBJITDebugInfoRegistrationPlugin::notifyFailed(
390390
}
391391

392392
Error GDBJITDebugInfoRegistrationPlugin::notifyRemovingResources(
393-
ResourceKey K) {
393+
JITDylib &JD, ResourceKey K) {
394394
return Error::success();
395395
}
396396

397397
void GDBJITDebugInfoRegistrationPlugin::notifyTransferringResources(
398-
ResourceKey DstKey, ResourceKey SrcKey) {}
398+
JITDylib &JD, ResourceKey DstKey, ResourceKey SrcKey) {}
399399

400400
void GDBJITDebugInfoRegistrationPlugin::modifyPassConfig(
401401
MaterializationResponsibility &MR, LinkGraph &LG,

llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -680,12 +680,12 @@ Error ObjectLinkingLayer::notifyEmitted(MaterializationResponsibility &MR,
680680
[&](ResourceKey K) { Allocs[K].push_back(std::move(FA)); });
681681
}
682682

683-
Error ObjectLinkingLayer::handleRemoveResources(ResourceKey K) {
683+
Error ObjectLinkingLayer::handleRemoveResources(JITDylib &JD, ResourceKey K) {
684684

685685
{
686686
Error Err = Error::success();
687687
for (auto &P : Plugins)
688-
Err = joinErrors(std::move(Err), P->notifyRemovingResources(K));
688+
Err = joinErrors(std::move(Err), P->notifyRemovingResources(JD, K));
689689
if (Err)
690690
return Err;
691691
}
@@ -705,7 +705,8 @@ Error ObjectLinkingLayer::handleRemoveResources(ResourceKey K) {
705705
return MemMgr.deallocate(std::move(AllocsToRemove));
706706
}
707707

708-
void ObjectLinkingLayer::handleTransferResources(ResourceKey DstKey,
708+
void ObjectLinkingLayer::handleTransferResources(JITDylib &JD,
709+
ResourceKey DstKey,
709710
ResourceKey SrcKey) {
710711
auto I = Allocs.find(SrcKey);
711712
if (I != Allocs.end()) {
@@ -721,7 +722,7 @@ void ObjectLinkingLayer::handleTransferResources(ResourceKey DstKey,
721722
}
722723

723724
for (auto &P : Plugins)
724-
P->notifyTransferringResources(DstKey, SrcKey);
725+
P->notifyTransferringResources(JD, DstKey, SrcKey);
725726
}
726727

727728
EHFrameRegistrationPlugin::EHFrameRegistrationPlugin(
@@ -773,7 +774,8 @@ Error EHFrameRegistrationPlugin::notifyFailed(
773774
return Error::success();
774775
}
775776

776-
Error EHFrameRegistrationPlugin::notifyRemovingResources(ResourceKey K) {
777+
Error EHFrameRegistrationPlugin::notifyRemovingResources(JITDylib &JD,
778+
ResourceKey K) {
777779
std::vector<ExecutorAddrRange> RangesToRemove;
778780

779781
ES.runSessionLocked([&] {
@@ -797,7 +799,7 @@ Error EHFrameRegistrationPlugin::notifyRemovingResources(ResourceKey K) {
797799
}
798800

799801
void EHFrameRegistrationPlugin::notifyTransferringResources(
800-
ResourceKey DstKey, ResourceKey SrcKey) {
802+
JITDylib &JD, ResourceKey DstKey, ResourceKey SrcKey) {
801803
auto SI = EHFrameRanges.find(SrcKey);
802804
if (SI == EHFrameRanges.end())
803805
return;

llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,8 @@ void RTDyldObjectLinkingLayer::onObjEmit(
350350
}
351351
}
352352

353-
Error RTDyldObjectLinkingLayer::handleRemoveResources(ResourceKey K) {
353+
Error RTDyldObjectLinkingLayer::handleRemoveResources(JITDylib &JD,
354+
ResourceKey K) {
354355

355356
std::vector<MemoryManagerUP> MemMgrsToRemove;
356357

@@ -374,7 +375,8 @@ Error RTDyldObjectLinkingLayer::handleRemoveResources(ResourceKey K) {
374375
return Error::success();
375376
}
376377

377-
void RTDyldObjectLinkingLayer::handleTransferResources(ResourceKey DstKey,
378+
void RTDyldObjectLinkingLayer::handleTransferResources(JITDylib &JD,
379+
ResourceKey DstKey,
378380
ResourceKey SrcKey) {
379381
auto I = MemMgrs.find(SrcKey);
380382
if (I != MemMgrs.end()) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -945,10 +945,10 @@ Session::Session(std::unique_ptr<ExecutorProcessControl> EPC, Error &Err)
945945
Error notifyFailed(MaterializationResponsibility &MR) override {
946946
return Error::success();
947947
}
948-
Error notifyRemovingResources(ResourceKey K) override {
948+
Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override {
949949
return Error::success();
950950
}
951-
void notifyTransferringResources(ResourceKey DstKey,
951+
void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
952952
ResourceKey SrcKey) override {}
953953

954954
private:

0 commit comments

Comments
 (0)