From patchwork Mon Oct 13 22:10:17 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Evans X-Patchwork-Id: 3218 Received: (qmail 26815 invoked by alias); 13 Oct 2014 22:10:23 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 26805 invoked by uid 89); 13 Oct 2014 22:10:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-oi0-f73.google.com Received: from mail-oi0-f73.google.com (HELO mail-oi0-f73.google.com) (209.85.218.73) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 13 Oct 2014 22:10:21 +0000 Received: by mail-oi0-f73.google.com with SMTP id u20so2708047oif.4 for ; Mon, 13 Oct 2014 15:10:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-type; bh=w+SgzyqJbjiNOn10t1lhGA5Q57pTRDmxg42q6ZSxYLA=; b=JbmfOHNuAlrlhIoKO+/yOAV86sNHOvDGlMq4E5gfGvdF35WYmKMp3jKSpEc3ARspmr NuvsDDnL1qr0ZDyB7ixtUNSvoRtKLo41MVG5U7g0QBgoTKDXACKZc0EuJQ5BSonYPCRr U76ttStYRXcpMzCtnbJpEKZ8vJlf7SA5GDjuPUmUBuGk+FFOmANPWx+YUEiR4Mefnd2s yc9wFWAZlOEU2ZAyg3zoX9e1HpBD0Hf1WcnOjJ3ugCNMP2XroAEbY//SYAvaf/PsuJSx SKDBqxVPTFu5JVm+uW6TT3KGH4AWSKqhH6Mx5LrijbaZ/6RXldBTRya3nT+vtkOFo87j K+bw== X-Gm-Message-State: ALoCoQmAQW/x0/ja8JSulBV3sqMKAU+bSQsTtIdNCcmffT9IWAANU7h6lB1hm33L4ELmNQBVjF1m X-Received: by 10.50.141.135 with SMTP id ro7mr1386287igb.7.1413238218812; Mon, 13 Oct 2014 15:10:18 -0700 (PDT) Received: from corpmail-nozzle1-1.hot.corp.google.com ([100.108.1.104]) by gmr-mx.google.com with ESMTPS id k66si772892yho.7.2014.10.13.15.10.18 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Oct 2014 15:10:18 -0700 (PDT) Received: from ruffy.mtv.corp.google.com ([172.17.128.44]) by corpmail-nozzle1-1.hot.corp.google.com with ESMTPS id FTSnGkvt.1; Mon, 13 Oct 2014 15:10:18 -0700 From: Doug Evans To: gdb-patches@sourceware.org, eliz@gnu.org Subject: [PATCH, doc RFA] New attribute "progspace" for python gdb.Objfile objects Date: Mon, 13 Oct 2014 15:10:17 -0700 Message-ID: MIME-Version: 1.0 X-IsSubscribed: yes Hi. This patch adds a new attribute "progspace" for python gdb.Objfile objects. While one could just always use gdb.current_progspace(), having to refer to global state is generally a no-no in an API. The progspace is recorded with the objfile, this patch exposes it. Regression tested on amd64-linux. 2014-10-13 Doug Evans * NEWS: Mention new gdb.Objfile.progspace attribute. * python/py-objfile.c (objfpy_get_progspace): New function. (objfile_getset): New entry for "progspace". doc/ * python.texi (Objfiles In Python): Document new progspace attribute. testsuite/ * gdb.python/py-objfile.exp: Test progspace attribute. diff --git a/gdb/NEWS b/gdb/NEWS index 5de0a33..9d056b9 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -9,6 +9,8 @@ ** You can now access frame registers from Python scripts. ** New attribute 'producer' for gdb.Symtab objects. + ** gdb.Objfile objects have a new attribute "progspace", + which is the gdb.Progspace object of the containing program space. * New Python-based convenience functions: diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 81ec11b..84d6637 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -3392,6 +3392,11 @@ class. The file name of the objfile as a string. @end defvar +@defvar Objfile.progspace +The containing program space of the objfile as a @code{gdb.Progspace} +object. @xref{Progspaces In Python}. +@end defvar + @defvar Objfile.pretty_printers The @code{pretty_printers} attribute is a list of functions. It is used to look up pretty-printers. A @code{Value} is passed to each diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index df29691..cda6a48 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -62,6 +62,18 @@ objfpy_get_filename (PyObject *self, void *closure) Py_RETURN_NONE; } +/* An Objfile method which returns the objfile's progspace, or None. */ + +static PyObject * +objfpy_get_progspace (PyObject *self, void *closure) +{ + objfile_object *obj = (objfile_object *) self; + + if (obj->objfile) + return pspace_to_pspace_object (obj->objfile->pspace); + Py_RETURN_NONE; +} + static void objfpy_dealloc (PyObject *o) { @@ -338,6 +350,8 @@ static PyGetSetDef objfile_getset[] = { { "filename", objfpy_get_filename, NULL, "The objfile's filename, or None.", NULL }, + { "progspace", objfpy_get_progspace, NULL, + "The objfile's progspace, or None.", NULL }, { "pretty_printers", objfpy_get_printers, objfpy_set_printers, "Pretty printers.", NULL }, { "frame_filters", objfpy_get_frame_filters, diff --git a/gdb/testsuite/gdb.python/py-objfile.exp b/gdb/testsuite/gdb.python/py-objfile.exp index 1d2f550..8796170 100644 --- a/gdb/testsuite/gdb.python/py-objfile.exp +++ b/gdb/testsuite/gdb.python/py-objfile.exp @@ -39,6 +39,8 @@ gdb_py_test_silent_cmd "python objfile = sym\[0\].symtab.objfile" \ gdb_test "python print (objfile.filename)" ".*py-objfile.*" \ "Get objfile file name" +gdb_test "python print (objfile.progspace)" "" \ + "Get objfile program space" gdb_test "python print (objfile.is_valid())" "True" \ "Get objfile validity" gdb_unload