12c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar//===-- LambdaResolverMM - Redirect symbol lookup via a functor -*- C++ -*-===// 22c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// 32c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// The LLVM Compiler Infrastructure 42c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// 52c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 62c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// License. See LICENSE.TXT for details. 72c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// 82c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 92c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// 102c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// Defines a RuntimeDyld::SymbolResolver subclass that uses a user-supplied 112c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// functor for symbol resolution. 122c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar// 132c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 142c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 152c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar#ifndef LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H 162c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar#define LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H 172c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 182c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar#include "llvm/ADT/STLExtras.h" 192c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar#include "llvm/ExecutionEngine/RuntimeDyld.h" 202c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar#include <memory> 212c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar#include <vector> 222c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 232c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarnamespace llvm { 242c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarnamespace orc { 252c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 262c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainartemplate <typename ExternalLookupFtorT, typename DylibLookupFtorT> 272c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarclass LambdaResolver : public RuntimeDyld::SymbolResolver { 282c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarpublic: 292c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 302c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar LambdaResolver(ExternalLookupFtorT ExternalLookupFtor, 312c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar DylibLookupFtorT DylibLookupFtor) 322c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar : ExternalLookupFtor(ExternalLookupFtor), 332c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar DylibLookupFtor(DylibLookupFtor) {} 342c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 352c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar RuntimeDyld::SymbolInfo findSymbol(const std::string &Name) final { 362c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar return ExternalLookupFtor(Name); 372c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar } 382c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 392c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar RuntimeDyld::SymbolInfo 402c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar findSymbolInLogicalDylib(const std::string &Name) final { 412c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar return DylibLookupFtor(Name); 422c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar } 432c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 442c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarprivate: 452c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar ExternalLookupFtorT ExternalLookupFtor; 462c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar DylibLookupFtorT DylibLookupFtor; 472c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar}; 482c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 492c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainartemplate <typename ExternalLookupFtorT, 502c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar typename DylibLookupFtorT> 512c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarstd::unique_ptr<LambdaResolver<ExternalLookupFtorT, DylibLookupFtorT>> 522c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga NainarcreateLambdaResolver(ExternalLookupFtorT ExternalLookupFtor, 532c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar DylibLookupFtorT DylibLookupFtor) { 542c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar typedef LambdaResolver<ExternalLookupFtorT, DylibLookupFtorT> LR; 552c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar return make_unique<LR>(std::move(ExternalLookupFtor), 562c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar std::move(DylibLookupFtor)); 572c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar} 582c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 592c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar} // End namespace orc. 602c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar} // End namespace llvm. 612c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar 622c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar#endif // LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H 63