From: Alan Modra Date: Fri, 14 Aug 2020 08:15:13 +0000 (+0930) Subject: Allow larger bfd_default_hash_table_size X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=19bddbe95c156a4883213a57d4437b75318b6875;p=binutils-gdb.git 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5d3bb56bb25..ef077c4131c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2020-08-14 Alan Modra + + * 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 * config.bfd: Obsolete arm*-*-symbianelf*, and ia64*-*-*. diff --git a/bfd/hash.c b/bfd/hash.c index 56d18ac3179..ba6ff92517d 100644 --- a/bfd/hash.c +++ b/bfd/hash.c @@ -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; }