Subject: 24.0.90; M-x gdb should check whether target supports non-stop mode
From: Ken Brown <[email-masked]>
To: [email-masked]
Date: Wed, 26 Oct 2011 14:24:56 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

If non-stop mode is set, M-x gdb tries to set the target for running in 
non-stop mode; see line 883 of gdb-mi.el.  But there's no check to see 
if that succeeded.  If it didn't, any attempt to run the program results 
in the error message "The target does not support running in non-stop 
mode.", which might mystify many users.

This is a problem on Cygwin, where apparently no targets support running 
in non-stop mode (as far as I can tell), and it may also be a problem on 
Windows; see

   http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6072

To reproduce:

emacs -Q
M-x gdb RET
<delete any file name in the prompt, if necessary, and enter one that 
does not support running in non-stop mode>

The following patch fixes it.  OK to apply?

=== modified file 'lisp/progmodes/gdb-mi.el'
--- lisp/progmodes/gdb-mi.el    2011-10-06 16:11:38 +0000
+++ lisp/progmodes/gdb-mi.el    2011-10-26 16:44:38 +0000
@@ -881,8 +881,17 @@
         (setq gdb-version "pre-7.0"))
      (setq gdb-version "7.0+")
      (gdb-input (list "-gdb-set target-async 1" 'ignore))
+    (gdb-input (list "-list-target-features" 'gdb-check-target-async))
      (gdb-input (list "-enable-pretty-printing" 'ignore))))

+(defun gdb-check-target-async ()
+  (goto-char (point-min))
+  (unless (re-search-forward "async" nil t
+    (message
+     "Target doesn't support non-stop mode.  Turning it off.")
+    (setq gdb-non-stop nil)
+    (gdb-input (list "-gdb-set non-stop 0" 'ignore))))
+
  (defvar gdb-define-alist nil "Alist of #define directives for GUD 
tooltips.")

  (defun gdb-create-define-alist ()