xref: /llvm-project/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp (revision 160a408a870b6a7a46cebfd58f8e2a0893e21632)
1 //===------- ObjectLinkingLayer.cpp - JITLink backed ORC ObjectLayer ------===//
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 #include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h"
10 #include "llvm/ExecutionEngine/Orc/DebugUtils.h"
11 #include "llvm/Support/MemoryBuffer.h"
12 
13 #define DEBUG_TYPE "orc"
14 
15 namespace llvm::orc {
16 
17 char ObjectLinkingLayer::ID;
18 
19 void ObjectLinkingLayer::emit(std::unique_ptr<MaterializationResponsibility> R,
20                               std::unique_ptr<MemoryBuffer> O) {
21   assert(O && "Object must not be null");
22   MemoryBufferRef ObjBuffer = O->getMemBufferRef();
23 
24   if (auto G = jitlink::createLinkGraphFromObject(
25           ObjBuffer, getExecutionSession().getSymbolStringPool())) {
26     emit(std::move(R), std::move(*G), std::move(O));
27   } else {
28     R->getExecutionSession().reportError(G.takeError());
29     R->failMaterialization();
30     return;
31   }
32 }
33 
34 } // namespace llvm::orc
35