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-142-geba0994


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  eba0994e75e622ad30c6dcdb53e5ddedd043f6d7 (commit)
      from  a38862a58910a5209c9ac3baae5797fbbedbeb1c (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=eba0994e75e622ad30c6dcdb53e5ddedd043f6d7

commit eba0994e75e622ad30c6dcdb53e5ddedd043f6d7
Author: Ulrich Drepper <drepper@redhat.com>
Date:   Tue Jul 7 09:49:55 2009 -0700

    Clean up code for hash table handling in ld.so.

diff --git a/ChangeLog b/ChangeLog
index c364e5e..d83ca21 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-07-07  Ulrich Drepper  <drepper@redhat.com>
+
+	* elf/dl-misc.c (_dl_higher_prime_number): New function.  Moved here
+	from...
+	* include/inline-hashtab.h: ...here.
+	(htab_expand): Adjust for renamed function.  Correct memory handling.
+
 2009-07-06  Ulrich Drepper  <drepper@redhat.com>
 
 	* elf/do-lookup.h (ALLOWED_STT): Optimize test for valid symbol types.
diff --git a/elf/dl-misc.c b/elf/dl-misc.c
index 7c77cd0..7d4e1a1 100644
--- a/elf/dl-misc.c
+++ b/elf/dl-misc.c
@@ -312,3 +312,67 @@ _dl_name_match_p (const char *name, const struct link_map *map)
 
   return 0;
 }
+
+
+unsigned long int
+_dl_higher_prime_number (unsigned long int n)
+{
+  /* These are primes that are near, but slightly smaller than, a
+     power of two.  */
+  static const uint32_t primes[] = {
+    UINT32_C (7),
+    UINT32_C (13),
+    UINT32_C (31),
+    UINT32_C (61),
+    UINT32_C (127),
+    UINT32_C (251),
+    UINT32_C (509),
+    UINT32_C (1021),
+    UINT32_C (2039),
+    UINT32_C (4093),
+    UINT32_C (8191),
+    UINT32_C (16381),
+    UINT32_C (32749),
+    UINT32_C (65521),
+    UINT32_C (131071),
+    UINT32_C (262139),
+    UINT32_C (524287),
+    UINT32_C (1048573),
+    UINT32_C (2097143),
+    UINT32_C (4194301),
+    UINT32_C (8388593),
+    UINT32_C (16777213),
+    UINT32_C (33554393),
+    UINT32_C (67108859),
+    UINT32_C (134217689),
+    UINT32_C (268435399),
+    UINT32_C (536870909),
+    UINT32_C (1073741789),
+    UINT32_C (2147483647),
+                                       /* 4294967291L */
+    UINT32_C (2147483647) + UINT32_C (2147483644)
+  };
+
+  const uint32_t *low = &primes[0];
+  const uint32_t *high = &primes[sizeof (primes) / sizeof (primes[0])];
+
+  while (low != high)
+    {
+      const uint32_t *mid = low + (high - low) / 2;
+      if (n > *mid)
+       low = mid + 1;
+      else
+       high = mid;
+    }
+
+#if 0
+  /* If we've run out of primes, abort.  */
+  if (n > *low)
+    {
+      fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
+      abort ();
+    }
+#endif
+
+  return *low;
+}
diff --git a/include/inline-hashtab.h b/include/inline-hashtab.h
index c359161..0f6719b 100644
--- a/include/inline-hashtab.h
+++ b/include/inline-hashtab.h
@@ -1,7 +1,5 @@
 /* Fully-inline hash table, used mainly for managing TLS descriptors.
-
-   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005, 2008
-     Free Software Foundation, Inc.
+   Copyright (C) 1999-2003, 2005, 2008, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Alexandre Oliva  <aoliva@redhat.com>
 
@@ -30,69 +28,6 @@
 
 extern void weak_function free (void *ptr);
 
-inline static unsigned long
-higher_prime_number (unsigned long n)
-{
-  /* These are primes that are near, but slightly smaller than, a
-     power of two.  */
-  static const uint32_t primes[] = {
-    UINT32_C (7),
-    UINT32_C (13),
-    UINT32_C (31),
-    UINT32_C (61),
-    UINT32_C (127),
-    UINT32_C (251),
-    UINT32_C (509),
-    UINT32_C (1021),
-    UINT32_C (2039),
-    UINT32_C (4093),
-    UINT32_C (8191),
-    UINT32_C (16381),
-    UINT32_C (32749),
-    UINT32_C (65521),
-    UINT32_C (131071),
-    UINT32_C (262139),
-    UINT32_C (524287),
-    UINT32_C (1048573),
-    UINT32_C (2097143),
-    UINT32_C (4194301),
-    UINT32_C (8388593),
-    UINT32_C (16777213),
-    UINT32_C (33554393),
-    UINT32_C (67108859),
-    UINT32_C (134217689),
-    UINT32_C (268435399),
-    UINT32_C (536870909),
-    UINT32_C (1073741789),
-    UINT32_C (2147483647),
-					/* 4294967291L */
-    UINT32_C (2147483647) + UINT32_C (2147483644)
-  };
-
-  const uint32_t *low = &primes[0];
-  const uint32_t *high = &primes[sizeof (primes) / sizeof (primes[0])];
-
-  while (low != high)
-    {
-      const uint32_t *mid = low + (high - low) / 2;
-      if (n > *mid)
-	low = mid + 1;
-      else
-	high = mid;
-    }
-
-#if 0
-  /* If we've run out of primes, abort.  */
-  if (n > *low)
-    {
-      fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
-      abort ();
-    }
-#endif
-
-  return *low;
-}
-
 struct hashtab
 {
   /* Table itself.  */
@@ -203,12 +138,11 @@ htab_expand (struct hashtab *htab, int (*hash_fn) (void *))
   /* Resize only when table after removal of unused elements is either
      too full or too empty.  */
   if (htab->n_elements * 2 > htab->size)
-    nsize = higher_prime_number (htab->n_elements * 2);
+    nsize = _dl_higher_prime_number (htab->n_elements * 2);
   else
     nsize = htab->size;
 
-  nentries = malloc (sizeof (void *) * nsize);
-  memset (nentries, 0, sizeof (void *) * nsize);
+  nentries = calloc (sizeof (void *), nsize);
   if (nentries == NULL)
     return 0;
   htab->entries = nentries;

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

Summary of changes:
 ChangeLog                |    7 ++++
 elf/dl-misc.c            |   64 ++++++++++++++++++++++++++++++++++++++++
 include/inline-hashtab.h |   72 ++--------------------------------------------
 3 files changed, 74 insertions(+), 69 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]