* macroscope.c: #include "complaints.h".
authorJim Blandy <jimb@codesourcery.com>
Thu, 7 Nov 2002 20:43:22 +0000 (20:43 +0000)
committerJim Blandy <jimb@codesourcery.com>
Thu, 7 Nov 2002 20:43:22 +0000 (20:43 +0000)
(sal_macro_scope): Cope with filenames that appear in the symtabs,
but not in the macro table.
* Makefile.in (macroscope.o): Record dependency.

gdb/ChangeLog
gdb/Makefile.in
gdb/macroscope.c

index 1b36ba8c575068936f53cbbbf6e812ef922e84ff..e4def3b6739c38924149462a58f6cb58c573ed5f 100644 (file)
@@ -1,3 +1,10 @@
+2002-11-07  Jim Blandy  <jimb@redhat.com>
+
+       * macroscope.c: #include "complaints.h".
+       (sal_macro_scope): Cope with filenames that appear in the symtabs,
+       but not in the macro table.
+       * Makefile.in (macroscope.o): Record dependency.
+
 2002-11-07  Joel Brobecker  <brobecker@gnat.com>
 
        * PROBLEMS: Document gdb/816 (unable to read core file on alpha-osf).
index ab9a33b1065d50abad53f2096341e78ccd9a676a..5c95965bbf9269a826546119fc58adcb6ed72e48 100644 (file)
@@ -1871,7 +1871,7 @@ macrocmd.o: macrocmd.c $(defs_h) $(macrotab_h) $(macroexp_h) $(macroscope_h) \
 macroexp.o: macroexp.c $(defs_h) $(gdb_obstack_h) $(bcache_h) $(macrotab_h) \
        $(macroexp_h) $(gdb_assert_h)
 macroscope.o: macroscope.c $(defs_h) $(macroscope_h) $(symtab_h) $(target_h) \
-       $(frame_h) $(inferior_h) $(source_h)
+       $(frame_h) $(inferior_h) $(source_h) $(complaints_h)
 macrotab.o: macrotab.c $(defs_h) $(gdb_obstack_h) $(splay_tree_h) \
        $(symtab_h) $(symfile_h) $(objfiles_h) $(macrotab_h) $(gdb_assert_h) \
        $(bcache_h) $(complaints_h)
index 083dc1f4e4a818e15b5730e6285abdeaf87a3299..b482068637cd05a4c53c1de26a8ad51bf62ffc9c 100644 (file)
 #include "target.h"
 #include "frame.h"
 #include "inferior.h"
+#include "complaints.h"
 
 
 struct macro_scope *
 sal_macro_scope (struct symtab_and_line sal)
 {
-  struct macro_source_file *main;
+  struct macro_source_file *main, *inclusion;
   struct macro_scope *ms;
 
   if (! sal.symtab
@@ -42,17 +43,37 @@ sal_macro_scope (struct symtab_and_line sal)
   ms = (struct macro_scope *) xmalloc (sizeof (*ms));
 
   main = macro_main (sal.symtab->macro_table);
-  ms->file = macro_lookup_inclusion (main, sal.symtab->filename);
-
-  if (! ms->file)
-    internal_error
-      (__FILE__, __LINE__,
-       "\n"
-       "the symtab `%s' refers to a preprocessor macro table which doesn't\n"
-       "have any record of processing a file by that name.\n",
-       sal.symtab->filename);
+  inclusion = macro_lookup_inclusion (main, sal.symtab->filename);
 
-  ms->line = sal.line;
+  if (inclusion)
+    {
+      ms->file = inclusion;
+      ms->line = sal.line;
+    }
+  else
+    {
+      /* There are, unfortunately, cases where a compilation unit can
+         have a symtab for a source file that doesn't appear in the
+         macro table.  For example, at the moment, Dwarf doesn't have
+         any way in the .debug_macinfo section to describe the effect
+         of #line directives, so if you debug a YACC parser you'll get
+         a macro table which only mentions the .c files generated by
+         YACC, but symtabs that mention the .y files consumed by YACC.
+
+         In the long run, we should extend the Dwarf macro info
+         representation to handle #line directives, and get GCC to
+         emit it.
+
+         For the time being, though, we'll just treat these as
+         occurring at the end of the main source file.  */
+      ms->file = main;
+      ms->line = -1;
+
+      complaint (&symfile_complaints,
+                 "symtab found for `%s', but that file\n"
+                 "is not covered in the compilation unit's macro information",
+                 sal.symtab->filename);
+    }
 
   return ms;
 }