File indexing completed on 2026-05-10 08:43:52
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef LLVM_EXECUTIONENGINE_ORC_EPCDYNAMICLIBRARYSEARCHGENERATOR_H
0015 #define LLVM_EXECUTIONENGINE_ORC_EPCDYNAMICLIBRARYSEARCHGENERATOR_H
0016
0017 #include "llvm/ADT/FunctionExtras.h"
0018 #include "llvm/ExecutionEngine/Orc/Core.h"
0019
0020 namespace llvm {
0021 namespace orc {
0022
0023 class ExecutorProcessControl;
0024
0025 class EPCDynamicLibrarySearchGenerator : public DefinitionGenerator {
0026 public:
0027 using SymbolPredicate = unique_function<bool(const SymbolStringPtr &)>;
0028 using AddAbsoluteSymbolsFn = unique_function<Error(JITDylib &, SymbolMap)>;
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 EPCDynamicLibrarySearchGenerator(
0040 ExecutionSession &ES, tpctypes::DylibHandle H,
0041 SymbolPredicate Allow = SymbolPredicate(),
0042 AddAbsoluteSymbolsFn AddAbsoluteSymbols = nullptr)
0043 : EPC(ES.getExecutorProcessControl()), H(H), Allow(std::move(Allow)),
0044 AddAbsoluteSymbols(std::move(AddAbsoluteSymbols)) {}
0045
0046
0047
0048
0049 static Expected<std::unique_ptr<EPCDynamicLibrarySearchGenerator>>
0050 Load(ExecutionSession &ES, const char *LibraryPath,
0051 SymbolPredicate Allow = SymbolPredicate(),
0052 AddAbsoluteSymbolsFn AddAbsoluteSymbols = nullptr);
0053
0054
0055
0056 static Expected<std::unique_ptr<EPCDynamicLibrarySearchGenerator>>
0057 GetForTargetProcess(ExecutionSession &ES,
0058 SymbolPredicate Allow = SymbolPredicate(),
0059 AddAbsoluteSymbolsFn AddAbsoluteSymbols = nullptr) {
0060 return Load(ES, nullptr, std::move(Allow), std::move(AddAbsoluteSymbols));
0061 }
0062
0063 Error tryToGenerate(LookupState &LS, LookupKind K, JITDylib &JD,
0064 JITDylibLookupFlags JDLookupFlags,
0065 const SymbolLookupSet &Symbols) override;
0066
0067 private:
0068 ExecutorProcessControl &EPC;
0069 tpctypes::DylibHandle H;
0070 SymbolPredicate Allow;
0071 AddAbsoluteSymbolsFn AddAbsoluteSymbols;
0072 };
0073
0074 }
0075 }
0076
0077 #endif