From 4a07df36a52547d272107151e9251ba96cb37224 Mon Sep 17 00:00:00 2001 From: Kaushik Srenevasan Date: Tue, 13 Mar 2012 00:07:10 -0700 Subject: [PATCH] GDB change for dynamically generated code (tiny change) 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 | 6 ++++++ lisp/progmodes/gdb-mi.el | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0528edaf206..bd0e6f865cd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-03-13 Kaushik Srenevasan (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 (tiny change) * calendar/icalendar.el (icalendar-export-file, icalendar-import-file): diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el index 8ea255e49dd..89450cd2276 100644 --- a/lisp/progmodes/gdb-mi.el +++ b/lisp/progmodes/gdb-mi.el @@ -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) -- 2.39.5