Allow larger bfd_default_hash_table_size

* hash.c (bfd_hash_set_default_size): Use higher_prime_number
	rather than another copy of primes.  Increase maximum default
	size allowed.
This commit is contained in:
Alan Modra
2020-08-14 17:45:13 +09:30
parent 82fcdb3938
commit 19bddbe95c
2 changed files with 18 additions and 13 deletions

View File

@@ -1,3 +1,9 @@
2020-08-14 Alan Modra <amodra@gmail.com>
* hash.c (bfd_hash_set_default_size): Use higher_prime_number
rather than another copy of primes. Increase maximum default
size allowed.
2020-08-13 Alan Modra <amodra@gmail.com>
* config.bfd: Obsolete arm*-*-symbianelf*, and ia64*-*-*.

View File

@@ -664,19 +664,18 @@ bfd_hash_traverse (struct bfd_hash_table *table,
unsigned long
bfd_hash_set_default_size (unsigned long hash_size)
{
/* Extend this prime list if you want more granularity of hash table size. */
static const unsigned long hash_size_primes[] =
{
31, 61, 127, 251, 509, 1021, 2039, 4091, 8191, 16381, 32749, 65537
};
unsigned int _index;
/* Work out best prime number near the hash_size. */
for (_index = 0; _index < ARRAY_SIZE (hash_size_primes) - 1; ++_index)
if (hash_size <= hash_size_primes[_index])
break;
bfd_default_hash_table_size = hash_size_primes[_index];
/* These silly_size values result in around 1G and 32M of memory
being allocated for the table of pointers. Note that the number
of elements allocated will be almost twice the size of any power
of two chosen here. */
unsigned long silly_size = sizeof (size_t) > 4 ? 0x4000000 : 0x400000;
if (hash_size > silly_size)
hash_size = silly_size;
else if (hash_size != 0)
hash_size--;
hash_size = higher_prime_number (hash_size);
BFD_ASSERT (hash_size != 0);
bfd_default_hash_table_size = hash_size;
return bfd_default_hash_table_size;
}