1 //===- dlfcn_wrapper.cpp --------------------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // This file is a part of the ORC runtime support library.
11 //===----------------------------------------------------------------------===//
15 #include "wrapper_function_utils.h"
19 using namespace orc_rt
;
21 extern "C" const char *__orc_rt_jit_dlerror();
22 extern "C" void *__orc_rt_jit_dlopen(const char *path
, int mode
);
23 extern "C" int __orc_rt_jit_dlupdate(void *dso_handle
);
24 extern "C" int __orc_rt_jit_dlclose(void *dso_handle
);
26 ORC_RT_INTERFACE orc_rt_CWrapperFunctionResult
27 __orc_rt_jit_dlerror_wrapper(const char *ArgData
, size_t ArgSize
) {
28 return WrapperFunction
<SPSString()>::handle(
30 []() { return std::string(__orc_rt_jit_dlerror()); })
34 ORC_RT_INTERFACE orc_rt_CWrapperFunctionResult
35 __orc_rt_jit_dlopen_wrapper(const char *ArgData
, size_t ArgSize
) {
36 return WrapperFunction
<SPSExecutorAddr(SPSString
, int32_t)>::handle(
38 [](const std::string
&Path
, int32_t mode
) {
39 return ExecutorAddr::fromPtr(
40 __orc_rt_jit_dlopen(Path
.c_str(), mode
));
46 ORC_RT_INTERFACE orc_rt_CWrapperFunctionResult
47 __orc_rt_jit_dlupdate_wrapper(const char *ArgData
, size_t ArgSize
) {
48 return WrapperFunction
<int32_t(SPSExecutorAddr
)>::handle(
50 [](ExecutorAddr
&DSOHandle
) {
51 return __orc_rt_jit_dlupdate(DSOHandle
.toPtr
<void *>());
57 ORC_RT_INTERFACE orc_rt_CWrapperFunctionResult
58 __orc_rt_jit_dlclose_wrapper(const char *ArgData
, size_t ArgSize
) {
59 return WrapperFunction
<int32_t(SPSExecutorAddr
)>::handle(
61 [](ExecutorAddr
&DSOHandle
) {
62 return __orc_rt_jit_dlclose(DSOHandle
.toPtr
<void *>());