From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25124 invoked by alias); 31 Jan 2012 22:02:01 -0000 Received: (qmail 25067 invoked by uid 22791); 31 Jan 2012 22:02:00 -0000 X-SWARE-Spam-Status: No, hits=-6.2 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 31 Jan 2012 22:01:46 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q0VM1kQT025736 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 31 Jan 2012 17:01:46 -0500 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q0VM1jGM008845; Tue, 31 Jan 2012 17:01:45 -0500 Received: from barimba (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id q0VM1ieC015226; Tue, 31 Jan 2012 17:01:44 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Subject: RFA: fix PR python/13599 Date: Tue, 31 Jan 2012 22:04:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-01/txt/msg01021.txt.bz2 This fixes PR python/13599. The bug is that there is no way to get the line number in the source at which a symbol was defined, even though gdb tracks this information. This patch changes gdb.Symbol to add a new 'line' attribute. This requires a doc review. Built and regtested on x86-64 Fedora 15. Tom 2012-01-31 Tom Tromey PR python/13599: * python/py-symbol.c (sympy_line): New function. (symbol_object_getset): Add "line". 2012-01-31 Tom Tromey * gdb.texinfo (Symbols In Python): Document Symbol.line. 2012-01-31 Tom Tromey * gdb.python/py-symbol.c (qq): New global. * gdb.python/py-symbol.exp: Add test for frame-less lookup_symbol. * gdb.python/py-symtab.exp: Fix line number. >From bec0d20aa5b8e1e61de4c2d001d492c9d7b2bbd1 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 31 Jan 2012 14:02:20 -0700 Subject: [PATCH 2/3] fix PR 13599 - find line number of symbol --- gdb/ChangeLog | 6 ++++++ gdb/NEWS | 5 +++++ gdb/doc/ChangeLog | 4 ++++ gdb/doc/gdb.texinfo | 5 +++++ gdb/python/py-symbol.c | 15 +++++++++++++++ gdb/testsuite/ChangeLog | 2 ++ gdb/testsuite/gdb.python/py-symbol.c | 2 ++ gdb/testsuite/gdb.python/py-symbol.exp | 4 ++++ gdb/testsuite/gdb.python/py-symtab.exp | 5 +++-- 9 files changed, 46 insertions(+), 2 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index 4798b7b..bb9429f 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -10,6 +10,11 @@ ** A new class, gdb.printing.FlagEnumerationPrinter, can be used to apply "flag enum"-style pretty-printing to any enum. + ** gdb.lookup_symbol can now work when there is no current frame. + + ** gdb.Symbol now has a 'line' attribute, holding the line number in + the source at which the symbol was defined. + * GDBserver now supports stdio connections. E.g. (gdb) target remote | ssh myhost gdbserver - hello diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 86fa88f..9fa4b4e 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -23968,6 +23968,11 @@ represented as a @code{gdb.Symtab} object. @xref{Symbol Tables In Python}. This attribute is not writable. @end defvar +@defvar Symbol.line +The line number in the source code at which the symbol was defined. +This is an integer. +@end defvar + @defvar Symbol.name The name of the symbol as a string. This attribute is not writable. @end defvar diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c index f93a35a..d9dae47 100644 --- a/gdb/python/py-symbol.c +++ b/gdb/python/py-symbol.c @@ -183,6 +183,19 @@ sympy_is_variable (PyObject *self, void *closure) || class == LOC_OPTIMIZED_OUT)); } +/* Implementation of gdb.Symbol.line -> int. + Returns the line number at which the symbol was defined. */ + +static PyObject * +sympy_line (PyObject *self, void *closure) +{ + struct symbol *symbol = NULL; + + SYMPY_REQUIRE_VALID (self, symbol); + + return PyInt_FromLong (SYMBOL_LINE (symbol)); +} + /* Implementation of gdb.Symbol.is_valid (self) -> Boolean. Returns True if this Symbol still exists in GDB. */ @@ -461,6 +474,8 @@ to display demangled or mangled names.", NULL }, "True if the symbol is a function or method." }, { "is_variable", sympy_is_variable, NULL, "True if the symbol is a variable." }, + { "line", sympy_line, NULL, + "The source line number at which the symbol was defined." }, { NULL } /* Sentinel */ }; diff --git a/gdb/testsuite/gdb.python/py-symbol.c b/gdb/testsuite/gdb.python/py-symbol.c index 72469be..d29849b 100644 --- a/gdb/testsuite/gdb.python/py-symbol.c +++ b/gdb/testsuite/gdb.python/py-symbol.c @@ -35,6 +35,8 @@ class SimpleClass }; #endif +int qq; /* line of qq */ + int func (int arg) { int i = 2; diff --git a/gdb/testsuite/gdb.python/py-symbol.exp b/gdb/testsuite/gdb.python/py-symbol.exp index 91bfd51..36d7bfd 100644 --- a/gdb/testsuite/gdb.python/py-symbol.exp +++ b/gdb/testsuite/gdb.python/py-symbol.exp @@ -45,6 +45,10 @@ gdb_test "python print gdb.lookup_global_symbol(\"junk\")" "None" "Test lookup_g gdb_test "python print gdb.lookup_symbol('main')\[0\].is_function" "True" \ "Lookup main using lookup_symbol" +set qq_line [gdb_get_line_number "line of qq"] +gdb_test "python print gdb.lookup_symbol('qq')\[0\].line" "$qq_line" \ + "print line number of qq" + if ![runto_main] then { fail "Can't run to main" return 0 diff --git a/gdb/testsuite/gdb.python/py-symtab.exp b/gdb/testsuite/gdb.python/py-symtab.exp index f64cb57..490a891 100644 --- a/gdb/testsuite/gdb.python/py-symtab.exp +++ b/gdb/testsuite/gdb.python/py-symtab.exp @@ -43,7 +43,8 @@ if ![runto_main] then { global hex decimal # Setup and get the symbol table. -gdb_breakpoint [gdb_get_line_number "Block break here."] +set line_no [gdb_get_line_number "Block break here."] +gdb_breakpoint $line_no gdb_continue_to_breakpoint "Block break here." gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0 gdb_py_test_silent_cmd "python sal = frame.find_sal()" "Get block" 0 @@ -52,7 +53,7 @@ gdb_py_test_silent_cmd "python symtab = sal.symtab" "Get block" 0 # Test sal. gdb_test "python print sal.symtab" ".*gdb.python/py-symbol.c.*" "Test symtab" gdb_test "python print sal.pc" "${decimal}" "Test sal.pc" -gdb_test "python print sal.line" "42" "Test sal.line" +gdb_test "python print sal.line" "$line_no" "Test sal.line" gdb_test "python print sal.is_valid()" "True" "Test sal.is_valid" # Test symbol table. -- 1.7.6.5