summaryrefslogtreecommitdiff
path: root/ldso/libdl/libdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldso/libdl/libdl.c')
-rw-r--r--ldso/libdl/libdl.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
index c54104ffe..ebd7b85b8 100644
--- a/ldso/libdl/libdl.c
+++ b/ldso/libdl/libdl.c
@@ -186,13 +186,6 @@ void *_dlopen(const char *libname, int flag)
_dl_unmap_cache();
return NULL;
}
- if (tpnt->init_flag & INIT_FUNCS_CALLED) {
-
- /* If the init and fini stuff has already been run, that means
- * someone called dlopen on a library we already have opened, so
- * we don't need to fix thing up any further... */
- return tpnt;
- }
dyn_chain = (struct dyn_elf *) malloc(sizeof(struct dyn_elf));
_dl_memset(dyn_chain, 0, sizeof(struct dyn_elf));
@@ -204,6 +197,13 @@ void *_dlopen(const char *libname, int flag)
dyn_chain->next_handle = _dl_handles;
_dl_handles = rpnt = dyn_chain;
+ if (tpnt->init_flag & INIT_FUNCS_CALLED) {
+ /* If the init and fini stuff has already been run, that means
+ * the dlopen'd library has already been loaded, and nothing
+ * further needs to be done. */
+ return (void *) dyn_chain;
+ }
+
#ifdef __SUPPORT_LD_DEBUG__
if(_dl_debug)