diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1d40c3007c1..620d157caed 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2006-05-05  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* mi/mi-main.c (captured_mi_execute_command): Check the return
+	value of -interpreter-exec.
+
 2006-05-03  Vladimir Prus  <ghost@cs.msu.su>
 
         * varobj.c (c_value_of_variable): Ignore top-level references.
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index 213f97af720..c798c90b8fb 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -1107,23 +1107,37 @@ captured_mi_execute_command (struct ui_out *uiout, void *data)
 	/* Call the "console" interpreter.  */
 	argv[0] = "console";
 	argv[1] = context->command;
-	mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
+	args->rc = mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
 
-	/* If we changed interpreters, DON'T print out anything. */
+	/* If we changed interpreters, DON'T print out anything.  */
 	if (current_interp_named_p (INTERP_MI)
 	    || current_interp_named_p (INTERP_MI1)
 	    || current_interp_named_p (INTERP_MI2)
 	    || current_interp_named_p (INTERP_MI3))
 	  {
-	    /* print the result */
-	    /* FIXME: Check for errors here. */
-	    fputs_unfiltered (context->token, raw_stdout);
-	    fputs_unfiltered ("^done", raw_stdout);
-	    mi_out_put (uiout, raw_stdout);
-	    mi_out_rewind (uiout);
-	    fputs_unfiltered ("\n", raw_stdout);
-	    args->action = EXECUTE_COMMAND_DISPLAY_PROMPT;
-	    args->rc = MI_CMD_DONE;
+	    if (args->rc == MI_CMD_DONE)
+	      {
+		fputs_unfiltered (context->token, raw_stdout);
+		fputs_unfiltered ("^done", raw_stdout);
+		mi_out_put (uiout, raw_stdout);
+		mi_out_rewind (uiout);
+		fputs_unfiltered ("\n", raw_stdout);
+		args->action = EXECUTE_COMMAND_DISPLAY_PROMPT;
+	      }
+	    else if (args->rc == MI_CMD_ERROR)
+	      {
+		if (mi_error_message)
+		  {
+		    fputs_unfiltered (context->token, raw_stdout);
+		    fputs_unfiltered ("^error,msg=\"", raw_stdout);
+		    fputstr_unfiltered (mi_error_message, '"', raw_stdout);
+		    xfree (mi_error_message);
+		    fputs_unfiltered ("\"\n", raw_stdout);
+		  }
+		mi_out_rewind (uiout);
+	      }
+	    else
+	      mi_out_rewind (uiout);
 	  }
 	break;
       }