This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.14-164-g73d7af4


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  73d7af4f4c2b394063cb0b3a33ee2b00b5ad80b4 (commit)
      from  1dc277048c82f5445031b9273114a6a5c505abd8 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=73d7af4f4c2b394063cb0b3a33ee2b00b5ad80b4

commit 73d7af4f4c2b394063cb0b3a33ee2b00b5ad80b4
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Sat Aug 13 22:24:08 2011 -0400

    Implement LD_DEBUG=scopes

diff --git a/ChangeLog b/ChangeLog
index 8d2f204..6d543f6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2011-08-13  Ulrich Drepper  <drepper@gmail.com>
 
+	* elf/dl-open.c: Rename show_scope to _dl_schow_scope and export.
+	(dl_open_worker): Call _dl_show_scope when DL_DEBUG_SCOPES is set.
+	* elf/rtld.c (dl_main): Set l_name of vDSO.
+	Call _dl_show_scope when DL_DEBUG_SCOPES.
+	(process_dl_debug): Recognize scopes flag and also set it for all.
+	* sysdeps/generic/ldsodefs.h: Define DL_DEBUG_SCOPES.
+	Declare _dl_show_scope.
+
 	* elf/dl-libc.c (do_dlopen_args): Add caller_dlopen.
 	(do_dlopen): Pass caller_dlopen to dl_open.
 	(__libc_dlopen_mode): Initialize caller_dlopen.
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 19fda91..c3e5fba 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -46,12 +46,6 @@ weak_extern (BP_SYM (_dl_sysdep_start))
 
 extern int __libc_multiple_libcs;	/* Defined in init-first.c.  */
 
-/* Undefine the following for debugging.  */
-/* #define SCOPE_DEBUG 1 */
-#ifdef SCOPE_DEBUG
-static void show_scope (struct link_map *new);
-#endif
-
 /* We must be carefull not to leave us in an inconsistent state.  Thus we
    catch any error and re-raise it after cleaning up.  */
 
@@ -269,10 +263,6 @@ dl_open_worker (void *a)
       (void) _dl_check_map_versions (new->l_searchlist.r_list[i]->l_real,
 				     0, 0);
 
-#ifdef SCOPE_DEBUG
-  show_scope (new);
-#endif
-
 #ifdef SHARED
   /* Auditing checkpoint: we have added all objects.  */
   if (__builtin_expect (GLRO(dl_naudit) > 0, 0))
@@ -414,6 +404,10 @@ dl_open_worker (void *a)
 	  imap->l_scope[cnt + 1] = NULL;
 	  atomic_write_barrier ();
 	  imap->l_scope[cnt] = &new->l_searchlist;
+
+	  /* Print scope information.  */
+	  if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES, 0))
+	    _dl_show_scope (imap);
 	}
       /* Only add TLS memory if this object is loaded now and
 	 therefore is not yet initialized.  */
@@ -499,6 +493,10 @@ 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);
 }
 
 
@@ -635,33 +633,32 @@ no more namespaces available for dlmopen()"));
 }
 
 
-#ifdef SCOPE_DEBUG
-#include <unistd.h>
-
-static void
-show_scope (struct link_map *new)
+void
+_dl_show_scope (struct link_map *l)
 {
-  int scope_cnt;
-
-  for (scope_cnt = 0; new->l_scope[scope_cnt] != NULL; ++scope_cnt)
-    {
-      char numbuf[2];
-      unsigned int cnt;
-
-      numbuf[0] = '0' + scope_cnt;
-      numbuf[1] = '\0';
-      _dl_printf ("scope %s:", numbuf);
-
-      for (cnt = 0; cnt < new->l_scope[scope_cnt]->r_nlist; ++cnt)
-	if (*new->l_scope[scope_cnt]->r_list[cnt]->l_name)
-	  _dl_printf (" %s", new->l_scope[scope_cnt]->r_list[cnt]->l_name);
-	else
-	  _dl_printf (" <main>");
+  _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)
+      {
+	char numbuf[2];
+	unsigned int cnt;
+
+	numbuf[0] = '0' + scope_cnt;
+	numbuf[1] = '\0';
+	_dl_debug_printf (" scope %s:", numbuf);
+
+	for (cnt = 0; cnt < l->l_scope[scope_cnt]->r_nlist; ++cnt)
+	  if (*l->l_scope[scope_cnt]->r_list[cnt]->l_name)
+	    _dl_debug_printf_c (" %s",
+				l->l_scope[scope_cnt]->r_list[cnt]->l_name);
+	  else
+	    _dl_debug_printf_c (" %s", rtld_progname);
 
-      _dl_printf ("\n");
-    }
+	_dl_debug_printf_c ("\n");
+      }
+  _dl_debug_printf ("\n");
 }
-#endif
 
 #ifdef IS_IN_rtld
 /* Return non-zero if ADDR lies within one of L's segments.  */
diff --git a/elf/rtld.c b/elf/rtld.c
index 9eb9289..b84a3e7 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -1391,7 +1391,7 @@ of this helper program; chances are you did not intend to run this program.\n\
 	      char *copy = malloc (len);
 	      if (copy == NULL)
 		_dl_fatal_printf ("out of memory\n");
-	      l->l_libname->name = memcpy (copy, dsoname, len);
+	      l->l_name = l->l_libname->name = memcpy (copy, dsoname, len);
 	    }
 
 	  /* Add the vDSO to the object list.  */
@@ -2191,6 +2191,15 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
      malloc will no longer be the one from dl-minimal.c.  */
   GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
 
+  /* Print scope information.  */
+  if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SCOPES, 0))
+    {
+      _dl_debug_printf ("\nInitial object scopes\n");
+
+      for (struct link_map *l = main_map; l != NULL; l = l->l_next)
+	_dl_show_scope (l);
+    }
+
   if (prelinked)
     {
       if (main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)] != NULL)
@@ -2431,9 +2440,12 @@ process_dl_debug (const char *dl_debug)
 	DL_DEBUG_BINDINGS | DL_DEBUG_IMPCALLS },
       { LEN_AND_STR ("versions"), "display version dependencies",
 	DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS },
+      { LEN_AND_STR ("scopes"), "display scope information",
+	DL_DEBUG_SCOPES },
       { LEN_AND_STR ("all"), "all previous options combined",
 	DL_DEBUG_LIBS | DL_DEBUG_RELOC | DL_DEBUG_FILES | DL_DEBUG_SYMBOLS
-	| DL_DEBUG_BINDINGS | DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS },
+	| DL_DEBUG_BINDINGS | DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS
+	| DL_DEBUG_SCOPES },
       { LEN_AND_STR ("statistics"), "display relocation statistics",
 	DL_DEBUG_STATISTICS },
       { LEN_AND_STR ("unused"), "determined unused DSOs",
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 26c74f6..a5f0a25 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -556,9 +556,10 @@ struct rtld_global_ro
 #define DL_DEBUG_FILES      (1 << 6)
 #define DL_DEBUG_STATISTICS (1 << 7)
 #define DL_DEBUG_UNUSED	    (1 << 8)
+#define DL_DEBUG_SCOPES	    (1 << 9)
 /* These two are used only internally.  */
-#define DL_DEBUG_HELP       (1 << 9)
-#define DL_DEBUG_PRELINK    (1 << 10)
+#define DL_DEBUG_HELP       (1 << 10)
+#define DL_DEBUG_PRELINK    (1 << 11)
 
   /* OS version.  */
   EXTERN unsigned int _dl_osversion;
@@ -1104,6 +1105,9 @@ extern void *_dl_tls_get_addr_soft (struct link_map *l) attribute_hidden;
 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);
+
 __END_DECLS
 
 #endif /* ldsodefs.h */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                  |    8 +++++
 elf/dl-open.c              |   65 +++++++++++++++++++++-----------------------
 elf/rtld.c                 |   16 +++++++++-
 sysdeps/generic/ldsodefs.h |    8 ++++-
 4 files changed, 59 insertions(+), 38 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]