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_dlclose(void *dso_handle
);
25 ORC_RT_INTERFACE orc_rt_CWrapperFunctionResult
26 __orc_rt_jit_dlerror_wrapper(const char *ArgData
, size_t ArgSize
) {
27 return WrapperFunction
<SPSString()>::handle(
29 []() { return std::string(__orc_rt_jit_dlerror()); })
33 ORC_RT_INTERFACE orc_rt_CWrapperFunctionResult
34 __orc_rt_jit_dlopen_wrapper(const char *ArgData
, size_t ArgSize
) {
35 return WrapperFunction
<SPSExecutorAddr(SPSString
, int32_t)>::handle(
37 [](const std::string
&Path
, int32_t mode
) {
38 return ExecutorAddr::fromPtr(
39 __orc_rt_jit_dlopen(Path
.c_str(), mode
));
44 ORC_RT_INTERFACE orc_rt_CWrapperFunctionResult
45 __orc_rt_jit_dlclose_wrapper(const char *ArgData
, size_t ArgSize
) {
46 return WrapperFunction
<int32_t(SPSExecutorAddr
)>::handle(
48 [](ExecutorAddr
&DSOHandle
) {
49 return __orc_rt_jit_dlclose(DSOHandle
.toPtr
<void *>());