summaryrefslogtreecommitdiff
path: root/gas/hash.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2011-04-20 12:52:12 +0000
committerAlan Modra <amodra@bigpond.net.au>2011-04-20 12:52:12 +0000
commitd587f9cb3478cc48950592b952ae8a7da497ca60 (patch)
tree0fa112af513365960d9ae1708aaf4e969d5270a8 /gas/hash.c
parent2def7cf8a1c3390d09acb9ce4d7d1c8f1f619b2f (diff)
downloadbinutils-redhat-d587f9cb3478cc48950592b952ae8a7da497ca60.tar.gz
bfd/
* hash.c (bfd_default_hash_table_size): Make it an unsigned long. (bfd_hash_table_init_n): Overflow checking. (bfd_hash_set_default_size): Return current size. Take unsigned long arg. Add 65537 to hash_size primes. * bfd-in.h (bfd_hash_set_default_size): Update prototype. * bfd-in2.h: Regenerate. gas/ * hash.c (set_gas_hash_table_size): Use bfd_hash_set_default_size. (hash_new_sized): New function, split out from.. (hash_new): ..here. ld/ * ld.h (ld_config_type <hash_table_size>): Make it an unsigned long.
Diffstat (limited to 'gas/hash.c')
-rw-r--r--gas/hash.c38
1 files changed, 10 insertions, 28 deletions
diff --git a/gas/hash.c b/gas/hash.c
index 6fc8543a90..a58c9489b6 100644
--- a/gas/hash.c
+++ b/gas/hash.c
@@ -1,6 +1,6 @@
/* hash.c -- gas hash table code
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
- 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009
+ 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2011
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -78,41 +78,17 @@ static unsigned long gas_hash_table_size = 65537;
void
set_gas_hash_table_size (unsigned long size)
{
- gas_hash_table_size = size;
-}
-
-/* FIXME: This function should be amalgmated with bfd/hash.c:bfd_hash_set_default_size(). */
-static unsigned long
-get_gas_hash_table_size (void)
-{
- /* Extend this prime list if you want more granularity of hash table size. */
- static const unsigned long hash_size_primes[] =
- {
- 1021, 4051, 8599, 16699, 65537
- };
- unsigned int hindex;
-
- /* Work out the best prime number near the hash_size.
- FIXME: This could be a more sophisticated algorithm,
- but is it really worth implementing it ? */
- for (hindex = 0; hindex < ARRAY_SIZE (hash_size_primes) - 1; ++ hindex)
- if (gas_hash_table_size <= hash_size_primes[hindex])
- break;
-
- return hash_size_primes[hindex];
+ gas_hash_table_size = bfd_hash_set_default_size (size);
}
/* Create a hash table. This return a control block. */
-struct hash_control *
-hash_new (void)
+static struct hash_control *
+hash_new_sized (unsigned long size)
{
- unsigned long size;
unsigned long alloc;
struct hash_control *ret;
- size = get_gas_hash_table_size ();
-
ret = (struct hash_control *) xmalloc (sizeof *ret);
obstack_begin (&ret->memory, chunksize);
alloc = size * sizeof (struct hash_entry *);
@@ -132,6 +108,12 @@ hash_new (void)
return ret;
}
+struct hash_control *
+hash_new (void)
+{
+ return hash_new_sized (gas_hash_table_size);
+}
+
/* Delete a hash table, freeing all allocated memory. */
void