Improve printing of lookup scopes
authorUlrich Drepper <drepper@gmail.com>
Tue, 16 Aug 2011 20:11:03 +0000 (16:11 -0400)
committerUlrich Drepper <drepper@gmail.com>
Tue, 16 Aug 2011 20:11:03 +0000 (16:11 -0400)
The scope of a new object should be printed earlier and when the scope
of an already loaded object is extended only the changes should be
printed.

ChangeLog
elf/dl-open.c
elf/rtld.c
sysdeps/generic/ldsodefs.h

index 15c0144..6dbab2e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2011-08-16  Ulrich Drepper  <drepper@gmail.com>
 
+       * elf/dl-open.c (_dl_show_scope): Take additional parameter which
+       specifies first scope to show.
+       (dl_open_worker): Update callers.  Move printing scope of new
+       object to before the relocation.
+       * rtld.c (dl_main): Update _dl_show_scope call.
+       * sysdeps/generic/ldsodefs.h: Update declaration.
+
        * elf/dl-open.c (_dl_show_scope): Use _dl_debug_printf to generate the
        string for the scope number.
 
index 980c47e..65fdd31 100644 (file)
@@ -288,6 +288,10 @@ dl_open_worker (void *a)
   r->r_state = RT_CONSISTENT;
   _dl_debug_state ();
 
+  /* Print scope information.  */
+  if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES, 0))
+    _dl_show_scope (new, 0);
+
   /* Only do lazy relocation if `LD_BIND_NOW' is not set.  */
   int reloc_mode = mode & __RTLD_AUDIT;
   if (GLRO(dl_lazy))
@@ -407,7 +411,7 @@ dl_open_worker (void *a)
 
          /* Print scope information.  */
          if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES, 0))
-           _dl_show_scope (imap);
+           _dl_show_scope (imap, cnt);
        }
       /* Only add TLS memory if this object is loaded now and
         therefore is not yet initialized.  */
@@ -493,10 +497,6 @@ cannot load any more object with static TLS"));
   if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
     _dl_debug_printf ("opening file=%s [%lu]; direct_opencount=%u\n\n",
                      new->l_name, new->l_ns, new->l_direct_opencount);
-
-  /* Print scope information.  */
-  if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES, 0))
-    _dl_show_scope (new);
 }
 
 
@@ -634,12 +634,12 @@ no more namespaces available for dlmopen()"));
 
 
 void
-_dl_show_scope (struct link_map *l)
+_dl_show_scope (struct link_map *l, int from)
 {
   _dl_debug_printf ("object=%s [%lu]\n",
                    *l->l_name ? l->l_name : rtld_progname, l->l_ns);
   if (l->l_scope != NULL)
-    for (int scope_cnt = 0; l->l_scope[scope_cnt] != NULL; ++scope_cnt)
+    for (int scope_cnt = from; l->l_scope[scope_cnt] != NULL; ++scope_cnt)
       {
        _dl_debug_printf (" scope %u:", scope_cnt);
 
index 478d037..87bb5f0 100644 (file)
@@ -2197,7 +2197,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
       _dl_debug_printf ("\nInitial object scopes\n");
 
       for (struct link_map *l = main_map; l != NULL; l = l->l_next)
-       _dl_show_scope (l);
+       _dl_show_scope (l, 0);
     }
 
   if (prelinked)
index 8c7f00f..b24bff3 100644 (file)
@@ -1106,7 +1106,7 @@ extern int _dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr)
      internal_function attribute_hidden;
 
 /* Show show of an object.  */
-extern void _dl_show_scope (struct link_map *new);
+extern void _dl_show_scope (struct link_map *new, int from);
 
 __END_DECLS