gas: avoid spurious failures in non-ELF targets in the SPARC testsuite.
[deliverable/binutils-gdb.git] / bfd / hash.c
index 7147b71a85169c4a45df19bc010b1b38120cee7e..ff026756080aa1db2c394f8ea4f56250f76bc831 100644 (file)
@@ -1,6 +1,5 @@
 /* hash.c -- hash table routines for BFD
-   Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002, 2003, 2004, 2005,
-   2006, 2007, 2009, 2010, 2011  Free Software Foundation, Inc.
+   Copyright (C) 1993-2016 Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -310,28 +309,37 @@ higher_prime_number (unsigned long n)
 {
   /* These are primes that are near, but slightly smaller than, a
      power of two.  */
-  static const unsigned long primes[] = {
-    (unsigned long) 127,
-    (unsigned long) 2039,
-    (unsigned long) 32749,
-    (unsigned long) 65521,
-    (unsigned long) 131071,
-    (unsigned long) 262139,
-    (unsigned long) 524287,
-    (unsigned long) 1048573,
-    (unsigned long) 2097143,
-    (unsigned long) 4194301,
-    (unsigned long) 8388593,
-    (unsigned long) 16777213,
-    (unsigned long) 33554393,
-    (unsigned long) 67108859,
-    (unsigned long) 134217689,
-    (unsigned long) 268435399,
-    (unsigned long) 536870909,
-    (unsigned long) 1073741789,
-    (unsigned long) 2147483647,
+  static const unsigned long primes[] =
+    {
+      (unsigned long) 31,
+      (unsigned long) 61,
+      (unsigned long) 127,
+      (unsigned long) 251,
+      (unsigned long) 509,
+      (unsigned long) 1021,
+      (unsigned long) 2039,
+      (unsigned long) 4093,
+      (unsigned long) 8191,
+      (unsigned long) 16381,
+      (unsigned long) 32749,
+      (unsigned long) 65521,
+      (unsigned long) 131071,
+      (unsigned long) 262139,
+      (unsigned long) 524287,
+      (unsigned long) 1048573,
+      (unsigned long) 2097143,
+      (unsigned long) 4194301,
+      (unsigned long) 8388593,
+      (unsigned long) 16777213,
+      (unsigned long) 33554393,
+      (unsigned long) 67108859,
+      (unsigned long) 134217689,
+      (unsigned long) 268435399,
+      (unsigned long) 536870909,
+      (unsigned long) 1073741789,
+      (unsigned long) 2147483647,
                                        /* 4294967291L */
-    ((unsigned long) 2147483647) + ((unsigned long) 2147483644),
+      ((unsigned long) 2147483647) + ((unsigned long) 2147483644),
   };
 
   const unsigned long *low = &primes[0];
@@ -384,6 +392,7 @@ bfd_hash_table_init_n (struct bfd_hash_table *table,
       objalloc_alloc ((struct objalloc *) table->memory, alloc);
   if (table->table == NULL)
     {
+      bfd_hash_table_free (table);
       bfd_set_error (bfd_error_no_memory);
       return FALSE;
     }
@@ -529,7 +538,7 @@ bfd_hash_insert (struct bfd_hash_table *table,
          table->frozen = 1;
          return hashp;
        }
-      memset ((PTR) newtable, 0, alloc);
+      memset (newtable, 0, alloc);
 
       for (hi = 0; hi < table->size; hi ++)
        while (table->table[hi])
@@ -657,7 +666,7 @@ 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[] =
     {
-      251, 509, 1021, 2039, 4051, 8599, 16699, 32749, 65537
+      31, 61, 127, 251, 509, 1021, 2039, 4091, 8191, 16381, 32749, 65537
     };
   unsigned int _index;
 
@@ -799,7 +808,8 @@ _bfd_stringtab_free (struct bfd_strtab_hash *table)
 
 /* Get the index of a string in a strtab, adding it if it is not
    already present.  If HASH is FALSE, we don't really use the hash
-   table, and we don't eliminate duplicate strings.  */
+   table, and we don't eliminate duplicate strings.  If COPY is true
+   then store a copy of STR if creating a new entry.  */
 
 bfd_size_type
 _bfd_stringtab_add (struct bfd_strtab_hash *tab,
@@ -825,11 +835,13 @@ _bfd_stringtab_add (struct bfd_strtab_hash *tab,
        entry->root.string = str;
       else
        {
+         size_t len = strlen (str) + 1;
          char *n;
 
-         n = (char *) bfd_hash_allocate (&tab->table, strlen (str) + 1);
+         n = (char *) bfd_hash_allocate (&tab->table, len);
          if (n == NULL)
            return (bfd_size_type) -1;
+          memcpy (n, str, len);
          entry->root.string = n;
        }
       entry->index = (bfd_size_type) -1;
This page took 0.030339 seconds and 4 git commands to generate.