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