VSF Documented
dlfcn.h
Go to the documentation of this file.
1#ifndef __VSF_LINUX_DLFCN_H__
2#define __VSF_LINUX_DLFCN_H__
3
5
6#if VSF_LINUX_CFG_RELATIVE_PATH == ENABLED && VSF_LINUX_USE_SIMPLE_LIBC == ENABLED
8#else
9# include <stddef.h>
10#endif
11#include <stdio.h>
12
13// for elf_loader in service.loader
14#include "service/vsf_service.h"
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20#if VSF_LINUX_CFG_WRAPPER == ENABLED
21#define dlopen VSF_LINUX_WRAPPER(dlopen)
22#define dlclose VSF_LINUX_WRAPPER(dlclose)
23#define dlsym VSF_LINUX_WRAPPER(dlsym)
24#define dlerror VSF_LINUX_WRAPPER(dlerror)
25#endif
26
27#define RTLD_LAZY 0
28#define RTLD_NOW 1
29#define RTLD_GLOBAL 2
30#define RTLD_LOCAL 3
31
32#define RTLD_DEFAULT ((void *)0)
33
34#if VSF_LINUX_APPLET_USE_DLFCN == ENABLED
35typedef struct vsf_linux_dlfcn_vplt_t {
37
43# ifndef __VSF_APPLET__
45# endif
46#endif
47
48#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_DLFCN_LIB__))\
49 && VSF_LINUX_APPLET_USE_DLFCN == ENABLED
50
51#ifndef VSF_LINUX_APPLET_DLFCN_VPLT
52# if VSF_LINUX_USE_APPLET == ENABLED
53# define VSF_LINUX_APPLET_DLFCN_VPLT \
54 ((vsf_linux_dlfcn_vplt_t *)(VSF_LINUX_APPLET_VPLT->dlfcn_vplt))
55# else
56# define VSF_LINUX_APPLET_DLFCN_VPLT \
57 ((vsf_linux_dlfcn_vplt_t *)vsf_vplt((void *)0))
58# endif
59#endif
60
61#define VSF_LINUX_APPLET_DLFCN_ENTRY(__NAME) \
62 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_DLFCN_VPLT, __NAME)
63#define VSF_LINUX_APPLET_DLFCN_IMP(...) \
64 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_DLFCN_VPLT, __VA_ARGS__)
65
66VSF_LINUX_APPLET_DLFCN_IMP(dlopen, void *, const char *pathname, int mode) {
67 return VSF_LINUX_APPLET_DLFCN_ENTRY(dlopen)(pathname, mode);
68}
69VSF_LINUX_APPLET_DLFCN_IMP(dlclose, int, void *handle) {
70 return VSF_LINUX_APPLET_DLFCN_ENTRY(dlclose)(handle);
71}
72VSF_LINUX_APPLET_DLFCN_IMP(dlsym, void *, void *handle, const char *name) {
73 return VSF_LINUX_APPLET_DLFCN_ENTRY(dlsym)(handle, name);
74}
75VSF_LINUX_APPLET_DLFCN_IMP(dlerror, char *, void) {
76 return VSF_LINUX_APPLET_DLFCN_ENTRY(dlerror)();
77}
78
79#else // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_DLFCN
80
81#if VSF_USE_LOADER == ENABLED
82typedef struct vsf_linux_dynloader_t {
83 union {
84#if VSF_LOADER_USE_ELF == ENABLED
86#endif
87#if VSF_LOADER_USE_PE == ENABLED
89#endif
90 vsf_loader_t generic;
94#endif
95
96void * dlopen(const char *pathname, int mode);
97int dlclose(void *handle);
98void * dlsym(void *handle, const char *name);
99char * dlerror(void);
100
101#endif // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_DLFCN
102
103#ifdef __cplusplus
104}
105#endif
106
107#endif
Definition vsf_elfloader.h:60
Definition vsf_loader.h:176
Definition vsf_peloader.h:58
#define dlopen
Definition dlfcn.h:21
__VSF_VPLT_DECORATOR__ vsf_linux_dlfcn_vplt_t vsf_linux_dlfcn_vplt
Definition vsf_linux.c:4936
#define dlerror
Definition dlfcn.h:24
#define dlsym
Definition dlfcn.h:23
#define dlclose
Definition dlfcn.h:22
Definition dlfcn.h:35
vsf_vplt_info_t info
Definition dlfcn.h:36
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(dlsym)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(dlopen)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(dlclose)
VSF_APPLET_VPLT_ENTRY_FUNC_DEF(dlerror)
Definition dlfcn.h:82
vsf_elfloader_t elfloader
Definition dlfcn.h:85
union vsf_linux_dynloader_t::@810 loader
vsf_loader_target_t target
Definition dlfcn.h:92
vsf_peloader_t peloader
Definition dlfcn.h:88
Definition vsf_loader.h:132
Definition vsf_cfg.h:95
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93