blob: 7a11b94c7cf0960fa42c61d9928be31598ac70ad [file] [log] [blame]
Lang Hames635fd902018-01-22 03:00:31 +00001//===------- Legacy.cpp - Adapters for ExecutionEngine API interop --------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "llvm/ExecutionEngine/Orc/Legacy.h"
11
12namespace llvm {
13namespace orc {
14
15JITSymbolResolverAdapter::JITSymbolResolverAdapter(ExecutionSession &ES,
16 SymbolResolver &R)
17 : ES(ES), R(R) {}
18
19Expected<JITSymbolResolverAdapter::LookupResult>
20JITSymbolResolverAdapter::lookup(const LookupSet &Symbols) {
21 Error Err = Error::success();
22 JITSymbolResolver::LookupResult Result;
23
24 SymbolNameSet InternedSymbols;
25 for (auto &S : Symbols)
26 InternedSymbols.insert(ES.getSymbolStringPool().intern(S));
27
28 auto OnResolve = [&](Expected<SymbolMap> R) {
29 if (R) {
30 for (auto &KV : *R) {
31 ResolvedStrings.insert(KV.first);
32 Result[*KV.first] = KV.second;
33 }
34 } else
35 Err = joinErrors(std::move(Err), R.takeError());
36 };
37
38 auto OnReady = [](Error Err) {
39 // FIXME: Report error to ExecutionSession.
40 logAllUnhandledErrors(std::move(Err), errs(),
41 "legacy resolver received on-ready error:\n");
42 };
43
44 AsynchronousSymbolQuery Query(InternedSymbols, OnResolve, OnReady);
45
46 auto UnresolvedSymbols = R.lookup(Query, InternedSymbols);
47
48 if (!UnresolvedSymbols.empty())
49 Err = joinErrors(std::move(Err),
50 make_error<StringError>("Unresolved symbols",
51 inconvertibleErrorCode()));
52
53 if (Err)
54 return std::move(Err);
55
56 return Result;
57}
58
59Expected<JITSymbolResolverAdapter::LookupFlagsResult>
60JITSymbolResolverAdapter::lookupFlags(const LookupSet &Symbols) {
61 SymbolNameSet InternedSymbols;
62 for (auto &S : Symbols)
63 InternedSymbols.insert(ES.getSymbolStringPool().intern(S));
64
Lang Hamesc8a74a02018-01-25 01:43:00 +000065 SymbolFlagsMap SymbolFlags;
66 R.lookupFlags(SymbolFlags, InternedSymbols);
Lang Hames635fd902018-01-22 03:00:31 +000067 LookupFlagsResult Result;
Lang Hamesc8a74a02018-01-25 01:43:00 +000068 for (auto &KV : SymbolFlags) {
Lang Hames635fd902018-01-22 03:00:31 +000069 ResolvedStrings.insert(KV.first);
70 Result[*KV.first] = KV.second;
71 }
72
73 return Result;
74}
75
76} // End namespace orc.
77} // End namespace llvm.