LLVM 22.0.0git
SelfExecutorProcessControl.h
Go to the documentation of this file.
1//===-- SelfExecutorProcessControl.h - EPC for in-process JITs --*- C++ -*-===//
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// Executor process control implementation for JITs that run JIT'd code in the
10// same process.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_EXECUTIONENGINE_ORC_SELFEXECUTORPROCESSCONTROL_H
15#define LLVM_EXECUTIONENGINE_ORC_SELFEXECUTORPROCESSCONTROL_H
16
19
20#include <memory>
21
22namespace llvm::orc {
23
24/// A ExecutorProcessControl implementation targeting the current process.
26 private DylibManager {
27public:
29 std::shared_ptr<SymbolStringPool> SSP, std::unique_ptr<TaskDispatcher> D,
30 Triple TargetTriple, unsigned PageSize,
31 std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr);
32
33 /// Create a SelfExecutorProcessControl with the given symbol string pool and
34 /// memory manager.
35 /// If no symbol string pool is given then one will be created.
36 /// If no memory manager is given a jitlink::InProcessMemoryManager will
37 /// be created and used by default.
39 Create(std::shared_ptr<SymbolStringPool> SSP = nullptr,
40 std::unique_ptr<TaskDispatcher> D = nullptr,
41 std::unique_ptr<jitlink::JITLinkMemoryManager> MemMgr = nullptr);
42
44 ArrayRef<std::string> Args) override;
45
47
48 Expected<int32_t> runAsIntFunction(ExecutorAddr IntFnAddr, int Arg) override;
49
50 void callWrapperAsync(ExecutorAddr WrapperFnAddr,
51 IncomingWFRHandler OnComplete,
52 ArrayRef<char> ArgBuffer) override;
53
54 Error disconnect() override;
55
56private:
58 jitDispatchViaWrapperFunctionManager(void *Ctx, const void *FnTag,
59 const char *Data, size_t Size);
60
61 Expected<tpctypes::DylibHandle> loadDylib(const char *DylibPath) override;
62
63 void lookupSymbolsAsync(ArrayRef<LookupRequest> Request,
64 SymbolLookupCompleteFn F) override;
65
66 std::unique_ptr<jitlink::JITLinkMemoryManager> OwnedMemMgr;
67#ifdef __APPLE__
68 std::unique_ptr<UnwindInfoManager> UnwindInfoMgr;
69#endif // __APPLE__
70 char GlobalManglingPrefix = 0;
72};
73
74} // namespace llvm::orc
75
76#endif // LLVM_EXECUTIONENGINE_ORC_SELFEXECUTORPROCESSCONTROL_H
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
#define LLVM_ABI
Definition: Compiler.h:213
uint64_t Size
static cl::opt< int > PageSize("imp-null-check-page-size", cl::desc("The page size of the target in bytes"), cl::init(4096), cl::Hidden)
#define F(x, y, z)
Definition: MD5.cpp:55
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:41
Lightweight error class with error context and mandatory checking.
Definition: Error.h:159
Tagged union holding either a T or a Error.
Definition: Error.h:485
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:47
Represents an address in the executor process.
A handler or incoming WrapperFunctionResults – either return values from callWrapper* calls,...
ExecutorProcessControl supports interaction with a JIT target process.
A ExecutorProcessControl implementation targeting the current process.
unique_function is a type-erasing functor similar to std::function.
LLVM_ABI int runAsVoidFunction(int(*Func)(void))
LLVM_ABI int runAsIntFunction(int(*Func)(int), int Arg)
LLVM_ABI int runAsMain(int(*Main)(int, char *[]), ArrayRef< std::string > Args, std::optional< StringRef > ProgramName=std::nullopt)
Run a main function, returning the result.