New parameter "debug symbol-lookup".
authorDoug Evans <xdje42@gmail.com>
Wed, 17 Dec 2014 08:17:27 +0000 (00:17 -0800)
committerDoug Evans <xdje42@gmail.com>
Wed, 17 Dec 2014 08:17:27 +0000 (00:17 -0800)
gdb/ChangeLog:

New parameter "debug symbol-lookup".
* NEWS: Mention it.
* cp-namespace.c (cp_lookup_symbol_imports_or_template): Add debug
output.
(cp_lookup_symbol_namespace, cp_lookup_symbol_nonlocal): Ditto.
(cp_lookup_nested_symbol): Ditto.
* language.c (language_lookup_primitive_type_by_name): Add debug
output.
* minsyms.c (lookup_minimal_symbol): Add debug output.
* objfiles.c (objfile_debug_name): Moved here, and renamed ...
* symfile-debug.c (debug_objfile_name): ... from here.  All callers
updated.
* objfiles.h (objfile_debug_name): Declare.
* symtab.h (symbol_lookup_debug): Declare.
* symtab.c (symbol_lookup_debug): New global.
(lookup_language_this): Add debug output.
(lookup_symbol_aux, lookup_symbol_in_block): Ditto.
(lookup_symbol_in_objfile_symtabs, lookup_symbol_via_quick_fns): Ditto.
(lookup_symbol_in_static_block, lookup_symbol_in_objfile): Ditto.
(_initialize_symtab): Add new parameter "debug symbol-lookup".

gdb/doc/ChangeLog:

* gdb.texinfo (Debugging Output): Document "debug symbol-lookup".

12 files changed:
gdb/ChangeLog
gdb/NEWS
gdb/cp-namespace.c
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/language.c
gdb/minsyms.c
gdb/objfiles.c
gdb/objfiles.h
gdb/symfile-debug.c
gdb/symtab.c
gdb/symtab.h

index ef2fc4a07e82562a2cbfa28b29082d1a68fc602f..5704d4388fb5a500c1e3f0c5552086f396472b53 100644 (file)
@@ -1,3 +1,26 @@
+2014-12-17  Doug Evans  <xdje42@gmail.com>
+
+       New parameter "debug symbol-lookup".
+       * NEWS: Mention it.
+       * cp-namespace.c (cp_lookup_symbol_imports_or_template): Add debug
+       output.
+       (cp_lookup_symbol_namespace, cp_lookup_symbol_nonlocal): Ditto.
+       (cp_lookup_nested_symbol): Ditto.
+       * language.c (language_lookup_primitive_type_by_name): Add debug
+       output.
+       * minsyms.c (lookup_minimal_symbol): Add debug output.
+       * objfiles.c (objfile_debug_name): Moved here, and renamed ...
+       * symfile-debug.c (debug_objfile_name): ... from here.  All callers
+       updated.
+       * objfiles.h (objfile_debug_name): Declare.
+       * symtab.h (symbol_lookup_debug): Declare.
+       * symtab.c (symbol_lookup_debug): New global.
+       (lookup_language_this): Add debug output.
+       (lookup_symbol_aux, lookup_symbol_in_block): Ditto.
+       (lookup_symbol_in_objfile_symtabs, lookup_symbol_via_quick_fns): Ditto.
+       (lookup_symbol_in_static_block, lookup_symbol_in_objfile): Ditto.
+       (_initialize_symtab): Add new parameter "debug symbol-lookup".
+
 2014-12-16  Doug Evans  <xdje42@gmail.com>
 
        * buildsym.c: Add comments describing how the buildsym machinery
index 639c50d20b5fa66425983f107b33cd32124f6254..955dd2390ac5486c9340acbe1185100b194ac821 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -84,6 +84,12 @@ compile file [-r|-raw] filename
   even in non-stop mode.  The "auto" mode has been removed, and "off"
   is now the default mode.
 
+* New options
+
+set debug symbol-lookup
+show debug symbol-lookup
+  Control display of debugging info regarding symbol lookup.
+
 * MI changes
 
   ** The -list-thread-groups command outputs an exit-code field for
index 06290a7bd896c5a3f38cdd440ce05088f6f81349..f17cd69ae0b77395b2140dcc3af08869dff210ce 100644 (file)
@@ -516,6 +516,16 @@ cp_lookup_symbol_imports_or_template (const char *scope,
                                      const domain_enum domain)
 {
   struct symbol *function = BLOCK_FUNCTION (block);
+  struct symbol *result;
+
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "cp_lookup_symbol_imports_or_template"
+                         " (%s, %s, %s, %s)\n",
+                         scope, name, host_address_to_string (block),
+                         domain_name (domain));
+    }
 
   if (function != NULL && SYMBOL_LANGUAGE (function) == language_cplus)
     {
@@ -524,13 +534,21 @@ cp_lookup_symbol_imports_or_template (const char *scope,
        {
          struct template_symbol *templ 
            = (struct template_symbol *) function;
-         struct symbol *result;
 
          result = search_symbol_list (name,
                                       templ->n_template_arguments,
                                       templ->template_arguments);
          if (result != NULL)
-           return result;
+           {
+             if (symbol_lookup_debug)
+               {
+                 fprintf_unfiltered (gdb_stdlog,
+                                     "cp_lookup_symbol_imports_or_template"
+                                     " (...) = %s\n",
+                                     host_address_to_string (result));
+               }
+             return result;
+           }
        }
 
       /* Search the template parameters of the function's defining
@@ -547,7 +565,6 @@ cp_lookup_symbol_imports_or_template (const char *scope,
 
          while (1)
            {
-             struct symbol *result;
              unsigned int prefix_len = cp_entire_prefix_len (name_copy);
 
              if (prefix_len == 0)
@@ -570,6 +587,13 @@ cp_lookup_symbol_imports_or_template (const char *scope,
              if (result != NULL)
                {
                  do_cleanups (cleanups);
+                 if (symbol_lookup_debug)
+                   {
+                     fprintf_unfiltered (gdb_stdlog,
+                                         "cp_lookup_symbol_imports_or_template"
+                                         " (...) = %s\n",
+                                         host_address_to_string (result));
+                   }
                  return result;
                }
            }
@@ -578,7 +602,15 @@ cp_lookup_symbol_imports_or_template (const char *scope,
        }
     }
 
-  return cp_lookup_symbol_via_imports (scope, name, block, domain, 1, 1);
+  result = cp_lookup_symbol_via_imports (scope, name, block, domain, 1, 1);
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "cp_lookup_symbol_imports_or_template (...) = %s\n",
+                         result != NULL
+                         ? host_address_to_string (result) : "NULL");
+    }
+  return result;
 }
 
  /* Searches for NAME in the current namespace, and by applying
@@ -593,12 +625,28 @@ cp_lookup_symbol_namespace (const char *scope,
                             const domain_enum domain)
 {
   struct symbol *sym;
-  
+
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "cp_lookup_symbol_namespace (%s, %s, %s, %s)\n",
+                         scope, name, host_address_to_string (block),
+                         domain_name (domain));
+    }
+
   /* First, try to find the symbol in the given namespace.  */
   sym = cp_lookup_symbol_in_namespace (scope, name,
                                       block, domain, 1);
   if (sym != NULL)
-    return sym;
+    {
+      if (symbol_lookup_debug)
+       {
+         fprintf_unfiltered (gdb_stdlog,
+                             "cp_lookup_symbol_namespace (...) = %s\n",
+                             host_address_to_string (sym));
+       }
+      return sym;
+    }
 
   /* Search for name in namespaces imported to this and parent
      blocks.  */
@@ -608,11 +656,24 @@ cp_lookup_symbol_namespace (const char *scope,
                                          domain, 0, 1);
 
       if (sym)
-       return sym;
+       {
+         if (symbol_lookup_debug)
+           {
+             fprintf_unfiltered (gdb_stdlog,
+                                 "cp_lookup_symbol_namespace (...) = %s\n",
+                                 host_address_to_string (sym));
+           }
+         return sym;
+       }
 
       block = BLOCK_SUPERBLOCK (block);
     }
 
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "cp_lookup_symbol_namespace (...) = NULL\n");
+    }
   return NULL;
 }
 
@@ -684,13 +745,35 @@ cp_lookup_symbol_nonlocal (const char *name,
   struct symbol *sym;
   const char *scope = block_scope (block);
 
-  sym = lookup_namespace_scope (name, block,
-                               domain, scope, 0);
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "cp_lookup_symbol_non_local"
+                         " (%s, %s (scope %s), %s)\n",
+                         name, host_address_to_string (block), scope,
+                         domain_name (domain));
+    }
+
+  sym = lookup_namespace_scope (name, block, domain, scope, 0);
   if (sym != NULL)
-    return sym;
+    {
+      if (symbol_lookup_debug)
+       {
+         fprintf_unfiltered (gdb_stdlog,
+                             "cp_lookup_symbol_nonlocal (...) = %s\n",
+                             host_address_to_string (sym));
+       }
+      return sym;
+    }
 
-  return cp_lookup_symbol_namespace (scope, name,
-                                    block, domain);
+  sym = cp_lookup_symbol_namespace (scope, name, block, domain);
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "cp_lookup_symbol_nonlocal (...) = %s\n",
+                         sym != NULL ? host_address_to_string (sym) : "NULL");
+    }
+  return sym;
 }
 
 /* Search through the base classes of PARENT_TYPE for a base class
@@ -798,6 +881,16 @@ cp_lookup_nested_symbol (struct type *parent_type,
 
   CHECK_TYPEDEF (parent_type);
 
+  if (symbol_lookup_debug)
+    {
+      const char *type_name = type_name_no_tag (saved_parent_type);
+
+      fprintf_unfiltered (gdb_stdlog,
+                         "cp_lookup_nested_symbol (%s, %s, %s)\n",
+                         type_name != NULL ? type_name : "unnamed",
+                         nested_name, host_address_to_string (block));
+    }
+
   switch (TYPE_CODE (parent_type))
     {
     case TYPE_CODE_STRUCT:
@@ -824,7 +917,15 @@ cp_lookup_nested_symbol (struct type *parent_type,
        char *concatenated_name;
 
        if (sym != NULL)
-         return sym;
+         {
+           if (symbol_lookup_debug)
+             {
+               fprintf_unfiltered (gdb_stdlog,
+                                   "cp_lookup_nested_symbol (...) = %s\n",
+                                   host_address_to_string (sym));
+             }
+           return sym;
+         }
 
        /* Now search all static file-level symbols.  We have to do this
           for things like typedefs in the class.  We do not try to
@@ -838,15 +939,37 @@ cp_lookup_nested_symbol (struct type *parent_type,
                 parent_name, nested_name);
        sym = lookup_static_symbol (concatenated_name, VAR_DOMAIN);
        if (sym != NULL)
-         return sym;
+         {
+           if (symbol_lookup_debug)
+             {
+               fprintf_unfiltered (gdb_stdlog,
+                                   "cp_lookup_nested_symbol (...) = %s\n",
+                                   host_address_to_string (sym));
+             }
+           return sym;
+         }
 
        /* If no matching symbols were found, try searching any
           base classes.  */
-       return find_symbol_in_baseclass (parent_type, nested_name, block);
+       sym = find_symbol_in_baseclass (parent_type, nested_name, block);
+       if (symbol_lookup_debug)
+         {
+           fprintf_unfiltered (gdb_stdlog,
+                               "cp_lookup_nested_symbol (...) = %s\n",
+                               sym != NULL
+                               ? host_address_to_string (sym) : "NULL");
+         }
+       return sym;
       }
 
     case TYPE_CODE_FUNC:
     case TYPE_CODE_METHOD:
+      if (symbol_lookup_debug)
+       {
+         fprintf_unfiltered (gdb_stdlog,
+                             "cp_lookup_nested_symbol (...) = NULL"
+                             " (func/method)\n");
+       }
       return NULL;
 
     default:
index 7dfaee04ca193f58dae1066648e831344f53d994..31fe79136901cd475af061a432785b7c83c9f12a 100644 (file)
@@ -1,3 +1,7 @@
+2014-12-17  Doug Evans  <xdje42@gmail.com>
+
+       * gdb.texinfo (Debugging Output): Document "debug symbol-lookup".
+
 2014-12-12  Phil Muldoon  <pmuldoon@redhat.com>
            Jan Kratochvil  <jan.kratochvil@redhat.com>
 
index 56a81f01940aa25b1ad8a6f9ea038253dda7e2a7..e086c33bb2b2472a97973b6c64fa98153b259119 100644 (file)
@@ -23186,6 +23186,14 @@ Turns on or off debugging messages for FR-V shared-library code.
 @item show debug solib-frv
 Display the current state of FR-V shared-library code debugging
 messages.
+@item set debug symbol-lookup
+@cindex symbol lookup
+Turns on or off display of debugging messages related to symbol lookup.
+The default is 0 (off).
+A value of 1 provides basic information.
+A value greater than 1 provides more verbose information.
+@item show debug symbol-lookup
+Show the current state of symbol lookup debugging messages.
 @item set debug symfile
 @cindex symbol file functions
 Turns on or off display of debugging messages related to symbol file functions.
index 83dd4d505cd84b808e619126d2ec6f578bce8195..8d476d398c1c5c4647a4fa96e6596270c0c888c5 100644 (file)
@@ -996,13 +996,31 @@ language_lookup_primitive_type_by_name (const struct language_defn *la,
                                              language_gdbarch_data);
   struct type *const *p;
 
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "language_lookup_primitive_type_by_name"
+                         " (%s, %s, %s)",
+                         la->la_name, host_address_to_string (gdbarch), name);
+    }
+
   for (p = ld->arch_info[la->la_language].primitive_type_vector;
        (*p) != NULL;
        p++)
     {
       if (strcmp (TYPE_NAME (*p), name) == 0)
-       return (*p);
+       {
+         if (symbol_lookup_debug)
+           {
+             fprintf_unfiltered (gdb_stdlog, " = %s\n",
+                                 host_address_to_string (*p));
+           }
+         return (*p);
+       }
     }
+
+  if (symbol_lookup_debug)
+    fprintf_unfiltered (gdb_stdlog, " = NULL\n");
   return (NULL);
 }
 
index 2463be441e0ab848fe76c306b96668912b084f1a..2a421fcf433ccec28bb65d5151266d4736bf7d66 100644 (file)
@@ -203,6 +203,14 @@ lookup_minimal_symbol (const char *name, const char *sfile,
             and the second over the demangled hash table.  */
         int pass;
 
+       if (symbol_lookup_debug)
+         {
+           fprintf_unfiltered (gdb_stdlog,
+                               "lookup_minimal_symbol (%s, %s, %s)\n",
+                               name, sfile != NULL ? sfile : "NULL",
+                               objfile_debug_name (objfile));
+         }
+
         for (pass = 1; pass <= 2 && found_symbol.minsym == NULL; pass++)
            {
             /* Select hash list according to pass.  */
@@ -282,13 +290,42 @@ lookup_minimal_symbol (const char *name, const char *sfile,
 
   /* External symbols are best.  */
   if (found_symbol.minsym != NULL)
-    return found_symbol;
+    {
+      if (symbol_lookup_debug)
+       {
+         fprintf_unfiltered (gdb_stdlog,
+                             "lookup_minimal_symbol (...) = %s"
+                             " (external)\n",
+                             host_address_to_string (found_symbol.minsym));
+       }
+      return found_symbol;
+    }
 
   /* File-local symbols are next best.  */
   if (found_file_symbol.minsym != NULL)
-    return found_file_symbol;
+    {
+      if (symbol_lookup_debug)
+       {
+         fprintf_unfiltered (gdb_stdlog,
+                             "lookup_minimal_symbol (...) = %s"
+                             " (file-local)\n",
+                             host_address_to_string
+                               (found_file_symbol.minsym));
+       }
+      return found_file_symbol;
+    }
 
   /* Symbols for shared library trampolines are next best.  */
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_minimal_symbol (...) = %s%s\n",
+                         trampoline_symbol.minsym != NULL
+                         ? host_address_to_string (trampoline_symbol.minsym)
+                         : "NULL",
+                         trampoline_symbol.minsym != NULL
+                         ? " (trampoline)" : "");
+    }
   return trampoline_symbol;
 }
 
index a5df30597c3a715aa75289a362630403976aa57b..4dcd2e1955903dcb98e9ac0ad6292e20940e926a 100644 (file)
@@ -1503,6 +1503,14 @@ objfile_name (const struct objfile *objfile)
   return objfile->original_name;
 }
 
+/* See objfiles.h.  */
+
+const char *
+objfile_debug_name (const struct objfile *objfile)
+{
+  return lbasename (objfile->original_name);
+}
+
 /* Provide a prototype to silence -Wmissing-prototypes.  */
 extern initialize_file_ftype _initialize_objfiles;
 
index a8883114fdfa9ba7307e5f1c975276677ebd9eba..084af39da8d4e9c3fcbd8c80ba07e7969a588527 100644 (file)
@@ -701,6 +701,10 @@ void set_objfile_per_bfd (struct objfile *obj);
 
 const char *objfile_name (const struct objfile *objfile);
 
+/* Return the name to print for OBJFILE in debugging messages.  */
+
+extern const char *objfile_debug_name (const struct objfile *objfile);
+
 /* Set the objfile's notion of the "main" name and language.  */
 
 extern void set_objfile_main_name (struct objfile *objfile,
index 8bca5b2adb12fc53bc15e738f360f0fffc2056b5..53c75619e4e5498b7ebc732384c60b4718c9754b 100644 (file)
@@ -59,14 +59,6 @@ symfile_debug_installed (struct objfile *objfile)
          && objfile_data (objfile, symfile_debug_objfile_data_key) != NULL);
 }
 
-/* Utility to return the name to print for OBJFILE.  */
-
-static const char *
-debug_objfile_name (const struct objfile *objfile)
-{
-  return lbasename (objfile->original_name);
-}
-
 /* Utility return the name to print for SYMTAB.  */
 
 static const char *
@@ -87,7 +79,7 @@ debug_qf_has_symbols (struct objfile *objfile)
   retval = debug_data->real_sf->qf->has_symbols (objfile);
 
   fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n",
-                   debug_objfile_name (objfile), retval);
+                   objfile_debug_name (objfile), retval);
 
   return retval;
 }
@@ -100,7 +92,7 @@ debug_qf_find_last_source_symtab (struct objfile *objfile)
   struct symtab *retval;
 
   fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   retval = debug_data->real_sf->qf->find_last_source_symtab (objfile);
 
@@ -117,7 +109,7 @@ debug_qf_forget_cached_source_info (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->qf->forget_cached_source_info (objfile);
 }
@@ -136,7 +128,7 @@ debug_qf_map_symtabs_matching_filename (struct objfile *objfile,
 
   fprintf_filtered (gdb_stdlog,
                    "qf->map_symtabs_matching_filename (%s, \"%s\", \"%s\", %s, %s)\n",
-                   debug_objfile_name (objfile), name,
+                   objfile_debug_name (objfile), name,
                    real_path ? real_path : NULL,
                    host_address_to_string (callback),
                    host_address_to_string (data));
@@ -161,7 +153,7 @@ debug_qf_lookup_symbol (struct objfile *objfile, int kind, const char *name,
 
   fprintf_filtered (gdb_stdlog,
                    "qf->lookup_symbol (%s, %d, \"%s\", %s)\n",
-                   debug_objfile_name (objfile), kind, name,
+                   objfile_debug_name (objfile), kind, name,
                    domain_name (domain));
 
   retval = debug_data->real_sf->qf->lookup_symbol (objfile, kind, name,
@@ -182,7 +174,7 @@ debug_qf_print_stats (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->qf->print_stats (objfile);
 }
@@ -194,7 +186,7 @@ debug_qf_dump (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->qf->dump (objfile);
 }
@@ -208,7 +200,7 @@ debug_qf_relocate (struct objfile *objfile,
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "qf->relocate (%s, %s, %s)\n",
-                   debug_objfile_name (objfile),
+                   objfile_debug_name (objfile),
                    host_address_to_string (new_offsets),
                    host_address_to_string (delta));
 
@@ -224,7 +216,7 @@ debug_qf_expand_symtabs_for_function (struct objfile *objfile,
 
   fprintf_filtered (gdb_stdlog,
                    "qf->expand_symtabs_for_function (%s, \"%s\")\n",
-                   debug_objfile_name (objfile), func_name);
+                   objfile_debug_name (objfile), func_name);
 
   debug_data->real_sf->qf->expand_symtabs_for_function (objfile, func_name);
 }
@@ -236,7 +228,7 @@ debug_qf_expand_all_symtabs (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->qf->expand_all_symtabs (objfile);
 }
@@ -250,7 +242,7 @@ debug_qf_expand_symtabs_with_fullname (struct objfile *objfile,
 
   fprintf_filtered (gdb_stdlog,
                    "qf->expand_symtabs_with_fullname (%s, \"%s\")\n",
-                   debug_objfile_name (objfile), fullname);
+                   objfile_debug_name (objfile), fullname);
 
   debug_data->real_sf->qf->expand_symtabs_with_fullname (objfile, fullname);
 }
@@ -270,7 +262,7 @@ debug_qf_map_matching_symbols (struct objfile *objfile,
 
   fprintf_filtered (gdb_stdlog,
                    "qf->map_matching_symbols (%s, \"%s\", %s, %d, %s, %s, %s, %s)\n",
-                   debug_objfile_name (objfile), name,
+                   objfile_debug_name (objfile), name,
                    domain_name (namespace), global,
                    host_address_to_string (callback),
                    host_address_to_string (data),
@@ -296,7 +288,7 @@ debug_qf_expand_symtabs_matching
 
   fprintf_filtered (gdb_stdlog,
                    "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",
-                   debug_objfile_name (objfile),
+                   objfile_debug_name (objfile),
                    host_address_to_string (file_matcher),
                    host_address_to_string (symbol_matcher),
                    search_domain_name (kind),
@@ -321,7 +313,7 @@ debug_qf_find_pc_sect_compunit_symtab (struct objfile *objfile,
 
   fprintf_filtered (gdb_stdlog,
                    "qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n",
-                   debug_objfile_name (objfile),
+                   objfile_debug_name (objfile),
                    host_address_to_string (msymbol.minsym),
                    hex_string (pc),
                    host_address_to_string (section),
@@ -350,7 +342,7 @@ debug_qf_map_symbol_filenames (struct objfile *objfile,
     objfile_data (objfile, symfile_debug_objfile_data_key);
   fprintf_filtered (gdb_stdlog,
                    "qf->map_symbol_filenames (%s, %s, %s, %d)\n",
-                   debug_objfile_name (objfile),
+                   objfile_debug_name (objfile),
                    host_address_to_string (fun),
                    host_address_to_string (data),
                    need_fullname);
@@ -391,7 +383,7 @@ debug_sym_get_probes (struct objfile *objfile)
 
   fprintf_filtered (gdb_stdlog,
                    "probes->sym_get_probes (%s) = %s\n",
-                   debug_objfile_name (objfile),
+                   objfile_debug_name (objfile),
                    host_address_to_string (retval));
 
   return retval;
@@ -411,7 +403,7 @@ debug_sym_new_init (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_new_init (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->sym_new_init (objfile);
 }
@@ -423,7 +415,7 @@ debug_sym_init (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_init (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->sym_init (objfile);
 }
@@ -435,7 +427,7 @@ debug_sym_read (struct objfile *objfile, int symfile_flags)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_read (%s, 0x%x)\n",
-                   debug_objfile_name (objfile), symfile_flags);
+                   objfile_debug_name (objfile), symfile_flags);
 
   debug_data->real_sf->sym_read (objfile, symfile_flags);
 }
@@ -447,7 +439,7 @@ debug_sym_read_psymbols (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_read_psymbols (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->sym_read_psymbols (objfile);
 }
@@ -459,7 +451,7 @@ debug_sym_finish (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_finish (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->sym_finish (objfile);
 }
@@ -472,7 +464,7 @@ debug_sym_offsets (struct objfile *objfile,
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_offsets (%s, %s)\n",
-                   debug_objfile_name (objfile),
+                   objfile_debug_name (objfile),
                    host_address_to_string (info));
 
   debug_data->real_sf->sym_offsets (objfile, info);
@@ -494,7 +486,7 @@ debug_sym_read_linetable (struct objfile *objfile)
     objfile_data (objfile, symfile_debug_objfile_data_key);
 
   fprintf_filtered (gdb_stdlog, "sf->sym_read_linetable (%s)\n",
-                   debug_objfile_name (objfile));
+                   objfile_debug_name (objfile));
 
   debug_data->real_sf->sym_read_linetable (objfile);
 }
@@ -510,7 +502,7 @@ debug_sym_relocate (struct objfile *objfile, asection *sectp, bfd_byte *buf)
 
   fprintf_filtered (gdb_stdlog,
                    "sf->sym_relocate (%s, %s, %s) = %s\n",
-                   debug_objfile_name (objfile),
+                   objfile_debug_name (objfile),
                    host_address_to_string (sectp),
                    host_address_to_string (buf),
                    host_address_to_string (retval));
index a95234fd782582333ecbbaa5594211a661f0f2d0..d64fdbd7de5b8d049211cf50d3d731cf61d46012 100644 (file)
@@ -105,6 +105,9 @@ struct main_info
 /* When non-zero, print debugging messages related to symtab creation.  */
 unsigned int symtab_create_debug = 0;
 
+/* When non-zero, print debugging messages related to symbol lookup.  */
+unsigned int symbol_lookup_debug = 0;
+
 /* Non-zero if a file may be known by two different basenames.
    This is the uncommon case, and significantly slows down gdb.
    Default set to "off" to not slow down the common case.  */
@@ -1313,6 +1316,16 @@ lookup_language_this (const struct language_defn *lang,
   if (lang->la_name_of_this == NULL || block == NULL)
     return NULL;
 
+  if (symbol_lookup_debug > 1)
+    {
+      struct objfile *objfile = lookup_objfile_from_block (block);
+
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_language_this (%s, %s (objfile %s))",
+                         lang->la_name, host_address_to_string (block),
+                         objfile_debug_name (objfile));
+    }
+
   while (block)
     {
       struct symbol *sym;
@@ -1320,6 +1333,13 @@ lookup_language_this (const struct language_defn *lang,
       sym = block_lookup_symbol (block, lang->la_name_of_this, VAR_DOMAIN);
       if (sym != NULL)
        {
+         if (symbol_lookup_debug > 1)
+           {
+             fprintf_unfiltered (gdb_stdlog, " = %s (%s, block %s)\n",
+                                 SYMBOL_PRINT_NAME (sym),
+                                 host_address_to_string (sym),
+                                 host_address_to_string (block));
+           }
          block_found = block;
          return sym;
        }
@@ -1328,6 +1348,8 @@ lookup_language_this (const struct language_defn *lang,
       block = BLOCK_SUPERBLOCK (block);
     }
 
+  if (symbol_lookup_debug > 1)
+    fprintf_unfiltered (gdb_stdlog, " = NULL\n");
   return NULL;
 }
 
@@ -1387,6 +1409,18 @@ lookup_symbol_aux (const char *name, const struct block *block,
   struct symbol *sym;
   const struct language_defn *langdef;
 
+  if (symbol_lookup_debug)
+    {
+      struct objfile *objfile = lookup_objfile_from_block (block);
+
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_aux (%s, %s (objfile %s), %s, %s)\n",
+                         name, host_address_to_string (block),
+                         objfile != NULL
+                         ? objfile_debug_name (objfile) : "NULL",
+                         domain_name (domain), language_str (language));
+    }
+
   /* Make sure we do something sensible with is_a_field_of_this, since
      the callers that set this parameter to some non-null value will
      certainly use it later.  If we don't set it, the contents of
@@ -1399,7 +1433,14 @@ lookup_symbol_aux (const char *name, const struct block *block,
 
   sym = lookup_local_symbol (name, block, domain, language);
   if (sym != NULL)
-    return sym;
+    {
+      if (symbol_lookup_debug)
+       {
+         fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
+                             host_address_to_string (sym));
+       }
+      return sym;
+    }
 
   /* If requested to do so by the caller and if appropriate for LANGUAGE,
      check to see if NAME is a field of `this'.  */
@@ -1430,7 +1471,14 @@ lookup_symbol_aux (const char *name, const struct block *block,
                   langdef->la_name_of_this);
 
          if (check_field (t, name, is_a_field_of_this))
-           return NULL;
+           {
+             if (symbol_lookup_debug)
+               {
+                 fprintf_unfiltered (gdb_stdlog,
+                                     "lookup_symbol_aux (...) = NULL\n");
+               }
+             return NULL;
+           }
        }
     }
 
@@ -1439,12 +1487,25 @@ lookup_symbol_aux (const char *name, const struct block *block,
 
   sym = langdef->la_lookup_symbol_nonlocal (name, block, domain);
   if (sym != NULL)
-    return sym;
+    {
+      if (symbol_lookup_debug)
+       {
+         fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
+                             host_address_to_string (sym));
+       }
+      return sym;
+    }
 
   /* Now search all static file-level symbols.  Not strictly correct,
      but more useful than an error.  */
 
-  return lookup_static_symbol (name, domain);
+  sym = lookup_static_symbol (name, domain);
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (...) = %s\n",
+                         sym != NULL ? host_address_to_string (sym) : "NULL");
+    }
+  return sym;
 }
 
 /* Check to see if the symbol is defined in BLOCK or its superiors.
@@ -1522,13 +1583,31 @@ lookup_symbol_in_block (const char *name, const struct block *block,
 {
   struct symbol *sym;
 
+  if (symbol_lookup_debug > 1)
+    {
+      struct objfile *objfile = lookup_objfile_from_block (block);
+
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_in_block (%s, %s (objfile %s), %s)",
+                         name, host_address_to_string (block),
+                         objfile_debug_name (objfile),
+                         domain_name (domain));
+    }
+
   sym = block_lookup_symbol (block, name, domain);
   if (sym)
     {
+      if (symbol_lookup_debug > 1)
+       {
+         fprintf_unfiltered (gdb_stdlog, " = %s\n",
+                             host_address_to_string (sym));
+       }
       block_found = block;
       return fixup_symbol_section (sym, NULL);
     }
 
+  if (symbol_lookup_debug > 1)
+    fprintf_unfiltered (gdb_stdlog, " = NULL\n");
   return NULL;
 }
 
@@ -1568,6 +1647,16 @@ lookup_symbol_in_objfile_symtabs (struct objfile *objfile, int block_index,
 
   gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
 
+  if (symbol_lookup_debug > 1)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_in_objfile_symtabs (%s, %s, %s, %s)",
+                         objfile_debug_name (objfile),
+                         block_index == GLOBAL_BLOCK
+                         ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
+                         name, domain_name (domain));
+    }
+
   ALL_OBJFILE_COMPUNITS (objfile, cust)
     {
       const struct blockvector *bv;
@@ -1579,11 +1668,19 @@ lookup_symbol_in_objfile_symtabs (struct objfile *objfile, int block_index,
       sym = block_lookup_symbol_primary (block, name, domain);
       if (sym)
        {
+         if (symbol_lookup_debug > 1)
+           {
+             fprintf_unfiltered (gdb_stdlog, " = %s (block %s)\n",
+                                 host_address_to_string (sym),
+                                 host_address_to_string (block));
+           }
          block_found = block;
          return fixup_symbol_section (sym, objfile);
        }
     }
 
+  if (symbol_lookup_debug > 1)
+    fprintf_unfiltered (gdb_stdlog, " = NULL\n");
   return NULL;
 }
 
@@ -1665,15 +1762,42 @@ lookup_symbol_via_quick_fns (struct objfile *objfile, int block_index,
 
   if (!objfile->sf)
     return NULL;
+
+  if (symbol_lookup_debug > 1)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_via_quick_fns (%s, %s, %s, %s)\n",
+                         objfile_debug_name (objfile),
+                         block_index == GLOBAL_BLOCK
+                         ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
+                         name, domain_name (domain));
+    }
+
   cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name, domain);
   if (cust == NULL)
-    return NULL;
+    {
+      if (symbol_lookup_debug > 1)
+       {
+         fprintf_unfiltered (gdb_stdlog,
+                             "lookup_symbol_via_quick_fns (...) = NULL\n");
+       }
+      return NULL;
+    }
 
   bv = COMPUNIT_BLOCKVECTOR (cust);
   block = BLOCKVECTOR_BLOCK (bv, block_index);
   sym = block_lookup_symbol (block, name, domain);
   if (!sym)
     error_in_psymtab_expansion (block_index, name, cust);
+
+  if (symbol_lookup_debug > 1)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_via_quick_fns (...) = %s (block %s)\n",
+                         host_address_to_string (sym),
+                         host_address_to_string (block));
+    }
+
   block_found = block;
   return fixup_symbol_section (sym, objfile);
 }
@@ -1734,11 +1858,32 @@ lookup_symbol_in_static_block (const char *name,
                               const domain_enum domain)
 {
   const struct block *static_block = block_static_block (block);
+  struct symbol *sym;
 
-  if (static_block != NULL)
-    return lookup_symbol_in_block (name, static_block, domain);
-  else
+  if (static_block == NULL)
     return NULL;
+
+  if (symbol_lookup_debug)
+    {
+      struct objfile *objfile = lookup_objfile_from_block (static_block);
+
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_in_static_block (%s, %s (objfile %s),"
+                         " %s)\n",
+                         name,
+                         host_address_to_string (block),
+                         objfile_debug_name (objfile),
+                         domain_name (domain));
+    }
+
+  sym = lookup_symbol_in_block (name, static_block, domain);
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_in_static_block (...) = %s\n",
+                         sym != NULL ? host_address_to_string (sym) : "NULL");
+    }
+  return sym;
 }
 
 /* Perform the standard symbol lookup of NAME in OBJFILE:
@@ -1752,14 +1897,41 @@ lookup_symbol_in_objfile (struct objfile *objfile, int block_index,
 {
   struct symbol *result;
 
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_in_objfile (%s, %s, %s, %s)\n",
+                         objfile_debug_name (objfile),
+                         block_index == GLOBAL_BLOCK
+                         ? "GLOBAL_BLOCK" : "STATIC_BLOCK",
+                         name, domain_name (domain));
+    }
+
   result = lookup_symbol_in_objfile_symtabs (objfile, block_index,
                                             name, domain);
-  if (result == NULL)
+  if (result != NULL)
     {
-      result = lookup_symbol_via_quick_fns (objfile, block_index,
-                                           name, domain);
+      if (symbol_lookup_debug)
+       {
+         fprintf_unfiltered (gdb_stdlog,
+                             "lookup_symbol_in_objfile (...) = %s"
+                             " (in symtabs)\n",
+                             host_address_to_string (result));
+       }
+      return result;
     }
 
+  result = lookup_symbol_via_quick_fns (objfile, block_index,
+                                       name, domain);
+  if (symbol_lookup_debug)
+    {
+      fprintf_unfiltered (gdb_stdlog,
+                         "lookup_symbol_in_objfile (...) = %s%s\n",
+                         result != NULL
+                         ? host_address_to_string (result)
+                         : "NULL",
+                         result != NULL ? " (via quick fns)" : "");
+    }
   return result;
 }
 
@@ -5252,5 +5424,13 @@ A value greater than 1 provides more verbose information."),
                             NULL,
                             &setdebuglist, &showdebuglist);
 
+  add_setshow_zuinteger_cmd ("symbol-lookup", no_class, &symbol_lookup_debug,
+                          _("\
+Set debugging of symbol lookup."), _("\
+Show debugging of symbol lookup."), _("\
+When enabled (non-zero), symbol lookups are logged."),
+                          NULL, NULL,
+                          &setdebuglist, &showdebuglist);
+
   observer_attach_executable_changed (symtab_observer_executable_changed);
 }
index c9b38d276668a6a1c30e7137178977a3fc214e24..1446201598854fbf8b956961765bb360f63e006f 100644 (file)
@@ -1505,6 +1505,8 @@ struct objfile *lookup_objfile_from_block (const struct block *block);
 
 extern unsigned int symtab_create_debug;
 
+extern unsigned int symbol_lookup_debug;
+
 extern int basenames_may_differ;
 
 int compare_filenames_for_search (const char *filename,