]> code.delx.au - gnu-emacs/commitdiff
GDB change for dynamically generated code (tiny change)
authorKaushik Srenevasan <ksrenevasan@gmail.com>
Tue, 13 Mar 2012 07:07:10 +0000 (00:07 -0700)
committerGlenn Morris <rgm@gnu.org>
Tue, 13 Mar 2012 07:07:10 +0000 (00:07 -0700)
Ref: http://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00753.html

* lisp/progmodes/gdb-mi.el (gdb-invalidate-disassembly):
For dynamically generated code, follow $PC.
(gdb-disassembly-handler-custom): Handle no function name case.

Fixes: debbugs:10597
lisp/ChangeLog
lisp/progmodes/gdb-mi.el

index 0528edaf20680f19e38c012f0613c6850306fe96..bd0e6f865cd6ee1f08b441afb605340d34d09d56 100644 (file)
@@ -1,3 +1,9 @@
+2012-03-13  Kaushik Srenevasan  <ksrenevasan@gmail.com>  (tiny change)
+
+       * progmodes/gdb-mi.el (gdb-invalidate-disassembly):
+       For dynamically generated code, follow $PC.
+       (gdb-disassembly-handler-custom): Handle no function name case.
+
 2012-03-13  Tim Landscheidt  <tim@tim-landscheidt.de>  (tiny change)
 
        * calendar/icalendar.el (icalendar-export-file, icalendar-import-file):
index 8ea255e49ddf410e58e230b51a990a173d62532c..89450cd22766744ed50a45d9a2d8f0a13bebfc17 100644 (file)
@@ -3269,8 +3269,12 @@ DOC is an optional documentation string."
   (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
@@ -3329,8 +3333,12 @@ DOC is an optional documentation string."
       (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)