From patchwork Fri Apr 3 20:33:45 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Smundak X-Patchwork-Id: 5999 Received: (qmail 18570 invoked by alias); 3 Apr 2015 20:33:49 -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 18547 invoked by uid 89); 3 Apr 2015 20:33:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 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-ig0-f182.google.com Received: from mail-ig0-f182.google.com (HELO mail-ig0-f182.google.com) (209.85.213.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 03 Apr 2015 20:33:47 +0000 Received: by igblo3 with SMTP id lo3so13468150igb.1 for ; Fri, 03 Apr 2015 13:33:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=GOmLcLPdsp3DNnYQ4PZsNlbe36qckTELWdMdAit2kFA=; b=kSbL0YuryCTS/XP1m7TxujC0rYDKAcuxEnIQ3f6NFZyz98+r2QIZdkWQBBbilUDNOp 3a6d0CNaLFqL803fZhn6eAEhgm3Q2tOFRJE1IJdaWmGDkzSyur80GMBFwHmvQNCOsOd7 cqku7RiA+J4ChMoapx7B2Ew4VikIQIoblOgNWiagydJrbhNgL1kLcrRWfFcSAuhVmWb7 ApGFtDNdtdqD+XibRzbyVndk29iD7wz6YXXSEBaE3CUz8ev0MTVG/5YnFPAjTqMkpcE9 X2uzYsO0hNWo4LS6HG6Ue9QoM0sWvqRp7/C/zO7voKm6hHqvZlziZ81mxp/7I9t7C3bU qmFA== X-Gm-Message-State: ALoCoQkr4ItiySvMeAJ+X8eWgjn3zEUy5yGwcypnWWFe++LcbRGGf3/soC5Z2jI2Nlbtg+qDIwm+ MIME-Version: 1.0 X-Received: by 10.50.66.37 with SMTP id c5mr7234206igt.26.1428093225191; Fri, 03 Apr 2015 13:33:45 -0700 (PDT) Received: by 10.64.98.103 with HTTP; Fri, 3 Apr 2015 13:33:45 -0700 (PDT) Date: Fri, 3 Apr 2015 13:33:45 -0700 Message-ID: Subject: RFC: Python gdb.Type method returning optimized out gdb.Value From: Alexander Smundak To: gdb-patches Provide the ability for a a Python frame decorator to indicate that a value is not available. doc/ChangeLog: 2015-04-03 Sasha Smundak * python.texi:New method documented. gdb/ChangeLog: 2015-04-03 Sasha Smundak * python/py-type.c (typy_create_optimized_out): New function. testsuite/ChangeLog: 2015-04-03 Sasha Smundak * gdb.python/py-type.exp: New test. test_fields "c" diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 098d718..7c2d0bc 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -1060,6 +1060,11 @@ If @var{block} is given, then @var{name} is looked up in that scope. Otherwise, it is searched for globally. @end defun +@defun Type.create_optimized_out () +Return @code{gdb.Value} instance of this type whose value is optimized +out. Allows a frame decorator to indicate that an argument or local +variable value is unavailable. +@end defun Each type has a code, which indicates what category this type falls into. The available type categories are represented by constants diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index 39376a1..186cc19 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -1181,6 +1181,14 @@ typy_nonzero (PyObject *self) return 1; } +/* Return optimized out value of this type. */ +static PyObject * +typy_create_optimized_out (PyObject *self, PyObject *args) +{ + struct type *type = ((type_object *) self)->type; + return value_to_value_object (allocate_optimized_out_value (type)); +} + /* Return a gdb.Field object for the field named by the argument. */ static PyObject * @@ -1493,6 +1501,8 @@ They are first class values." }, { "const", typy_const, METH_NOARGS, "const () -> Type\n\ Return a const variant of this type." }, + { "create_optimized_out", typy_create_optimized_out, METH_NOARGS, +"create_optimized_out() -> Value\nReturn optimized out value of this type." }, { "fields", typy_fields, METH_NOARGS, "fields () -> list\n\ Return a list holding all the fields of this type.\n\ diff --git a/gdb/testsuite/gdb.python/py-type.exp b/gdb/testsuite/gdb.python/py-type.exp index c4c8d9f..c73f831 100644 --- a/gdb/testsuite/gdb.python/py-type.exp +++ b/gdb/testsuite/gdb.python/py-type.exp @@ -253,6 +253,9 @@ gdb_test "python print gdb.lookup_type('char').array(1, 0)" \ gdb_test "python print gdb.lookup_type('char').array(1, -1)" \ "Array length must not be negative.*" +gdb_test "python print gdb.lookup_type('int').create_optimized_out()" \ + "" + with_test_prefix "lang_c" { runto_bp "break to inspect struct and array."