[RFA,2/2] Simplify the psymbol hash function
Commit Message
>>>>> "Tom" == Tom Tromey <tom@tromey.com> writes:
Tom> I can add comments to the psymbol hash and comparison functions to
Tom> mention this.
How's this?
Tom
commit a042125cb391b1b489f272353a4c90068fc92954
Author: Tom Tromey <tom@tromey.com>
Date: Thu Nov 2 12:48:44 2017 -0600
Simplify the psymbol hash function
This patch simplifies the psymbol_hash function, by changing it not to
examine the contents of the symbol's name. This change just mirrors
what psymbol_compare already does -- it is checking for name equality,
which is ok because symbol names are interned in symbol_set_names.
This change speeds up psymbol reading. "gdb -nx -batch gdb"
previously took ~1.8 seconds on my machine, and with this patch it now
takes ~1.7 seconds.
gdb/ChangeLog
2017-11-09 Tom Tromey <tom@tromey.com>
* psymtab.c (psymbol_hash): Do not hash string contents.
(psymbol_compare): Add comment.
Comments
On 11/09/2017 02:09 PM, Tom Tromey wrote:
>>>>>> "Tom" == Tom Tromey <tom@tromey.com> writes:
>
> Tom> I can add comments to the psymbol hash and comparison functions to
> Tom> mention this.
>
> How's this?
LGTM.
Thanks,
Pedro Alves
@@ -1,3 +1,8 @@
+2017-11-09 Tom Tromey <tom@tromey.com>
+
+ * psymtab.c (psymbol_hash): Do not hash string contents.
+ (psymbol_compare): Add comment.
+
2017-11-04 Tom Tromey <tom@tromey.com>
* dictionary.c (dict_hash): Move "TKB" check into the "switch".
@@ -1548,7 +1548,9 @@ psymbol_hash (const void *addr, int length)
h = hash_continue (&lang, sizeof (unsigned int), h);
h = hash_continue (&domain, sizeof (unsigned int), h);
h = hash_continue (&theclass, sizeof (unsigned int), h);
- h = hash_continue (psymbol->ginfo.name, strlen (psymbol->ginfo.name), h);
+ /* Note that psymbol names are interned via symbol_set_names, so
+ there's no need to hash the contents of the name here. */
+ h = hash_continue (&psymbol->ginfo.name, sizeof (psymbol->ginfo.name), h);
return h;
}
@@ -1568,6 +1570,9 @@ psymbol_compare (const void *addr1, const void *addr2, int length)
&& sym1->ginfo.language == sym2->ginfo.language
&& PSYMBOL_DOMAIN (sym1) == PSYMBOL_DOMAIN (sym2)
&& PSYMBOL_CLASS (sym1) == PSYMBOL_CLASS (sym2)
+ /* Note that psymbol names are interned via
+ symbol_set_names, so there's no need to compare the
+ contents of the name here. */
&& sym1->ginfo.name == sym2->ginfo.name);
}