diff options
author | Doug Evans <xdje42@gmail.com> | 2015-04-06 08:31:46 -0700 |
---|---|---|
committer | Doug Evans <xdje42@gmail.com> | 2015-04-06 08:31:46 -0700 |
commit | 2c26b84f4520591762dfb7f740fb85c15c21a2ea (patch) | |
tree | de8423bf0f2aa0d851089d545a19354e95968487 /gdb/symtab.c | |
parent | 7a85168daf6036fee808dac9944161415189f8a4 (diff) | |
download | binutils-gdb-2c26b84f4520591762dfb7f740fb85c15c21a2ea.tar.gz |
symtab.c (hash_symbol_entry): Hash STRUCT_DOMAIN symbols as VAR_DOMAIN.
gdb/ChangeLog:
* symtab.c (hash_symbol_entry): Hash STRUCT_DOMAIN symbols as
VAR_DOMAIN.
(symbol_cache_lookup): Clarify use of bsc_ptr, slot_ptr parameters.
Include symbol domain in debugging output.
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r-- | gdb/symtab.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c index 634cf97dd1f..a1f8afb5ba9 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -1175,7 +1175,12 @@ hash_symbol_entry (const struct objfile *objfile_context, if (name != NULL) hash += htab_hash_string (name); - hash += domain; + /* Because of symbol_matches_domain we need VAR_DOMAIN and STRUCT_DOMAIN + to map to the same slot. */ + if (domain == STRUCT_DOMAIN) + hash += VAR_DOMAIN * 7; + else + hash += domain * 7; return hash; } @@ -1389,8 +1394,9 @@ set_symbol_cache_size_handler (char *args, int from_tty, The result is the symbol if found, SYMBOL_LOOKUP_FAILED if a previous lookup failed (and thus this one will too), or NULL if the symbol is not present in the cache. - *BSC_PTR, *SLOT_PTR are set to the cache and slot of the symbol, whether - found or not found. */ + If the symbol is not present in the cache, then *BSC_PTR and *SLOT_PTR are + set to the cache and slot of the symbol to save the result of a full lookup + attempt. */ static struct symbol * symbol_cache_lookup (struct symbol_cache *cache, @@ -1416,8 +1422,6 @@ symbol_cache_lookup (struct symbol_cache *cache, hash = hash_symbol_entry (objfile_context, name, domain); slot = bsc->symbols + hash % bsc->size; - *bsc_ptr = bsc; - *slot_ptr = slot; if (eq_symbol_entry (slot, objfile_context, name, domain)) { @@ -1434,6 +1438,11 @@ symbol_cache_lookup (struct symbol_cache *cache, return slot->value.found; } + /* Symbol is not present in the cache. */ + + *bsc_ptr = bsc; + *slot_ptr = slot; + if (symbol_lookup_debug) { fprintf_unfiltered (gdb_stdlog, @@ -1582,14 +1591,16 @@ symbol_cache_dump (const struct symbol_cache *cache) case SYMBOL_SLOT_UNUSED: break; case SYMBOL_SLOT_NOT_FOUND: - printf_filtered (" [%-4u] = %s, %s (not found)\n", i, + printf_filtered (" [%4u] = %s, %s %s (not found)\n", i, host_address_to_string (slot->objfile_context), - slot->value.not_found.name); + slot->value.not_found.name, + domain_name (slot->value.not_found.domain)); break; case SYMBOL_SLOT_FOUND: - printf_filtered (" [%-4u] = %s, %s\n", i, + printf_filtered (" [%4u] = %s, %s %s\n", i, host_address_to_string (slot->objfile_context), - SYMBOL_PRINT_NAME (slot->value.found)); + SYMBOL_PRINT_NAME (slot->value.found), + domain_name (SYMBOL_DOMAIN (slot->value.found))); break; } } |