53 #ifdef USE_DYNAMIC_MAPS
54 #if defined(HAS_DLOPEN)
56 #elif defined(HAS_SHL_LOAD)
59 #error "USE_DYNAMIC_LIBS requires HAS_DLOPEN or HAS_SHL_LOAD"
73 static const char myname[] =
"load_library_symbols";
77 #if defined(HAS_DLOPEN)
92 if ((handle = dlopen(libname, RTLD_NOW)) == 0) {
94 msg_fatal(
"%s: dlopen failure loading %s: %s", myname, libname,
95 emsg ? emsg :
"don't know why");
98 for (fn = libfuncs; fn->
name; fn++) {
99 if ((non_portable_union.dptr = dlsym(handle, fn->
name)) == 0) {
101 msg_fatal(
"%s: dlsym failure looking up %s in %s: %s", myname,
102 fn->
name, libname, emsg ? emsg :
"don't know why");
104 fn->
fptr = non_portable_union.fptr;
106 msg_info(
"loaded %s = %p", fn->
name, non_portable_union.dptr);
110 for (dp = libdata; dp->
name; dp++) {
111 if ((dp->
dptr = dlsym(handle, dp->
name)) == 0) {
113 msg_fatal(
"%s: dlsym failure looking up %s in %s: %s", myname,
114 dp->
name, libname, emsg ? emsg :
"don't know why");
120 #elif defined(HAS_SHL_LOAD)
123 handle = shl_load(libname, BIND_IMMEDIATE, 0);
126 for (fn = libfuncs; fn->
name; fn++) {
127 if (shl_findsym(&handle, fn->
name, TYPE_PROCEDURE, &fn->
fptr) != 0)
128 msg_fatal(
"%s: shl_findsym failure looking up %s in %s: %m",
129 myname, fn->
name, libname);
135 for (dp = libdata; dp->
name; dp++) {
136 if (shl_findsym(&handle, dp->
name, TYPE_DATA, &dp->
dptr) != 0)
137 msg_fatal(
"%s: shl_findsym failure looking up %s in %s: %m",
138 myname, dp->
name, libname);
void load_library_symbols(const char *, LIB_FN *, LIB_DP *)
NORETURN msg_fatal(const char *fmt,...)
void msg_info(const char *fmt,...)