Subject: bug#10597: closed (Re: bug#10597: [PATCH] GUD-MI's disassembly buffer should follow $PC in the absence of debug information.)

From: [email-masked] (GNU bug Tracking System)
Date: Tue, 13 Mar 2012 07:41:03 +0000

Your bug report

#10597: [PATCH] GUD-MI's disassembly buffer should follow $PC in the absence of debug information.

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
10597: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10597
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#10597: [PATCH] GUD-MI's disassembly buffer should follow $PC in the absence of debug information.
From: Glenn Morris <[email-masked]>
To: [email-masked]
Date: Tue, 13 Mar 2012 03:10:29 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 24.0.95

Thanks; applied.
It would be great if you could also suggest ChangeLog entries for any
future changes.
Also, we'll need a copyright assignment to accept any further changes of
more than a few lines total from you. It's a straightforward procedure.
Let me know off-list if you want to, and I can send you the form.

Subject: [PATCH] GUD-MI's disassembly buffer should follow $PC in the absence of debug information.
From: Kaushik Srenevasan <[email-masked]>
To: [email-masked]
Date: Tue, 24 Jan 2012 22:53:15 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Package: emacs
Tags: patch
Severity: wishlist

GUD-MI's disassembly buffer only works when the current frame has debug
information. While debugging dynamically generated code it'd be useful
to simply follow the program counter. I understand that newer GDBs
expose an API that lets a JIT compiler register debug information for
dynamically generated code, but JITs typically only do so for real
functions. So, having the disassembly buffer follow $PC would still be
useful while stepping through dynamically generated, shorter sequences
of code (like call stubs, inline caches etc.). 

The latest GDB (7.4.50.20120122-cvs) does this in its TUI mode while my
stable GDB's (7.0.1-debian) behavior is the same as Emacs 23 GUD.

Please review and merge.

         Thanks,
            -Kaushik
=== modified file 'lisp/progmodes/gdb-mi.el'
--- lisp/progmodes/gdb-mi.el    2012-01-05 09:46:05 +0000
+++ lisp/progmodes/gdb-mi.el    2012-01-24 05:13:10 +0000
@@ -3259,8 +3259,12 @@
   (let* ((frame (gdb-current-buffer-frame))
          (file (bindat-get-field frame 'fullname))
          (line (bindat-get-field frame 'line)))
-    (when file
-      (format "-data-disassemble -f %s -l %s -n -1 -- 0" file line)))
+    (if file
+      (format "-data-disassemble -f %s -l %s -n -1 -- 0" file line)
+    ;; If we're unable to get a file name / line for $PC, simply
+    ;; follow $PC, disassembling the next 10 (x ~15 (on IA) ==
+    ;; 150 bytes) instructions.
+    "-data-disassemble -s $pc -e \"$pc + 150\" -- 0"))
   gdb-disassembly-handler
   ;; We update disassembly only after we have actual frame information
   ;; about all threads, so no there's `update' signal in this list
@@ -3319,8 +3323,12 @@
       (gdb-table-add-row table
                          (list
                           (bindat-get-field instr 'address)
-                          (apply #'format "<%s+%s>:"
-                                 (gdb-get-many-fields instr 'func-name 'offset))
+                          (let
+                              ((func-name (bindat-get-field instr 'func-name))
+                               (offset (bindat-get-field instr 'offset)))
+                            (if func-name
+                                (format "<%s+%s>:" func-name offset)
+                              ""))
                           (bindat-get-field instr 'inst)))
       (when (string-equal (bindat-get-field instr 'address)
                           address)