Skip to content
Snippets Groups Projects
Commit 31751201 authored by Pekka Enberg's avatar Pekka Enberg
Browse files

dlfcn: dlerror() support

dlerror is needed when an application is started on the JVM with the
"-javaagent" option defined.
parent 6f77fcf0
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,29 @@
#include <link.h>
#include <osv/debug.h>
static __thread char dlerror_msg[128];
static __thread char *dlerror_ptr;
static char *dlerror_set(char *val)
{
char *old = dlerror_ptr;
dlerror_ptr = val;
return old;
}
static void dlerror_fmt(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vsnprintf(dlerror_msg, sizeof(dlerror_msg), fmt, args);
va_end(args);
dlerror_set(dlerror_msg);
}
void* dlopen(const char* filename, int flags)
{
if (!filename) {
......@@ -39,6 +62,7 @@ void* dlsym(void* handle, const char* name)
sym = { obj->lookup_symbol(name), obj };
}
if (!sym.obj || !sym.symbol) {
dlerror_fmt("dlsym: symbol %s not found", name);
return nullptr;
}
return sym.relocated_addr();
......@@ -84,3 +108,8 @@ extern "C" int dladdr(void *addr, Dl_info *info)
info->dli_saddr = ei.addr;
return 0;
}
extern "C" char *dlerror(void)
{
return dlerror_set(nullptr);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment