symtab.c (eq_symbol_entry): Use SYMBOL_SEARCH_NAME and symbol_matches_domain.
gdb/ChangeLog: * symtab.c (eq_symbol_entry): Use SYMBOL_SEARCH_NAME and symbol_matches_domain for symbol comparisons.
This commit is contained in:
parent
d98b9ccbcc
commit
77087adf50
2 changed files with 38 additions and 7 deletions
|
@ -1,3 +1,8 @@
|
|||
2015-01-11 Doug Evans <xdje42@gmail.com>
|
||||
|
||||
* symtab.c (eq_symbol_entry): Use SYMBOL_SEARCH_NAME and
|
||||
symbol_matches_domain for symbol comparisons.
|
||||
|
||||
2015-01-11 Doug Evans <xdje42@gmail.com>
|
||||
|
||||
* symtab.c (symbol_cache_mark_found): Improve function comment.
|
||||
|
|
40
gdb/symtab.c
40
gdb/symtab.c
|
@ -1200,17 +1200,46 @@ eq_symbol_entry (const struct symbol_cache_slot *slot,
|
|||
}
|
||||
else
|
||||
{
|
||||
slot_name = SYMBOL_LINKAGE_NAME (slot->value.found);
|
||||
slot_name = SYMBOL_SEARCH_NAME (slot->value.found);
|
||||
slot_domain = SYMBOL_DOMAIN (slot->value.found);
|
||||
}
|
||||
|
||||
/* NULL names match. */
|
||||
if (slot_name == NULL && name == NULL)
|
||||
;
|
||||
{
|
||||
/* But there's no point in calling symbol_matches_domain in the
|
||||
SYMBOL_SLOT_FOUND case. */
|
||||
if (slot_domain != domain)
|
||||
return 0;
|
||||
}
|
||||
else if (slot_name != NULL && name != NULL)
|
||||
{
|
||||
if (strcmp (slot_name, name) != 0)
|
||||
return 0;
|
||||
/* It's important that we use the same comparison that was done the
|
||||
first time through. If the slot records a found symbol, then this
|
||||
means using strcmp_iw on SYMBOL_SEARCH_NAME. See dictionary.c.
|
||||
It also means using symbol_matches_domain for found symbols.
|
||||
See block.c.
|
||||
|
||||
If the slot records a not-found symbol, then require a precise match.
|
||||
We could still be lax with whitespace like strcmp_iw though. */
|
||||
|
||||
if (slot->state == SYMBOL_SLOT_NOT_FOUND)
|
||||
{
|
||||
if (strcmp (slot_name, name) != 0)
|
||||
return 0;
|
||||
if (slot_domain != domain)
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct symbol *sym = slot->value.found;
|
||||
|
||||
if (strcmp_iw (slot_name, name) != 0)
|
||||
return 0;
|
||||
if (!symbol_matches_domain (SYMBOL_LANGUAGE (sym),
|
||||
slot_domain, domain))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1218,9 +1247,6 @@ eq_symbol_entry (const struct symbol_cache_slot *slot,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (slot_domain != domain)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue