PR ld/11843
authorNick Clifton <nickc@redhat.com>
Thu, 12 Aug 2010 16:23:32 +0000 (16:23 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 12 Aug 2010 16:23:32 +0000 (16:23 +0000)
        * elflink.c (compute_bucket_count): Avoid futile long searches for
        the best bucket size.

bfd/ChangeLog
bfd/elflink.c

index 528fa3cf76cdac9b3f158ec457e9329a9b660d7b..1144f0f0249e874df7878a277b24dac1cf4800f4 100644 (file)
@@ -1,3 +1,9 @@
+2010-08-12  Todd Veldhuizen  <todd.veldhuizen@logicblox.com>
+
+       PR ld/11843
+       * elflink.c (compute_bucket_count): Avoid futile long searches for
+       the best bucket size.
+
 2010-08-09  Richard Henderson  <rth@redhat.com>
 
        PR ld/11891
index e0fbc830011eb36b7e2af674c7649bbaf8f044d2..074229f7ccb9ead11cb85d2cb637fee59e176a37 100644 (file)
@@ -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);