summaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-jitlink/llvm-jitlink.cpp')
-rw-r--r--llvm/tools/llvm-jitlink/llvm-jitlink.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
index dec4b6301062..8d0fd0403d4d 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
@@ -397,6 +397,9 @@ static void dumpSectionContents(raw_ostream &OS, LinkGraph &G) {
class JITLinkSlabAllocator final : public JITLinkMemoryManager {
private:
struct FinalizedAllocInfo {
+ FinalizedAllocInfo(sys::MemoryBlock Mem,
+ std::vector<shared::WrapperFunctionCall> DeallocActions)
+ : Mem(Mem), DeallocActions(std::move(DeallocActions)) {}
sys::MemoryBlock Mem;
std::vector<shared::WrapperFunctionCall> DeallocActions;
};
@@ -430,12 +433,20 @@ public:
return;
}
- // FIXME: Run finalize actions.
- assert(BL.graphAllocActions().empty() &&
- "Support function calls not supported yet");
+ auto DeallocActions = runFinalizeActions(BL.graphAllocActions());
+ if (!DeallocActions) {
+ OnFinalized(DeallocActions.takeError());
+ return;
+ }
+
+ if (auto Err = Parent.freeBlock(FinalizeSegs)) {
+ OnFinalized(
+ joinErrors(std::move(Err), runDeallocActions(*DeallocActions)));
+ return;
+ }
- OnFinalized(
- FinalizedAlloc(ExecutorAddr::fromPtr(new FinalizedAllocInfo())));
+ OnFinalized(FinalizedAlloc(ExecutorAddr::fromPtr(
+ new FinalizedAllocInfo(StandardSegs, std::move(*DeallocActions)))));
}
void abandon(OnAbandonedFunction OnAbandoned) override {