From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 451 invoked by alias); 26 Mar 2009 21:06:31 -0000 Received: (qmail 428 invoked by uid 22791); 26 Mar 2009 21:06:29 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_37,SPF_PASS X-Spam-Check-By: sourceware.org Received: from e24smtp04.br.ibm.com (HELO e24smtp04.br.ibm.com) (32.104.18.25) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 Mar 2009 21:06:24 +0000 Received: from mailhub1.br.ibm.com (mailhub1.br.ibm.com [9.18.232.109]) by e24smtp04.br.ibm.com (8.13.1/8.13.1) with ESMTP id n2QL2s0G011600 for ; Thu, 26 Mar 2009 18:02:54 -0300 Received: from d24av02.br.ibm.com (d24av02.br.ibm.com [9.18.232.47]) by mailhub1.br.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n2QL6ahY1437954 for ; Thu, 26 Mar 2009 18:06:36 -0300 Received: from d24av02.br.ibm.com (loopback [127.0.0.1]) by d24av02.br.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n2QL6H5p023471 for ; Thu, 26 Mar 2009 18:06:18 -0300 Received: from [9.8.15.217] ([9.8.15.217]) by d24av02.br.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n2QL6HFH023459; Thu, 26 Mar 2009 18:06:17 -0300 Subject: Re: [RFC][Python] Re: any expression to tell whether a variable was optimized out? From: Thiago Jung Bauermann To: Eli Zaretskii Cc: tromey@redhat.com, aoliva@redhat.com, gdb-patches@sourceware.org In-Reply-To: References: <20090310125945.GA4376@caradoc.them.org> <1236700079.11106.1.camel@localhost.localdomain> <1236710732.11106.30.camel@localhost.localdomain> <1237771863.25721.17.camel@localhost.localdomain> Content-Type: text/plain; charset=utf-8 Date: Thu, 26 Mar 2009 21:21:00 -0000 Message-Id: <1238101576.25721.80.camel@localhost.localdomain> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes 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: 2009-03/txt/msg00595.txt.bz2 El lun, 23-03-2009 a las 06:24 +0200, Eli Zaretskii escribió: > > From: Thiago Jung Bauermann > > Cc: Alexandre Oliva , gdb-patches@sourceware.org > > Date: Sun, 22 Mar 2009 22:31:02 -0300 > > > > +@table @code > > +@defmethod Value is_optimized_out > > +This read-only boolean attribute is true if the compiler optimized out > > +this value, thus it is not available for fetching from the inferior. > > +@end defmethod > > +@end table > > This is OK, but please add a @cindex entry for this that starts with > "optimized", so that readers will be able to find this easier. Here's the @cindex entry I added: +@table @code +@cindex optimized out value in Python +@defmethod Value is_optimized_out +This read-only boolean attribute is true if the compiler optimized out +this value, thus it is not available for fetching from the inferior. +@end defmethod +@end table I committed the following patch. Thanks for the review. -- []'s Thiago Jung Bauermann IBM Linux Technology Center gdb/ Add gdb.Value.is_optimized_out attribute. * python/python-value.c (valpy_get_is_optimized_out): New function. (value_object_getset): New variable. (value_object_type): Initialize tp_getset element. gdb/doc/ * gdb.texinfo (Values From Inferior): Document is_optimized_out attribute. gdb/testsuite/ * gdb.python/python-value.exp (test_value_in_inferior): Test gdb.Value.is_optimized_out attribute. Index: src/gdb/python/python-value.c =================================================================== --- src.orig/gdb/python/python-value.c 2009-03-21 00:06:27.000000000 -0300 +++ src/gdb/python/python-value.c 2009-03-26 17:48:45.000000000 -0300 @@ -272,6 +272,18 @@ valpy_str (PyObject *self) return result; } +/* Implements gdb.Value.is_optimized_out. */ +static PyObject * +valpy_get_is_optimized_out (PyObject *self, void *closure) +{ + struct value *value = ((value_object *) self)->value; + + if (value_optimized_out (value)) + Py_RETURN_TRUE; + + Py_RETURN_FALSE; +} + enum valpy_opcode { VALPY_ADD, @@ -825,6 +837,13 @@ gdbpy_initialize_values (void) values_in_python = NULL; } +static PyGetSetDef value_object_getset[] = { + { "is_optimized_out", valpy_get_is_optimized_out, NULL, + "Boolean telling whether the value is optimized out (i.e., not available).", + NULL }, + {NULL} /* Sentinel */ +}; + static PyMethodDef value_object_methods[] = { { "address", valpy_address, METH_NOARGS, "Return the address of the value." }, { "dereference", valpy_dereference, METH_NOARGS, "Dereferences the value." }, @@ -897,7 +916,7 @@ PyTypeObject value_object_type = { 0, /* tp_iternext */ value_object_methods, /* tp_methods */ 0, /* tp_members */ - 0, /* tp_getset */ + value_object_getset, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ Index: src/gdb/testsuite/gdb.python/python-value.exp =================================================================== --- src.orig/gdb/testsuite/gdb.python/python-value.exp 2009-02-04 19:49:10.000000000 -0200 +++ src/gdb/testsuite/gdb.python/python-value.exp 2009-03-26 17:48:45.000000000 -0300 @@ -225,6 +225,9 @@ proc test_value_in_inferior {} { # Check that the dereferenced value is sane gdb_test "python print arg0" "0x.*$testfile\"" "verify dereferenced value" + + # Smoke-test is_optimized_out attribute + gdb_test "python print 'result =', arg0.is_optimized_out" "= False" "Test is_optimized_out attribute" } Index: src/gdb/doc/gdb.texinfo =================================================================== --- src.orig/gdb/doc/gdb.texinfo 2009-03-25 17:54:17.000000000 -0300 +++ src/gdb/doc/gdb.texinfo 2009-03-26 17:49:33.000000000 -0300 @@ -18325,13 +18325,23 @@ bar = some_val['foo'] Again, @code{bar} will also be a @code{gdb.Value} object. -For pointer data types, @code{gdb.Value} provides a method for -dereferencing the pointer to obtain the object it points to. +The following attribute is provided: +@table @code +@cindex optimized out value in Python +@defmethod Value is_optimized_out +This read-only boolean attribute is true if the compiler optimized out +this value, thus it is not available for fetching from the inferior. +@end defmethod +@end table + +The following methods are provided: + +@table @code @defmethod Value dereference -This method returns a new @code{gdb.Value} object whose contents is -the object pointed to by the pointer. For example, if @code{foo} is -a C pointer to an @code{int}, declared in your C program as +For pointer data types, this method returns a new @code{gdb.Value} object +whose contents is the object pointed to by the pointer. For example, if +@code{foo} is a C pointer to an @code{int}, declared in your C program as @smallexample int *foo; @@ -18375,6 +18385,7 @@ will be used, if the current language is The optional @var{errors} argument is the same as the corresponding argument to Python's @code{string.decode} method. @end defmethod +@end table @node Commands In Python @subsubsection Commands In Python