From 5f7b130ef0be7111b91d91e9a77a6226b048489b Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 15 Oct 2003 08:55:22 +0000 Subject: Doh! I was returning with an incorrect pointer type when dlopening already loaded libs, which unsurprisingly would cause dlsym() to not work at all... -Erik --- ldso/libdl/dlib.c | 14 +++++++------- ldso/libdl/libdl.c | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'ldso') diff --git a/ldso/libdl/dlib.c b/ldso/libdl/dlib.c index c54104ffe..ebd7b85b8 100644 --- a/ldso/libdl/dlib.c +++ b/ldso/libdl/dlib.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) 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) -- cgit v1.2.3