diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c536c732f4..1cfc3ee661 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2009-05-23  Eli Zaretskii  <eliz@gnu.org>
+
+	* symmisc.c (dump_symtab): Switch the current language to
+	the language of the symtab we are dumping only if the symtab's
+	language is neither language_auto nor language_unknown.
+
+	* coffread.c (coff_symtab_read): Set language_minimal as the
+	language for the "_globals_" pseudo-file.
+
 2009-05-22  Pedro Alves  <pedro@codesourcery.com>
 
 	* target.h (struct section_table): Rename to ...
diff --git a/gdb/coffread.c b/gdb/coffread.c
index 6059d68b4c..c5b5722c7f 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -758,6 +758,11 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
 	    coff_end_symtab (objfile);
 
 	  coff_start_symtab ("_globals_");
+	  /* coff_start_symtab will set the language of this symtab to
+	     language_unknown, since such a ``file name'' is not
+	     recognized.  Override that with the minimal language to
+	     allow printing values in this symtab.  */
+	  current_subfile->language = language_minimal;
 	  complete_symtab ("_globals_", 0, 0);
 	  /* done with all files, everything from here on out is globals */
 	}
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 2e25c896df..96fabc3c04 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -496,16 +496,23 @@ static void
 dump_symtab (struct objfile *objfile, struct symtab *symtab,
 	     struct ui_file *outfile)
 {
-  enum language saved_lang;
-
   /* Set the current language to the language of the symtab we're dumping
      because certain routines used during dump_symtab() use the current
-     language to print an image of the symbol.  We'll restore it later.  */
-  saved_lang = set_language (symtab->language);
+     language to print an image of the symbol.  We'll restore it later.
+     But use only real languages, not placeholders.  */
+  if (symtab->language != language_unknown
+      && symtab->language != language_auto)
+    {
+      enum language saved_lang;
 
-  dump_symtab_1 (objfile, symtab, outfile);
+      saved_lang = set_language (symtab->language);
 
-  set_language (saved_lang);
+      dump_symtab_1 (objfile, symtab, outfile);
+
+      set_language (saved_lang);
+    }
+  else
+    dump_symtab_1 (objfile, symtab, outfile);
 }
 
 void