From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7056 invoked by alias); 5 May 2016 21:14:17 -0000 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 Received: (qmail 7041 invoked by uid 89); 5 May 2016 21:14:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.0 required=5.0 tests=BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=sk:selecte, 2498, 3757 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 05 May 2016 21:14:15 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 37D52633E9 for ; Thu, 5 May 2016 21:14:14 +0000 (UTC) Received: from pinnacle.lan (ovpn-113-39.phx2.redhat.com [10.3.113.39]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u45LED92000949 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO) for ; Thu, 5 May 2016 17:14:14 -0400 Date: Thu, 05 May 2016 21:14:00 -0000 From: Kevin Buettner To: gdb-patches@sourceware.org Subject: [PATCH 2/4] Add `thread_from_thread_handle' function to (Python) gdb module Message-ID: <20160505141412.665d2c98@pinnacle.lan> In-Reply-To: <20160505140938.26a084ed@pinnacle.lan> References: <20160505140938.26a084ed@pinnacle.lan> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-05/txt/msg00079.txt.bz2 gdb/ChangeLog: * python/py-infthread.c (gdbpy_thread_from_thread_handle): New function. * python/python-internal.h (thread_object_type): Declare. (gdbpy_thread_from_thread_handle): Declare. * python/python.c (thread_from_thread_handle): Register. --- gdb/python/py-infthread.c | 37 +++++++++++++++++++++++++++++++++++++ gdb/python/python-internal.h | 3 +++ gdb/python/python.c | 4 ++++ 3 files changed, 44 insertions(+) diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c index 3a9bae7..433e3e4 100644 --- a/gdb/python/py-infthread.c +++ b/gdb/python/py-infthread.c @@ -294,6 +294,43 @@ gdbpy_selected_thread (PyObject *self, PyObject *args) Py_RETURN_NONE; } +PyObject * +gdbpy_thread_from_thread_handle (PyObject *self, PyObject *args, PyObject *kw) +{ + PyObject *handle_obj, *result; + static char *keywords[] = { "thread_handle", NULL }; + + if (! PyArg_ParseTupleAndKeywords (args, kw, "O", keywords, &handle_obj)) + return NULL; + + result = NULL; + + if (gdbpy_is_value_object (handle_obj)) + { + TRY + { + struct thread_info *thread_info; + struct value *val = value_object_to_value (handle_obj); + + thread_info = find_thread_by_handle (val); + if (thread_info != NULL) + { + result = (PyObject *) find_thread_object (thread_info->ptid); + if (result) + Py_INCREF (result); + } + } + CATCH (except, RETURN_MASK_ALL) + { + if (except.reason < 0) + gdbpy_convert_exception (except); + } + END_CATCH + } + + return result; +} + int gdbpy_initialize_thread (void) { diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 6a2619c..4e0ef0d 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -249,6 +249,8 @@ extern PyTypeObject breakpoint_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("breakpoint_object"); extern PyTypeObject frame_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("frame_object"); +extern PyTypeObject thread_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("thread_object"); typedef struct gdbpy_breakpoint_object { @@ -373,6 +375,7 @@ PyObject *gdbpy_create_lazy_string_object (CORE_ADDR address, long length, PyObject *gdbpy_inferiors (PyObject *unused, PyObject *unused2); PyObject *gdbpy_create_ptid_object (ptid_t ptid); PyObject *gdbpy_selected_thread (PyObject *self, PyObject *args); +PyObject *gdbpy_thread_from_thread_handle (PyObject *self, PyObject *args, PyObject *kw); PyObject *gdbpy_selected_inferior (PyObject *self, PyObject *args); PyObject *gdbpy_string_to_argv (PyObject *self, PyObject *args); PyObject *gdbpy_parameter (PyObject *self, PyObject *args); diff --git a/gdb/python/python.c b/gdb/python/python.c index c706644..0fccadc 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -2064,6 +2064,10 @@ Arguments are separate by spaces and may be quoted." { "selected_thread", gdbpy_selected_thread, METH_NOARGS, "selected_thread () -> gdb.InferiorThread.\n\ Return the selected thread object." }, + { "thread_from_thread_handle", (PyCFunction) gdbpy_thread_from_thread_handle, + METH_VARARGS | METH_KEYWORDS, + "thread_from_thread_handle (handle) -> gdb.InferiorThread.\n\ +Return thread object corresponding to thread handle." }, { "selected_inferior", gdbpy_selected_inferior, METH_NOARGS, "selected_inferior () -> gdb.Inferior.\n\ Return the selected inferior object." },