Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
SimpleExecutorDylibManager.cpp
Go to the documentation of this file.
1//===--- SimpleExecutorDylibManager.cpp - Executor-side dylib management --===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "llvm/ExecutionEngine/Orc/TargetProcess/SimpleExecutorDylibManager.h"
10
11#include "llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h"
12
13#define DEBUG_TYPE "orc"
14
15namespacellvm {
16namespaceorc {
17namespacert_bootstrap {
18
19SimpleExecutorDylibManager::~SimpleExecutorDylibManager() {
20assert(Dylibs.empty() &&"shutdown not called?");
21}
22
23Expected<tpctypes::DylibHandle>
24SimpleExecutorDylibManager::open(const std::string &Path,uint64_tMode) {
25if (Mode != 0)
26return make_error<StringError>("open: non-zero mode bits not yet supported",
27inconvertibleErrorCode());
28
29constchar *PathCStr = Path.empty() ? nullptr : Path.c_str();
30 std::string ErrMsg;
31
32autoDL =sys::DynamicLibrary::getPermanentLibrary(PathCStr, &ErrMsg);
33if (!DL.isValid())
34return make_error<StringError>(std::move(ErrMsg),inconvertibleErrorCode());
35
36 std::lock_guard<std::mutex> Lock(M);
37autoH =ExecutorAddr::fromPtr(DL.getOSSpecificHandle());
38 Dylibs.insert(DL.getOSSpecificHandle());
39returnH;
40}
41
42Expected<std::vector<ExecutorSymbolDef>>
43SimpleExecutorDylibManager::lookup(tpctypes::DylibHandleH,
44constRemoteSymbolLookupSet &L) {
45 std::vector<ExecutorSymbolDef>Result;
46autoDL =sys::DynamicLibrary(H.toPtr<void *>());
47
48for (constauto &E : L) {
49if (E.Name.empty()) {
50if (E.Required)
51return make_error<StringError>("Required address for empty symbol \"\"",
52inconvertibleErrorCode());
53else
54Result.push_back(ExecutorSymbolDef());
55 }else {
56
57constchar *DemangledSymName =E.Name.c_str();
58#ifdef __APPLE__
59if (E.Name.front() !='_')
60return make_error<StringError>(Twine("MachO symbol \"") +E.Name +
61"\" missing leading '_'",
62inconvertibleErrorCode());
63 ++DemangledSymName;
64#endif
65
66void *Addr =DL.getAddressOfSymbol(DemangledSymName);
67if (!Addr &&E.Required)
68return make_error<StringError>(Twine("Missing definition for ") +
69 DemangledSymName,
70inconvertibleErrorCode());
71
72// FIXME: determine accurate JITSymbolFlags.
73Result.push_back({ExecutorAddr::fromPtr(Addr),JITSymbolFlags::Exported});
74 }
75 }
76
77returnResult;
78}
79
80ErrorSimpleExecutorDylibManager::shutdown() {
81
82DylibSet DS;
83 {
84 std::lock_guard<std::mutex> Lock(M);
85std::swap(DS, Dylibs);
86 }
87
88// There is no removal of dylibs at the moment, so nothing to do here.
89returnError::success();
90}
91
92voidSimpleExecutorDylibManager::addBootstrapSymbols(
93StringMap<ExecutorAddr> &M) {
94 M[rt::SimpleExecutorDylibManagerInstanceName] =ExecutorAddr::fromPtr(this);
95 M[rt::SimpleExecutorDylibManagerOpenWrapperName] =
96ExecutorAddr::fromPtr(&openWrapper);
97 M[rt::SimpleExecutorDylibManagerLookupWrapperName] =
98ExecutorAddr::fromPtr(&lookupWrapper);
99}
100
101llvm::orc::shared::CWrapperFunctionResult
102SimpleExecutorDylibManager::openWrapper(constchar *ArgData,size_t ArgSize) {
103return shared::
104 WrapperFunction<rt::SPSSimpleExecutorDylibManagerOpenSignature>::handle(
105 ArgData, ArgSize,
106shared::makeMethodWrapperHandler(
107 &SimpleExecutorDylibManager::open))
108 .release();
109}
110
111llvm::orc::shared::CWrapperFunctionResult
112SimpleExecutorDylibManager::lookupWrapper(constchar *ArgData,size_t ArgSize) {
113return shared::
114 WrapperFunction<rt::SPSSimpleExecutorDylibManagerLookupSignature>::handle(
115 ArgData, ArgSize,
116shared::makeMethodWrapperHandler(
117 &SimpleExecutorDylibManager::lookup))
118 .release();
119}
120
121}// namespace rt_bootstrap
122}// end namespace orc
123}// end namespace llvm
DL
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
Definition:ARMSLSHardening.cpp:73
E
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
Addr
uint64_t Addr
Definition:ELFObjHandler.cpp:79
H
#define H(x, y, z)
Definition:MD5.cpp:57
OrcRTBridge.h
Mode
static cl::opt< RegAllocEvictionAdvisorAnalysis::AdvisorMode > Mode("regalloc-enable-advisor", cl::Hidden, cl::init(RegAllocEvictionAdvisorAnalysis::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocEvictionAdvisorAnalysis::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocEvictionAdvisorAnalysis::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocEvictionAdvisorAnalysis::AdvisorMode::Development, "development", "for training")))
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
SimpleExecutorDylibManager.h
llvm::DenseSet< void * >
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition:Error.h:160
llvm::Error::success
static ErrorSuccess success()
Create a success value.
Definition:Error.h:337
llvm::Expected
Tagged union holding either a T or a Error.
Definition:Error.h:481
llvm::JITSymbolFlags::Exported
@ Exported
Definition:JITSymbol.h:85
llvm::StringMap
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition:StringMap.h:128
llvm::Twine
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition:Twine.h:81
llvm::detail::DenseSetImpl::insert
std::pair< iterator, bool > insert(const ValueT &V)
Definition:DenseSet.h:213
llvm::detail::DenseSetImpl::empty
bool empty() const
Definition:DenseSet.h:80
llvm::orc::ExecutorAddr
Represents an address in the executor process.
Definition:ExecutorAddress.h:34
llvm::orc::ExecutorAddr::fromPtr
static ExecutorAddr fromPtr(T *Ptr, UnwrapFn &&Unwrap=UnwrapFn())
Create an ExecutorAddr from the given pointer.
Definition:ExecutorAddress.h:111
llvm::orc::ExecutorSymbolDef
Represents a defining location for a JIT symbol.
Definition:ExecutorSymbolDef.h:24
llvm::orc::rt_bootstrap::SimpleExecutorDylibManager::lookup
Expected< std::vector< ExecutorSymbolDef > > lookup(tpctypes::DylibHandle H, const RemoteSymbolLookupSet &L)
Definition:SimpleExecutorDylibManager.cpp:43
llvm::orc::rt_bootstrap::SimpleExecutorDylibManager::~SimpleExecutorDylibManager
virtual ~SimpleExecutorDylibManager()
Definition:SimpleExecutorDylibManager.cpp:19
llvm::orc::rt_bootstrap::SimpleExecutorDylibManager::shutdown
Error shutdown() override
Definition:SimpleExecutorDylibManager.cpp:80
llvm::orc::rt_bootstrap::SimpleExecutorDylibManager::open
Expected< tpctypes::DylibHandle > open(const std::string &Path, uint64_t Mode)
Definition:SimpleExecutorDylibManager.cpp:24
llvm::orc::rt_bootstrap::SimpleExecutorDylibManager::addBootstrapSymbols
void addBootstrapSymbols(StringMap< ExecutorAddr > &M) override
Definition:SimpleExecutorDylibManager.cpp:92
llvm::sys::DynamicLibrary
This class provides a portable interface to dynamic libraries which also might be known as shared lib...
Definition:DynamicLibrary.h:33
llvm::sys::DynamicLibrary::getPermanentLibrary
static DynamicLibrary getPermanentLibrary(const char *filename, std::string *errMsg=nullptr)
This function permanently loads the dynamic library at the given path using the library load operatio...
Definition:DynamicLibrary.cpp:165
uint64_t
llvm::orc::rt::SimpleExecutorDylibManagerOpenWrapperName
const char * SimpleExecutorDylibManagerOpenWrapperName
Definition:OrcRTBridge.cpp:17
llvm::orc::rt::SimpleExecutorDylibManagerLookupWrapperName
const char * SimpleExecutorDylibManagerLookupWrapperName
Definition:OrcRTBridge.cpp:19
llvm::orc::rt::SimpleExecutorDylibManagerInstanceName
const char * SimpleExecutorDylibManagerInstanceName
Definition:OrcRTBridge.cpp:15
llvm::orc::shared::makeMethodWrapperHandler
MethodWrapperHandler< RetT, ClassT, ArgTs... > makeMethodWrapperHandler(RetT(ClassT::*Method)(ArgTs...))
Create a MethodWrapperHandler object from the given method pointer.
Definition:WrapperFunctionUtils.h:619
llvm::orc::SimpleRemoteEPCOpcode::Result
@ Result
llvm::orc::RemoteSymbolLookupSet
std::vector< RemoteSymbolLookupSetElement > RemoteSymbolLookupSet
Definition:SimpleRemoteEPCUtils.h:147
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::inconvertibleErrorCode
std::error_code inconvertibleErrorCode()
The value returned by this function can be returned from convertToErrorCode for Error values where no...
Definition:Error.cpp:98
std::swap
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition:BitVector.h:860
llvm::orc::shared::CWrapperFunctionResult
Definition:WrapperFunctionUtils.h:33

Generated on Fri Jul 18 2025 11:28:07 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp