* bfd-in2.h: Regenerate.
* hash.c (bfd_hash_insert): New function. Split out from..
(bfd_hash_lookup): ..here.
* merge.c (sec_merge_hash_lookup): Use bfd_hash_insert.
+2007-09-19 Alan Modra <amodra@bigpond.net.au>
+ Doug Kwan <dougkwan@google.com>
+
+ * bfd-in.h (bfd_hash_insert): Declare.
+ * bfd-in2.h: Regenerate.
+ * hash.c (bfd_hash_insert): New function. Split out from..
+ (bfd_hash_lookup): ..here.
+ * merge.c (sec_merge_hash_lookup): Use bfd_hash_insert.
+
2007-09-18 Alan Modra <amodra@bigpond.net.au>
* elf.c (bfd_section_from_shdr): Check bfd_alloc return.
(struct bfd_hash_table *, const char *, bfd_boolean create,
bfd_boolean copy);
+/* Insert an entry in a hash table. */
+extern struct bfd_hash_entry *bfd_hash_insert
+ (struct bfd_hash_table *, const char *, unsigned long);
+
/* Replace an entry in a hash table. */
extern void bfd_hash_replace
(struct bfd_hash_table *, struct bfd_hash_entry *old,
(struct bfd_hash_table *, const char *, bfd_boolean create,
bfd_boolean copy);
+/* Insert an entry in a hash table. */
+extern struct bfd_hash_entry *bfd_hash_insert
+ (struct bfd_hash_table *, const char *, unsigned long);
+
/* Replace an entry in a hash table. */
extern void bfd_hash_replace
(struct bfd_hash_table *, struct bfd_hash_entry *old,
if (! create)
return NULL;
- hashp = (*table->newfunc) (NULL, table, string);
- if (hashp == NULL)
- return NULL;
if (copy)
{
char *new;
memcpy (new, string, len + 1);
string = new;
}
+
+ return bfd_hash_insert (table, string, hash);
+}
+
+/* Insert an entry in a hash table. */
+
+struct bfd_hash_entry *
+bfd_hash_insert (struct bfd_hash_table *table,
+ const char *string,
+ unsigned long hash)
+{
+ struct bfd_hash_entry *hashp;
+ unsigned int index;
+
+ hashp = (*table->newfunc) (NULL, table, string);
+ if (hashp == NULL)
+ return NULL;
hashp->string = string;
hashp->hash = hash;
+ index = hash % table->size;
hashp->next = table->table[index];
table->table[index] = hashp;
table->count++;
newtable = ((struct bfd_hash_entry **)
objalloc_alloc ((struct objalloc *) table->memory, alloc));
+ if (newtable == NULL)
+ {
+ table->frozen = 1;
+ return hashp;
+ }
memset ((PTR) newtable, 0, alloc);
for (hi = 0; hi < table->size; hi ++)
{
struct bfd_hash_entry *chain = table->table[hi];
struct bfd_hash_entry *chain_end = chain;
- int index;
while (chain_end->next && chain_end->next->hash == chain->hash)
chain_end = chain_end->next;
return NULL;
hashp = ((struct sec_merge_hash_entry *)
- sec_merge_hash_newfunc (NULL, &table->table, string));
+ bfd_hash_insert (&table->table, string, hash));
if (hashp == NULL)
return NULL;
- hashp->root.string = string;
- hashp->root.hash = hash;
hashp->len = len;
hashp->alignment = alignment;
- hashp->root.next = table->table.table[index];
- table->table.table[index] = (struct bfd_hash_entry *) hashp;
-
return hashp;
}