add support for dlmopen()
Created originally on Bitbucket by Anonymous
dlmopen() This function performs the same task as dlopen()—the filename and flags arguments, as well as the return value, are the same, except for the differences noted below.
The dlmopen() function differs from dlopen() primarily in that it
accepts an additional argument, lmid, that specifies the link-map
list (also referred to as a namespace) in which the shared object
should be loaded. (By comparison, dlopen() adds the dynamically
loaded shared object to the same namespace as the shared object from
which the dlopen() call is made.) The Lmid_t type is an opaque
handle that refers to a namespace.
The lmid argument is either the ID of an existing namespace (which
can be obtained using the dlinfo(3) RTLD_DI_LMID request) or one of
the following special values:
LM_ID_BASE
Load the shared object in the initial namespace (i.e., the
application's namespace).
LM_ID_NEWLM
Create a new namespace and load the shared object in that
namespace. The object must have been correctly linked to
reference all of the other shared objects that it requires,
since the new namespace is initially empty.
If filename is NULL, then the only permitted value for lmid is
LM_ID_BASE.