16#define DEBUG_TYPE "orc"
22namespace rt_bootstrap {
24template <
typename WriteT,
typename SPSWriteT>
29 [](std::vector<WriteT> Ws) {
31 *W.Addr.template toPtr<
decltype(W.Value) *>() = W.Value;
40 [](std::vector<tpctypes::BufferWrite> Ws) {
42 memcpy(W.Addr.template toPtr<char *>(), W.Buffer.data(),
51 handle(ArgData, ArgSize,
52 [](std::vector<tpctypes::PointerWrite> Ws) {
54 *W.Addr.template toPtr<void **>() =
55 W.Value.template toPtr<void *>();
65 std::vector<std::string> Args) -> int64_t {
LLVM_ABI llvm::orc::shared::CWrapperFunctionResult llvm_orc_deregisterEHFrameSectionWrapper(const char *Data, uint64_t Size)
LLVM_ABI llvm::orc::shared::CWrapperFunctionResult llvm_orc_registerEHFrameSectionWrapper(const char *Data, uint64_t Size)
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Represents an address in the executor process.
static ExecutorAddr fromPtr(T *Ptr, UnwrapFn &&Unwrap=UnwrapFn())
Create an ExecutorAddr from the given pointer.
std::enable_if_t< std::is_pointer< T >::value, T > toPtr(WrapFn &&Wrap=WrapFn()) const
Cast this ExecutorAddr to a pointer of the given type.
SPS tag type for sequences.
static llvm::orc::shared::CWrapperFunctionResult writeUIntsWrapper(const char *ArgData, size_t ArgSize)
static llvm::orc::shared::CWrapperFunctionResult runAsVoidFunctionWrapper(const char *ArgData, size_t ArgSize)
void addTo(StringMap< ExecutorAddr > &M)
static llvm::orc::shared::CWrapperFunctionResult writePointersWrapper(const char *ArgData, size_t ArgSize)
static llvm::orc::shared::CWrapperFunctionResult runAsMainWrapper(const char *ArgData, size_t ArgSize)
static llvm::orc::shared::CWrapperFunctionResult writeBuffersWrapper(const char *ArgData, size_t ArgSize)
static llvm::orc::shared::CWrapperFunctionResult runAsIntFunctionWrapper(const char *ArgData, size_t ArgSize)
const char * MemoryWriteUInt16sWrapperName
const char * RunAsIntFunctionWrapperName
const char * DeregisterEHFrameSectionWrapperName
const char * RegisterEHFrameSectionWrapperName
const char * MemoryWriteUInt64sWrapperName
const char * MemoryWriteUInt8sWrapperName
const char * MemoryWritePointersWrapperName
const char * MemoryWriteUInt32sWrapperName
const char * RunAsVoidFunctionWrapperName
const char * MemoryWriteBuffersWrapperName
const char * RunAsMainWrapperName
int runAsVoidFunction(int(*Func)(void))
int runAsIntFunction(int(*Func)(int), int Arg)
int runAsMain(int(*Main)(int, char *[]), ArrayRef< std::string > Args, std::optional< StringRef > ProgramName=std::nullopt)
Run a main function, returning the result.
This is an optimization pass for GlobalISel generic memory operations.