summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/Makefile.in2
-rw-r--r--gdb/macroscope.c43
3 files changed, 40 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1b36ba8c575..e4def3b6739 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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).
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index ab9a33b1065..5c95965bbf9 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -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)
diff --git a/gdb/macroscope.c b/gdb/macroscope.c
index 083dc1f4e4a..b482068637c 100644
--- a/gdb/macroscope.c
+++ b/gdb/macroscope.c
@@ -27,12 +27,13 @@
#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;
}