From 0883b6e07e59e64e9f5d83662baf125dcf94a412 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 12 Aug 2010 16:23:32 +0000 Subject: [PATCH] PR ld/11843 * elflink.c (compute_bucket_count): Avoid futile long searches for the best bucket size. --- bfd/ChangeLog | 6 ++++++ bfd/elflink.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 528fa3cf76..1144f0f024 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2010-08-12 Todd Veldhuizen + + PR ld/11843 + * elflink.c (compute_bucket_count): Avoid futile long searches for + the best bucket size. + 2010-08-09 Richard Henderson PR ld/11891 diff --git a/bfd/elflink.c b/bfd/elflink.c index e0fbc83001..074229f7cc 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -5374,6 +5374,7 @@ compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED, const struct elf_backend_data *bed = get_elf_backend_data (dynobj); unsigned long int *counts; bfd_size_type amt; + unsigned int no_improvement_count = 0; /* Possible optimization parameters: if we have NSYMS symbols we say that the hashing table must at least have NSYMS/4 and at most @@ -5458,7 +5459,12 @@ compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED, { best_chlen = max; best_size = i; + no_improvement_count = 0; } + /* PR 11843: Avoid futile long searches for the best bucket size + when there are a large number of symbols. */ + else if (++no_improvement_count == 100) + break; } free (counts);