This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.10-142-geba0994
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 7 Jul 2009 16:51:03 -0000
- Subject: 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