module loading: use global symbols with BSDs and local with Linux.

The symbol table fix on Linux doesn't translate well on BSD.
Adding code to use the older behaviour with the BSD systems
and retaining the new preferred behaviour when using dlopen(3)
on Linux.
This commit is contained in:
Alastair Poole 2018-05-27 12:37:18 +01:00
parent 0c61b092bb
commit 28ad7b337c
2 changed files with 8 additions and 0 deletions

View File

@ -392,7 +392,11 @@ e_module_new(const char *name)
m->error = 1;
goto init_done;
}
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__)
m->handle = dlopen(modpath, (RTLD_NOW | RTLD_GLOBAL));
#else
m->handle = dlopen(modpath, (RTLD_NOW | RTLD_LOCAL));
#endif
if (!m->handle)
{
snprintf(body, sizeof(body),

View File

@ -71,7 +71,11 @@ e_modapi_init(E_Module *m)
else
snprintf(buf, sizeof(buf), "%s/%s/%s",
e_module_dir_get(m), MODULE_ARCH, file);
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__NetBSD__)
handle = dlopen(buf, RTLD_NOW | RTLD_GLOBAL);
#else
handle = dlopen(buf, RTLD_NOW | RTLD_LOCAL);
#endif
if (handle)
e_wizard_page_add(handle, file,
dlsym(handle, "wizard_page_init"),