17777dab0Sopenharmony_ci#ifndef	_DLFCN_H
27777dab0Sopenharmony_ci#define	_DLFCN_H
37777dab0Sopenharmony_ci
47777dab0Sopenharmony_ci#include <features.h>
57777dab0Sopenharmony_ci#include <stdbool.h>
67777dab0Sopenharmony_ci
77777dab0Sopenharmony_ci#ifdef __cplusplus
87777dab0Sopenharmony_ciextern "C" {
97777dab0Sopenharmony_ci#endif
107777dab0Sopenharmony_ci
117777dab0Sopenharmony_ci#define RTLD_LAZY   1
127777dab0Sopenharmony_ci#define RTLD_NOW    2
137777dab0Sopenharmony_ci#define RTLD_NOLOAD 4
147777dab0Sopenharmony_ci#define RTLD_NODELETE 4096
157777dab0Sopenharmony_ci#define RTLD_GLOBAL 256
167777dab0Sopenharmony_ci#define RTLD_LOCAL  0
177777dab0Sopenharmony_ci
187777dab0Sopenharmony_ci#define RTLD_NEXT    ((void *)-1)
197777dab0Sopenharmony_ci#define RTLD_DEFAULT ((void *)0)
207777dab0Sopenharmony_ci
217777dab0Sopenharmony_ci#define RTLD_DI_LINKMAP 2
227777dab0Sopenharmony_ci
237777dab0Sopenharmony_ciint    dlclose(void *);
247777dab0Sopenharmony_cichar  *dlerror(void);
257777dab0Sopenharmony_civoid  *dlopen(const char *, int);
267777dab0Sopenharmony_civoid  *dlsym(void *__restrict, const char *__restrict);
277777dab0Sopenharmony_ci
287777dab0Sopenharmony_ci
297777dab0Sopenharmony_ci/**
307777dab0Sopenharmony_ci * @brief Obtain address of a symbol in a shared object or executable
317777dab0Sopenharmony_ci *
327777dab0Sopenharmony_ci * @param (void *__restrict) the handle to the dynamic link library
337777dab0Sopenharmony_ci * @param (const char *restrict) the name of the symbol to be looked up
347777dab0Sopenharmony_ci * @param (const char *restrict) the specific version of the symbol to be looked up
357777dab0Sopenharmony_ci *
367777dab0Sopenharmony_ci * @return On success, return the address associated with symbol. On failure, return NULL
377777dab0Sopenharmony_ci * @since 12
387777dab0Sopenharmony_ci*/
397777dab0Sopenharmony_civoid *dlvsym(void *__restrict, const char *__restrict, const char *__restrict);
407777dab0Sopenharmony_ci
417777dab0Sopenharmony_ci/* namespace apis */
427777dab0Sopenharmony_ci#define NS_NAME_MAX 255
437777dab0Sopenharmony_citypedef struct {
447777dab0Sopenharmony_ci	char name[NS_NAME_MAX+1];
457777dab0Sopenharmony_ci} Dl_namespace;
467777dab0Sopenharmony_ci
477777dab0Sopenharmony_ci#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
487777dab0Sopenharmony_citypedef struct {
497777dab0Sopenharmony_ci	const char *dli_fname;
507777dab0Sopenharmony_ci	void *dli_fbase;
517777dab0Sopenharmony_ci	const char *dli_sname;
527777dab0Sopenharmony_ci	void *dli_saddr;
537777dab0Sopenharmony_ci} Dl_info;
547777dab0Sopenharmony_ciint dladdr(const void *, Dl_info *);
557777dab0Sopenharmony_ci#endif
567777dab0Sopenharmony_ci
577777dab0Sopenharmony_ci#if _REDIR_TIME64
587777dab0Sopenharmony_ci__REDIR(dlsym, __dlsym_time64);
597777dab0Sopenharmony_ci#endif
607777dab0Sopenharmony_ci
617777dab0Sopenharmony_ci#ifdef __cplusplus
627777dab0Sopenharmony_ci}
637777dab0Sopenharmony_ci#endif
647777dab0Sopenharmony_ci
657777dab0Sopenharmony_ci#endif
66