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.10-189-g802fe9a


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  802fe9a1ca0577e8eac28c31a8c20497b15e7e69 (commit)
       via  0122f28eb99351c1b1690d5e2613988452d04583 (commit)
      from  ae612b04cc0716186e0d14e342bee184ba94ac1b (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=802fe9a1ca0577e8eac28c31a8c20497b15e7e69

commit 802fe9a1ca0577e8eac28c31a8c20497b15e7e69
Author: Ulrich Drepper <drepper@redhat.com>
Date:   Thu Jul 23 07:07:53 2009 -0700

    Handle unloading of DSO with a unique symbol definition.

diff --git a/ChangeLog b/ChangeLog
index 006dd5a..bea7ba0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2009-07-23  Ulrich Drepper  <drepper@redhat.com>
+
+	* elf/tst-unique1.c: Extend test to check for unloading DSO with
+	unique symbol definition.
+	Patch by Jakub Jelinek.
+	* elf/dl-lookup.c (do_lookup_x): When entering a new unique symbol,
+	make sure the object with the definition cannot be unloaded.  Adjust
+	a few types.
+	* sysdeps/generic/ldsodefs.h (struct rtld_global): The map element in
+	the unique symbol hash table should not be const.
+
 2009-07-21  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/x86_64/multiarch/strstr.c: Minor cleanups.  Remove
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index fd0d624..bdc84af 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -312,7 +312,7 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
 		 definition we have to use it.  */
 	      void enter (struct unique_sym *table, size_t size,
 			  unsigned int hash, const char *name,
-			  const ElfW(Sym) *sym, const struct link_map *map)
+			  const ElfW(Sym) *sym, struct link_map *map)
 	      {
 		size_t idx = hash % size;
 		size_t hash2 = 1 + hash % (size - 2);
@@ -332,6 +332,12 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
 			    table[idx].sym = sym;
 			    table[idx].map = map;
 			  }
+
+			if (table[idx].map->l_type == lt_loaded)
+			  /* Make sure we don't unload this object by
+			     artificially increason the open count.  */
+			  ++table[idx].map->l_direct_opencount;
+
 			return;
 		      }
 
@@ -410,7 +416,8 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
 		  tab->free = free;
 		}
 
-	      enter (entries, size, new_hash, strtab + sym->st_name, sym, map);
+	      enter (entries, size, new_hash, strtab + sym->st_name, sym,
+		     (struct link_map *) map);
 	      ++tab->n_elements;
 
 	      __rtld_lock_unlock_recursive (tab->lock);
diff --git a/elf/tst-unique1.c b/elf/tst-unique1.c
index 9b7996c..46d41d9 100644
--- a/elf/tst-unique1.c
+++ b/elf/tst-unique1.c
@@ -1,6 +1,7 @@
 #include <config.h>
 #include <dlfcn.h>
 #include <stdio.h>
+#include <sys/mman.h>
 
 static int
 do_test (void)
@@ -30,10 +31,45 @@ do_test (void)
       puts ("cannot locate f in tst-unique1mod2");
       return 1;
     }
-  return f2 (f1 ());
-#else
-  return 0;
+  if (f2 (f1 ()))
+    {
+      puts ("f from tst-unique1mod2 failed");
+      return 1;
+    }
+  dlclose (h2);
+  dlclose (h1);
+  mmap (NULL, 1024 * 1024 * 16, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  h2 = dlopen ("tst-unique1mod2.so", RTLD_LAZY);
+  if (h2 == NULL)
+    {
+      puts ("cannot load tst-unique1mod2");
+      return 1;
+    }
+  f2 = dlsym (h2, "f");
+  if (f2 == NULL)
+    {
+      puts ("cannot locate f in tst-unique1mod2");
+      return 1;
+    }
+  h1 = dlopen ("tst-unique1mod1.so", RTLD_LAZY);
+  if (h1 == NULL)
+    {
+      puts ("cannot load tst-unique1mod1");
+      return 1;
+    }
+  f1 = dlsym (h1, "f");
+  if (f1 == NULL)
+    {
+      puts ("cannot locate f in tst-unique1mod1");
+      return 1;
+    }
+  if (f2 (f1 ()))
+    {
+      puts ("f from tst-unique1mod2 failed");
+      return 1;
+    }
 #endif
+  return 0;
 }
 
 #define TEST_FUNCTION do_test ()
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 30f9d23..e18e60f 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -396,7 +396,7 @@ struct rtld_global
 	uint32_t hashval;
 	const char *name;
 	const ElfW(Sym) *sym;
-	const struct link_map *map;
+	struct link_map *map;
       } *entries;
       size_t size;
       size_t n_elements;

http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=0122f28eb99351c1b1690d5e2613988452d04583

commit 0122f28eb99351c1b1690d5e2613988452d04583
Author: Ulrich Drepper <drepper@redhat.com>
Date:   Tue Jul 21 08:32:54 2009 -0700

    Add 2.11 news items.

diff --git a/NEWS b/NEWS
index 6990dcc..6061d42 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-GNU C Library NEWS -- history of user-visible changes.  2009-6-1
+GNU C Library NEWS -- history of user-visible changes.  2009-7-21
 Copyright (C) 1992-2008, 2009 Free Software Foundation, Inc.
 See the end for copying conditions.
 
@@ -16,6 +16,27 @@ Version 2.11
 * STT_GNU_IFUNC is now supported in static executables.
   Implemented by H.J. Lu.
 
+* New optimized string functions for x86-64: strstr, strcasestr, memcmp,
+  strcspn, strpbrk, strspn, strcpy, stpcpy, strncpy, strcmp, strncmp.
+  Contributed by H.J. Lu.
+
+  strlen, rawmemchr.
+  Implemented by Ulrich Drepper.
+
+* AVX support in x86-64 auditing support in ld.so.
+  Implemented by H.J. Lu.
+
+* STB_GNU_UNIQUE support added.
+  Implemented by Ulrich Drepper.
+
+* Implement second fallback mode for optimized DNS lookup for even more
+  broken environments.  If two requests from the same port are not
+  handled correctly close the socket and open a new one before sending
+  the second request.  The 'single-request-reopen' option in /etc/resolv.conf
+  can be used to select this mode right away, instead of rediscovering the
+  necessity is every process again.
+  Implemented by Ulrich Drepper.
+
 
 Version 2.10
 

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

Summary of changes:
 ChangeLog                  |   11 +++++++++++
 NEWS                       |   23 ++++++++++++++++++++++-
 elf/dl-lookup.c            |   11 +++++++++--
 elf/tst-unique1.c          |   42 +++++++++++++++++++++++++++++++++++++++---
 sysdeps/generic/ldsodefs.h |    2 +-
 5 files changed, 82 insertions(+), 7 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]