From 3747e5b4453148dcdf29449d56e112d21597d423 Mon Sep 17 00:00:00 2001 From: Oleksii Shevchuk Date: Mon, 8 Oct 2018 21:05:49 +0300 Subject: [PATCH] Disable LMID for SunOS --- client/sources-linux/tmplibrary.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/client/sources-linux/tmplibrary.c b/client/sources-linux/tmplibrary.c index fbba9b52..d49c7abd 100644 --- a/client/sources-linux/tmplibrary.c +++ b/client/sources-linux/tmplibrary.c @@ -348,12 +348,20 @@ pid_t memexec(const char *buffer, size_t size, const char* const* argv, int stdi return -1; } -#ifdef LM_ID_NEWLM +#if defined(SunOS) +// For some unknown reason malloc doesn't work on newly created LM in Solaris 10 +// Fallback to old shitty way of loading libs +// TODO: write own ELF loader +#define _dlopen(path, flags) dlopen(path, flags | RTLD_PARENT | RTLD_GLOBAL) +#elif defined(LM_ID_NEWLM) static void *_dlopen(const char *path, int flags) { static Lmid_t lmid = LM_ID_NEWLM; flags &= ~RTLD_GLOBAL; + if ((flags & RTLD_NOLOAD) && (lmid == LM_ID_NEWLM)) + return NULL; + void *handle = dlmopen(lmid, path, flags); if (lmid == LM_ID_NEWLM && handle) { dlinfo(handle, RTLD_DI_LMID, &lmid);