1*81ad6265SDimitry Andric //===- dlfcn_wrapper.cpp --------------------------------------------------===// 2*81ad6265SDimitry Andric // 3*81ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*81ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*81ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*81ad6265SDimitry Andric // 7*81ad6265SDimitry Andric //===----------------------------------------------------------------------===// 8*81ad6265SDimitry Andric // 9*81ad6265SDimitry Andric // This file is a part of the ORC runtime support library. 10*81ad6265SDimitry Andric // 11*81ad6265SDimitry Andric //===----------------------------------------------------------------------===// 12*81ad6265SDimitry Andric 13*81ad6265SDimitry Andric #include "adt.h" 14*81ad6265SDimitry Andric #include "common.h" 15*81ad6265SDimitry Andric #include "wrapper_function_utils.h" 16*81ad6265SDimitry Andric 17*81ad6265SDimitry Andric #include <vector> 18*81ad6265SDimitry Andric 19*81ad6265SDimitry Andric using namespace __orc_rt; 20*81ad6265SDimitry Andric 21*81ad6265SDimitry Andric extern "C" const char *__orc_rt_jit_dlerror(); 22*81ad6265SDimitry Andric extern "C" void *__orc_rt_jit_dlopen(const char *path, int mode); 23*81ad6265SDimitry Andric extern "C" int __orc_rt_jit_dlclose(void *dso_handle); 24*81ad6265SDimitry Andric 25*81ad6265SDimitry Andric ORC_RT_INTERFACE __orc_rt_CWrapperFunctionResult 26*81ad6265SDimitry Andric __orc_rt_jit_dlerror_wrapper(const char *ArgData, size_t ArgSize) { 27*81ad6265SDimitry Andric return WrapperFunction<SPSString()>::handle( 28*81ad6265SDimitry Andric ArgData, ArgSize, 29*81ad6265SDimitry Andric []() { return std::string(__orc_rt_jit_dlerror()); }) 30*81ad6265SDimitry Andric .release(); 31*81ad6265SDimitry Andric } 32*81ad6265SDimitry Andric 33*81ad6265SDimitry Andric ORC_RT_INTERFACE __orc_rt_CWrapperFunctionResult 34*81ad6265SDimitry Andric __orc_rt_jit_dlopen_wrapper(const char *ArgData, size_t ArgSize) { 35*81ad6265SDimitry Andric return WrapperFunction<SPSExecutorAddr(SPSString, int32_t)>::handle( 36*81ad6265SDimitry Andric ArgData, ArgSize, 37*81ad6265SDimitry Andric [](const std::string &Path, int32_t mode) { 38*81ad6265SDimitry Andric return ExecutorAddr::fromPtr( 39*81ad6265SDimitry Andric __orc_rt_jit_dlopen(Path.c_str(), mode)); 40*81ad6265SDimitry Andric }) 41*81ad6265SDimitry Andric .release(); 42*81ad6265SDimitry Andric } 43*81ad6265SDimitry Andric 44*81ad6265SDimitry Andric ORC_RT_INTERFACE __orc_rt_CWrapperFunctionResult 45*81ad6265SDimitry Andric __orc_rt_jit_dlclose_wrapper(const char *ArgData, size_t ArgSize) { 46*81ad6265SDimitry Andric return WrapperFunction<int32_t(SPSExecutorAddr)>::handle( 47*81ad6265SDimitry Andric ArgData, ArgSize, 48*81ad6265SDimitry Andric [](ExecutorAddr &DSOHandle) { 49*81ad6265SDimitry Andric return __orc_rt_jit_dlclose(DSOHandle.toPtr<void *>()); 50*81ad6265SDimitry Andric }) 51*81ad6265SDimitry Andric .release(); 52*81ad6265SDimitry Andric } 53