1#ifndef	_DLFCN_H
2#define	_DLFCN_H
3
4#include <features.h>
5#include <stdbool.h>
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11#define RTLD_LAZY   1
12#define RTLD_NOW    2
13#define RTLD_NOLOAD 4
14#define RTLD_NODELETE 4096
15#define RTLD_GLOBAL 256
16#define RTLD_LOCAL  0
17
18#define RTLD_NEXT    ((void *)-1)
19#define RTLD_DEFAULT ((void *)0)
20
21#define RTLD_DI_LINKMAP 2
22
23int    dlclose(void *);
24char  *dlerror(void);
25void  *dlopen(const char *, int);
26void  *dlsym(void *__restrict, const char *__restrict);
27
28
29/**
30 * @brief Obtain address of a symbol in a shared object or executable
31 *
32 * @param (void *__restrict) the handle to the dynamic link library
33 * @param (const char *restrict) the name of the symbol to be looked up
34 * @param (const char *restrict) the specific version of the symbol to be looked up
35 *
36 * @return On success, return the address associated with symbol. On failure, return NULL
37 * @since 12
38*/
39void *dlvsym(void *__restrict, const char *__restrict, const char *__restrict);
40
41/* namespace apis */
42#define NS_NAME_MAX 255
43typedef struct {
44	char name[NS_NAME_MAX+1];
45} Dl_namespace;
46
47#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
48typedef struct {
49	const char *dli_fname;
50	void *dli_fbase;
51	const char *dli_sname;
52	void *dli_saddr;
53} Dl_info;
54int dladdr(const void *, Dl_info *);
55#endif
56
57#if _REDIR_TIME64
58__REDIR(dlsym, __dlsym_time64);
59#endif
60
61#ifdef __cplusplus
62}
63#endif
64
65#endif
66