blob: e4eba8bd7565b838c3052af5483d90c9354e85f4 [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
65 LookupFlagsResult Result;
66 for (auto &KV : R.lookupFlags(InternedSymbols).SymbolFlags) {
67 ResolvedStrings.insert(KV.first);
68 Result[*KV.first] = KV.second;
69 }
70
71 return Result;
72}
73
74} // End namespace orc.
75} // End namespace llvm.