Subject: bug#23720: 25.0.94; Issues with GUD (gdb-mi) after upgrade from Emacs 23 to 24/25

From: Eli Zaretskii <[email-masked]>
Date: Fri, 10 Jun 2016 12:00:07 +0300

> Cc: [email-masked]
> From: Guilhem Bichot <[email-masked]>
> Date: Thu, 9 Jun 2016 09:42:23 +0200
> 
> > diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
> > index 5ad101d..195acaf 100644
> > --- a/lisp/progmodes/gdb-mi.el
> > +++ b/lisp/progmodes/gdb-mi.el
> > @@ -2488,7 +2488,9 @@ gdb-stopped
> >     ;; Reason is available with target-async only
> >     (let* ((result (gdb-json-string output-field))
> >            (reason (bindat-get-field result 'reason))
> > -         (thread-id (bindat-get-field result 'thread-id)))
> > +         (thread-id (bindat-get-field result 'thread-id))
> > +         (retval (bindat-get-field result 'return-value))
> > +         (varnum (bindat-get-field result 'gdb-result-var)))
> >
> >       ;; -data-list-register-names needs to be issued for any stopped
> >       ;; thread
> > @@ -2514,6 +2516,11 @@ gdb-stopped
> >       (if (string-equal reason "exited-normally")
> >   	(setq gdb-active-process nil))
> >
> > +    (when (and retval varnum)
> > +      (setq gdb-filter-output
> > +            (concat gdb-filter-output
> > +                    (format "Value returned is %s = %s\n" varnum retval))))
> > +
> >       ;; Select new current thread.
> >
> >       ;; Don't switch if we have no reasons selected
> 
> yes, it works! thanks!
> Please, could you consider incorporating this into the next releases?

It's too late for the next release, which is expected in a few weeks.
Besides, I've just discovered that sometimes the "Value returned"
message as already produced by GDB/MI, so my naïve change caused it to
be produced twice.  I pushed a fixed version to the master branch.