* buildsym.c (end_symtab): Document that end_symtab can return
authorFred Fish <fnf@specifix.com>
Wed, 12 Aug 1992 18:17:48 +0000 (18:17 +0000)
committerFred Fish <fnf@specifix.com>
Wed, 12 Aug 1992 18:17:48 +0000 (18:17 +0000)
  NULL under non-error conditions.
  * dwarfread.c (read_file_scope):  Guard against dereferencing NULL
  returned from end_symtab for empty compilation units.

gdb/ChangeLog
gdb/buildsym.c
gdb/dwarfread.c

index 54df4ab94fd80017fa07c8b57f200d70c8fa127b..f707ab8c7b9cf8a02b82f3bfc3b4f1416a9cbd1e 100644 (file)
@@ -1,3 +1,10 @@
+Wed Aug 12 11:14:58 1992  Fred Fish  (fnf@cygnus.com)
+
+       * buildsym.c (end_symtab):  Document that end_symtab can return
+       NULL under non-error conditions.
+       * dwarfread.c (read_file_scope):  Guard against dereferencing NULL
+       returned from end_symtab for empty compilation units.
+
 Tue Aug 11 02:49:39 1992  John Gilmore  (gnu at cygnus.com)
 
        * am29k-tdep.c:  Lint from DECstation compiler.
index e0f69cddc61e539ba415e415e656942a67413ec4..566a66f860ad83a50626e119668121c062e15f1e 100644 (file)
@@ -549,7 +549,14 @@ start_symtab (name, dirname, start_addr)
    (creating struct block's for them), then make the struct symtab
    for that file and put it in the list of all such.
 
-   END_ADDR is the address of the end of the file's text.  */
+   END_ADDR is the address of the end of the file's text.
+
+   Note that it is possible for end_symtab() to return NULL.  In particular,
+   for the DWARF case at least, it will return NULL when it finds a
+   compilation unit that has exactly one DIE, a TAG_compile_unit DIE.  This
+   can happen when we link in an object file that was compiled from an empty
+   source file.  Returning NULL is probably not the correct thing to do,
+   because then gdb will never know about this empty file (FIXME). */
 
 struct symtab *
 end_symtab (end_addr, sort_pending, sort_linevec, objfile)
index c16c21ac70fb401c832064ca8ba85d2fcb1fa7bf..fcca11c72f5651d145df7626f02e64ba074f8dd3 100644 (file)
@@ -1662,19 +1662,22 @@ read_file_scope (dip, thisdie, enddie, objfile)
   decode_line_numbers (lnbase);
   process_dies (thisdie + dip -> die_length, enddie, objfile);
   symtab = end_symtab (dip -> at_high_pc, 0, 0, objfile);
-  /* FIXME:  The following may need to be expanded for other languages */
-  switch (dip -> at_language)
+  if (symtab != NULL)
     {
-      case LANG_C89:
-      case LANG_C:
-       symtab -> language = language_c;
-       break;
-      case LANG_C_PLUS_PLUS:
-       symtab -> language = language_cplus;
-       break;
-      default:
-       ;
-    }
+      /* FIXME:  The following may need to be expanded for other languages */
+      switch (dip -> at_language)
+       {
+         case LANG_C89:
+         case LANG_C:
+           symtab -> language = language_c;
+           break;
+         case LANG_C_PLUS_PLUS:
+           symtab -> language = language_cplus;
+           break;
+         default:
+           ;
+       }
+    }      
   do_cleanups (back_to);
   utypes = NULL;
   numutypes = 0;