1#ifndef	_DLFCN_H
 2#define	_DLFCN_H
 3
 4#ifdef __cplusplus
 5extern "C" {
 6#endif
 7
 8#include <features.h>
 9
10#define RTLD_LAZY   1
11#define RTLD_NOW    2
12#define RTLD_NOLOAD 4
13#define RTLD_NODELETE 4096
14#define RTLD_GLOBAL 256
15#ifdef __wasilibc_unmodified_upstream
16#define RTLD_LOCAL  0
17#else
18/* For WASI, we give `RTLD_LOCAL` a non-zero value, avoiding ambiguity and
19 * allowing us to defer the decision of whether `RTLD_LOCAL` or `RTLD_GLOBAL`
20 * should be the default when neither is specified.
21 */
22#define RTLD_LOCAL  8
23#endif
24
25#define RTLD_NEXT    ((void *)-1)
26#define RTLD_DEFAULT ((void *)0)
27
28#ifdef __wasilibc_unmodified_upstream
29#define RTLD_DI_LINKMAP 2
30#endif
31
32int    dlclose(void *);
33char  *dlerror(void);
34void  *dlopen(const char *, int);
35void  *dlsym(void *__restrict, const char *__restrict);
36
37#if defined(__wasilibc_unmodified_upstream) && (defined(_GNU_SOURCE) || defined(_BSD_SOURCE))
38typedef struct {
39	const char *dli_fname;
40	void *dli_fbase;
41	const char *dli_sname;
42	void *dli_saddr;
43} Dl_info;
44int dladdr(const void *, Dl_info *);
45int dlinfo(void *, int, void *);
46#endif
47
48#if _REDIR_TIME64
49__REDIR(dlsym, __dlsym_time64);
50#endif
51
52#ifdef __cplusplus
53}
54#endif
55
56#endif