This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch] Code cleanup: New SYMBOL_HASH_NEXT
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Sat, 2 Apr 2011 00:34:10 +0200
- Subject: [patch] Code cleanup: New SYMBOL_HASH_NEXT
Hi,
changing the internal hashing expression was tricky, make it easier.
This is a pre-requisite for a case-insensitivity patch repost to be (re)posted
later.
I will check it in, this patch has no functionality change.
Thanks,
Jan
gdb/
2011-04-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Code cleanup.
* dictionary.c (dict_hash): Use SYMBOL_HASH_NEXT.
* dwarf2read.c (mapped_index_string_hash): Refer to SYMBOL_HASH_NEXT
in the function comment, a new note on values compatibility.
* minsyms.c (msymbol_hash_iw, msymbol_hash): Use SYMBOL_HASH_NEXT.
* symtab.h (SYMBOL_HASH_NEXT): New.
--- a/gdb/dictionary.c
+++ b/gdb/dictionary.c
@@ -826,7 +826,7 @@ dict_hash (const char *string0)
}
/* FALL THROUGH */
default:
- hash = hash * 67 + *string - 113;
+ hash = SYMBOL_HASH_NEXT (hash, *string);
string += 1;
break;
}
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -1962,11 +1962,11 @@ create_addrmap_from_index (struct objfile *objfile, struct mapped_index *index)
do_cleanups (cleanup);
}
-/* The hash function for strings in the mapped index. This is the
- same as the hashtab.c hash function, but we keep a separate copy to
- maintain control over the implementation. This is necessary
- because the hash function is tied to the format of the mapped index
- file. */
+/* The hash function for strings in the mapped index. This is the same as
+ SYMBOL_HASH_NEXT, but we keep a separate copy to maintain control over the
+ implementation. This is necessary because the hash function is tied to the
+ format of the mapped index file. The hash values do not have to match with
+ SYMBOL_HASH_NEXT. */
static hashval_t
mapped_index_string_hash (const void *p)
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -91,7 +91,7 @@ msymbol_hash_iw (const char *string)
++string;
if (*string && *string != '(')
{
- hash = hash * 67 + *string - 113;
+ hash = SYMBOL_HASH_NEXT (hash, *string);
++string;
}
}
@@ -106,7 +106,7 @@ msymbol_hash (const char *string)
unsigned int hash = 0;
for (; *string; ++string)
- hash = hash * 67 + *string - 113;
+ hash = SYMBOL_HASH_NEXT (hash, *string);
return hash;
}
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -1020,6 +1020,12 @@ extern unsigned int msymbol_hash_iw (const char *);
extern unsigned int msymbol_hash (const char *);
+/* Compute the next hash value from previous HASH and the character C. This
+ is only a GDB in-memory computed value with no external files compatibility
+ requirements. */
+
+#define SYMBOL_HASH_NEXT(hash, c) ((hash) * 67 + (c) - 113)
+
extern struct objfile * msymbol_objfile (struct minimal_symbol *sym);
extern void