[rtems commit] libdl: RTLD_DEFAULT searches the global symbol table.

Chris Johns chrisj at rtems.org
Tue Nov 4 05:26:31 UTC 2014


Module:    rtems
Branch:    master
Commit:    028ed6c39036dfc787614dbb9a989fd7b47aea3f
Changeset: http://git.rtems.org/rtems/commit/?id=028ed6c39036dfc787614dbb9a989fd7b47aea3f

Author:    Chris Johns <chrisj at rtems.org>
Date:      Tue Nov  4 16:34:37 2014 +1100

libdl: RTLD_DEFAULT searches the global symbol table.

---

 cpukit/libdl/dlfcn.c |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/cpukit/libdl/dlfcn.c b/cpukit/libdl/dlfcn.c
index 7c10202..2781274 100644
--- a/cpukit/libdl/dlfcn.c
+++ b/cpukit/libdl/dlfcn.c
@@ -97,19 +97,28 @@ void*
 dlsym (void* handle, const char *symbol)
 {
   rtems_rtl_obj_t*     obj;
-  rtems_rtl_obj_sym_t* sym;
+  rtems_rtl_obj_sym_t* sym = NULL;
   void*                symval = NULL;
 
   if (!rtems_rtl_lock ())
     return NULL;
 
-  obj = dl_get_obj_from_handle (handle);
-  if (obj)
+  /*
+   * If the handle is "default" search the global symbol table.
+   */
+  if (handle == RTLD_DEFAULT)
   {
-    sym = rtems_rtl_symbol_obj_find (obj, symbol);
-    if (sym)
-      symval = sym->value;
+    sym = rtems_rtl_symbol_global_find (symbol);
   }
+  else
+  {
+    obj = dl_get_obj_from_handle (handle);
+    if (obj)
+      sym = rtems_rtl_symbol_obj_find (obj, symbol);
+  }
+
+  if (sym)
+    symval = sym->value;
 
   rtems_rtl_unlock ();
 



More information about the vc mailing list