diff --git a/gdb/symtab.c b/gdb/symtab.c
index 54e4be4..85eaf10 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -18,6 +18,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include <stdarg.h>
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "gdbcore.h"
@@ -1264,6 +1265,26 @@ demangle_for_lookup (const char *name, enum language lang,
   return cleanup;
 }
 
+extern void log_call (const char *fmt, ...);
+
+void
+log_call (const char *fmt, ...)
+{
+  static FILE *f;
+  va_list args;
+
+  if (f == NULL)
+    f = fopen ("/tmp/gdb-call.log", "a");
+  if (f == NULL)
+    abort ();
+
+  va_start (args, fmt);
+  vfprintf (f, fmt, args);
+  va_end (args);
+  fputc ('\n', f);
+  fflush (f);
+}
+
 /* See symtab.h.
 
    This function (or rather its subordinates) have a bunch of loops and
@@ -1310,6 +1331,8 @@ struct symbol *
 lookup_language_this (const struct language_defn *lang,
 		      const struct block *block)
 {
+  log_call ("lookup_language_this (...)");
+
   if (lang->la_name_of_this == NULL || block == NULL)
     return NULL;
 
@@ -1387,6 +1410,8 @@ lookup_symbol_aux (const char *name, const struct block *block,
   struct symbol *sym;
   const struct language_defn *langdef;
 
+  log_call ("lookup_symbol_aux (%s, ...)", name);
+
   /* 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
@@ -1458,6 +1483,8 @@ lookup_local_symbol (const char *name, const struct block *block,
   struct symbol *sym;
   const struct block *static_block = block_static_block (block);
   const char *scope = block_scope (block);
+
+  log_call ("lookup_local_symbol (%s, ...)", name);
   
   /* Check if either no block is specified or it's a global block.  */
 
@@ -1522,6 +1549,8 @@ lookup_symbol_in_block (const char *name, const struct block *block,
 {
   struct symbol *sym;
 
+  log_call ("lookup_symbol_in_block (%s, ...)", name);
+
   sym = block_lookup_symbol (block, name, domain);
   if (sym)
     {
@@ -1541,6 +1570,8 @@ lookup_global_symbol_from_objfile (struct objfile *main_objfile,
 {
   struct objfile *objfile;
 
+  log_call ("lookup_global_symbol_from_objfile (%s, ...)", name);
+
   for (objfile = main_objfile;
        objfile;
        objfile = objfile_separate_debug_iterate (main_objfile, objfile))
@@ -1568,6 +1599,8 @@ lookup_symbol_in_objfile_symtabs (struct objfile *objfile, int block_index,
 
   gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
 
+  log_call ("lookup_symbol_in_objfile_symtabs (%s, ...)", name);
+
   ALL_OBJFILE_COMPUNITS (objfile, cust)
     {
       const struct blockvector *bv;
@@ -1607,6 +1640,8 @@ lookup_symbol_in_objfile_from_linkage_name (struct objfile *objfile,
 						 &modified_name);
   struct objfile *main_objfile, *cur_objfile;
 
+  log_call ("lookup_symbol_in_objfile_from_linkage_name (%s, ...)", linkage_name);
+
   if (objfile->separate_debug_objfile_backlink)
     main_objfile = objfile->separate_debug_objfile_backlink;
   else
@@ -1663,6 +1698,8 @@ lookup_symbol_via_quick_fns (struct objfile *objfile, int block_index,
   const struct block *block;
   struct symbol *sym;
 
+  log_call ("lookup_symbol_via_quick_fns (%s, ...)", name);
+
   if (!objfile->sf)
     return NULL;
   cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name, domain);
@@ -1719,6 +1756,8 @@ basic_lookup_symbol_nonlocal (const char *name,
      the current objfile.  Searching the current objfile first is useful
      for both matching user expectations as well as performance.  */
 
+  log_call ("basic_lookup_symbol_nonlocal (%s, ...)", name);
+
   sym = lookup_symbol_in_static_block (name, block, domain);
   if (sym != NULL)
     return sym;
@@ -1735,6 +1774,8 @@ lookup_symbol_in_static_block (const char *name,
 {
   const struct block *static_block = block_static_block (block);
 
+  log_call ("lookup_symbol_in_static_block (%s, ...)", name);
+
   if (static_block != NULL)
     return lookup_symbol_in_block (name, static_block, domain);
   else
@@ -1752,6 +1793,8 @@ lookup_symbol_in_objfile (struct objfile *objfile, int block_index,
 {
   struct symbol *result;
 
+  log_call ("lookup_symbol_in_objfile (%s, ...)", name);
+
   result = lookup_symbol_in_objfile_symtabs (objfile, block_index,
 					     name, domain);
   if (result == NULL)
@@ -1771,6 +1814,8 @@ lookup_static_symbol (const char *name, const domain_enum domain)
   struct objfile *objfile;
   struct symbol *result;
 
+  log_call ("lookup_static_symbol (%s, ...)", name);
+
   ALL_OBJFILES (objfile)
     {
       result = lookup_symbol_in_objfile (objfile, STATIC_BLOCK, name, domain);
@@ -1829,6 +1874,8 @@ lookup_global_symbol (const char *name,
   struct objfile *objfile = NULL;
   struct global_sym_lookup_data lookup_data;
 
+  log_call ("lookup_global_symbol (%s, ...)", name);
+
   /* Call library-specific lookup procedure.  */
   objfile = lookup_objfile_from_block (block);
   if (objfile != NULL)
