From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Kaushik Srenevasan Newsgroups: gmane.emacs.bugs Subject: bug#10597: [PATCH] GUD-MI's disassembly buffer should follow $PC in the absence of debug information. Date: Tue, 24 Jan 2012 22:53:15 -0800 Message-ID: <1327474395.11160.4.camel@garuda3.sysenter> Reply-To: ksrenevasan@gmail.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-CxfemwgPJHrQe9wrbG/H" X-Trace: dough.gmane.org 1327478895 25675 80.91.229.12 (25 Jan 2012 08:08:15 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 25 Jan 2012 08:08:15 +0000 (UTC) To: 10597@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Jan 25 09:08:08 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Rpxtn-0006jy-Qg for geb-bug-gnu-emacs@m.gmane.org; Wed, 25 Jan 2012 09:08:08 +0100 Original-Received: from localhost ([::1]:46562 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rpxtn-00073I-7q for geb-bug-gnu-emacs@m.gmane.org; Wed, 25 Jan 2012 03:08:07 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:44777) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RpxtP-00072w-6i for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2012 03:07:47 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RpxtJ-0007Rq-JP for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2012 03:07:43 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:37139) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RpxtJ-0007Rm-FZ for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2012 03:07:37 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Rpxti-00037F-5l for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2012 03:08:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Kaushik Srenevasan Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 25 Jan 2012 08:08:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 10597 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.132747887911967 (code B ref -1); Wed, 25 Jan 2012 08:08:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 25 Jan 2012 08:07:59 +0000 Original-Received: from localhost ([127.0.0.1]:42526 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Rpxtf-00036y-2z for submit@debbugs.gnu.org; Wed, 25 Jan 2012 03:07:59 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:46684) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Rpwkd-0001Qd-0n for submit@debbugs.gnu.org; Wed, 25 Jan 2012 01:54:36 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rpwk8-000763-5m for submit@debbugs.gnu.org; Wed, 25 Jan 2012 01:54:05 -0500 Original-Received: from lists.gnu.org ([140.186.70.17]:36227) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rpwk8-00075u-3f for submit@debbugs.gnu.org; Wed, 25 Jan 2012 01:54:04 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:36446) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rpwk7-00080J-4c for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2012 01:54:04 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rpwk5-00075e-V5 for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2012 01:54:03 -0500 Original-Received: from mail-iy0-f169.google.com ([209.85.210.169]:62451) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rpwk5-00075Z-Ru for bug-gnu-emacs@gnu.org; Wed, 25 Jan 2012 01:54:01 -0500 Original-Received: by iadk27 with SMTP id k27so2525980iad.0 for ; Tue, 24 Jan 2012 22:54:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=subject:from:reply-to:to:content-type:date:message-id:mime-version :x-mailer; bh=N9drUJ0w0sl9qrXQh0cZB1Hqh3Pa+trSvi9CKSAEbwg=; b=aRPdEvS/qWGEgcOMlEmP5ItOw+y8a8cNGaZ+4X+VjyVQUHfr40ChyR8CZCFcHzW71E +Ftx11v8XPxIqkIrQ+HL2lZRF6/226zZED2G3T9lVZ0ZvLeBI8iEUrv7r8PHipmf1Sbz TvrcrJaaVz4gwkQ0+30ewXRicmuGbOcdwbXs8= Original-Received: by 10.50.216.201 with SMTP id os9mr6612450igc.22.1327474440331; Tue, 24 Jan 2012 22:54:00 -0800 (PST) Original-Received: from [192.168.2.3] (c-98-237-183-126.hsd1.wa.comcast.net. [98.237.183.126]) by mx.google.com with ESMTPS id l35sm63519564ibj.0.2012.01.24.22.53.58 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 24 Jan 2012 22:53:59 -0800 (PST) X-Mailer: Evolution 2.30.3 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Mailman-Approved-At: Wed, 25 Jan 2012 03:07:57 -0500 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-Mailman-Approved-At: Wed, 25 Jan 2012 03:08:05 -0500 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:55975 Archived-At: --=-CxfemwgPJHrQe9wrbG/H Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit 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 --=-CxfemwgPJHrQe9wrbG/H Content-Disposition: attachment; filename="gdb-mi-disassembly-follow-pc.patch" Content-Type: text/x-patch; name="gdb-mi-disassembly-follow-pc.patch"; charset="UTF-8" Content-Transfer-Encoding: 7bit === 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) --=-CxfemwgPJHrQe9wrbG/H--