[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] GUD-MI's disassembly buffer should follow $PC in the absence of
From: |
Kaushik Srenevasan |
Subject: |
[PATCH] GUD-MI's disassembly buffer should follow $PC in the absence of debug information. |
Date: |
Mon, 23 Jan 2012 22:46:47 -0800 |
All,
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)
- [PATCH] GUD-MI's disassembly buffer should follow $PC in the absence of debug information.,
Kaushik Srenevasan <=