mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
symbol resolver argument. De-templatizing the symbol resolver is part of the ongoing simplification of ORC layer API. Removing the memory management argument (and delegating construction of memory managers for RTDyldObjectLinkingLayer to a functor passed in to the constructor) allows us to build JITs whose base object layers need not be compatible with RTDyldObjectLinkingLayer's memory mangement scheme. For example, a 'remote object layer' that sends fully relocatable objects directly to the remote does not need a memory management scheme at all (that will be handled by the remote). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307058 91177308-0d34-0410-b5e6-96231b3b80d8
60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
//===- LambdaResolverMM - Redirect symbol lookup via a functor --*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Defines a RuntimeDyld::SymbolResolver subclass that uses a user-supplied
|
|
// functor for symbol resolution.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H
|
|
#define LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H
|
|
|
|
#include "llvm/ADT/STLExtras.h"
|
|
#include "llvm/ExecutionEngine/JITSymbol.h"
|
|
#include <memory>
|
|
|
|
namespace llvm {
|
|
namespace orc {
|
|
|
|
template <typename DylibLookupFtorT, typename ExternalLookupFtorT>
|
|
class LambdaResolver : public JITSymbolResolver {
|
|
public:
|
|
LambdaResolver(DylibLookupFtorT DylibLookupFtor,
|
|
ExternalLookupFtorT ExternalLookupFtor)
|
|
: DylibLookupFtor(DylibLookupFtor),
|
|
ExternalLookupFtor(ExternalLookupFtor) {}
|
|
|
|
JITSymbol findSymbolInLogicalDylib(const std::string &Name) final {
|
|
return DylibLookupFtor(Name);
|
|
}
|
|
|
|
JITSymbol findSymbol(const std::string &Name) final {
|
|
return ExternalLookupFtor(Name);
|
|
}
|
|
|
|
private:
|
|
DylibLookupFtorT DylibLookupFtor;
|
|
ExternalLookupFtorT ExternalLookupFtor;
|
|
};
|
|
|
|
template <typename DylibLookupFtorT,
|
|
typename ExternalLookupFtorT>
|
|
std::shared_ptr<LambdaResolver<DylibLookupFtorT, ExternalLookupFtorT>>
|
|
createLambdaResolver(DylibLookupFtorT DylibLookupFtor,
|
|
ExternalLookupFtorT ExternalLookupFtor) {
|
|
using LR = LambdaResolver<DylibLookupFtorT, ExternalLookupFtorT>;
|
|
return make_unique<LR>(std::move(DylibLookupFtor),
|
|
std::move(ExternalLookupFtor));
|
|
}
|
|
|
|
} // end namespace orc
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_EXECUTIONENGINE_ORC_LAMBDARESOLVER_H
|