summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2012-01-21 00:21:41 -0800
committerKhem Raj <raj.khem@gmail.com>2012-01-23 16:10:21 -0800
commitbee3ea0f5a8d2cc2cfaeebdc4ef65f2d6b30b749 (patch)
tree0c92a60c584bd81e98b4f7d871f8f72245257072
parentc4904bd81b8bd4b023d74e438324432341a4b745 (diff)
mips/libdl: Apply relocations after appending the new scope
Without this the relocations for the current shared object are not resolved since the scope is not added to map yet Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--ldso/libdl/libdl.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
index bc3ef8aa1..32afe1c01 100644
--- a/ldso/libdl/libdl.c
+++ b/ldso/libdl/libdl.c
@@ -543,6 +543,12 @@ static void *do_dlopen(const char *libname, int flag)
* Now we go through and look for REL and RELA records that indicate fixups
* to the GOT tables. We need to do this in reverse order so that COPY
* directives work correctly */
+
+ /* Get the tail of the list */
+ for (ls = &_dl_loaded_modules->symbol_scope; ls && ls->next; ls = ls->next);
+
+ /* Extend the global scope by adding the local scope of the dlopened DSO. */
+ ls->next = &dyn_chain->dyn->symbol_scope;
#ifdef __mips__
/*
* Relocation of the GOT entries for MIPS have to be done
@@ -550,11 +556,6 @@ static void *do_dlopen(const char *libname, int flag)
*/
_dl_perform_mips_global_got_relocations(tpnt, !now_flag);
#endif
- /* Get the tail of the list */
- for (ls = &_dl_loaded_modules->symbol_scope; ls && ls->next; ls = ls->next);
-
- /* Extend the global scope by adding the local scope of the dlopened DSO. */
- ls->next = &dyn_chain->dyn->symbol_scope;
if (_dl_fixup(dyn_chain, &_dl_loaded_modules->symbol_scope, now_flag))
goto oops;