From: Kaushik Srenevasan Date: Tue, 13 Mar 2012 07:07:10 +0000 (-0700) Subject: GDB change for dynamically generated code (tiny change) X-Git-Tag: emacs-pretest-24.0.05~85^2~33 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4a07df36a52547d272107151e9251ba96cb37224;p=emacs.git 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 --- 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)