This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] symtab.c (hash_symbol_entry): Hash STRUCT_DOMAIN symbols as VAR_DOMAIN.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2c26b84f4520591762dfb7f740fb85c15c21a2ea

commit 2c26b84f4520591762dfb7f740fb85c15c21a2ea
Author: Doug Evans <xdje42@gmail.com>
Date:   Mon Apr 6 08:31:46 2015 -0700

    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.

Diff:
---
 gdb/ChangeLog |  7 +++++++
 gdb/symtab.c  | 29 ++++++++++++++++++++---------
 2 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 919e93c..cfe7961 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2015-04-06  Doug Evans  <xdje42@gmail.com>
+
+	* 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.
+
 2015-04-06  Pedro Alves  <palves@redhat.com>
 	    Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 634cf97..a1f8afb 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;
 	    }
 	}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]