From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 86347 invoked by alias); 6 Jan 2016 19:03:59 -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 86338 invoked by uid 89); 6 Jan 2016 19:03:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY autolearn=no version=3.3.2 spammy=427, 42,6, 42,7, threadspecific X-HELO: usplmg21.ericsson.net Received: from usplmg21.ericsson.net (HELO usplmg21.ericsson.net) (198.24.6.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Wed, 06 Jan 2016 19:03:56 +0000 Received: from EUSAAHC002.ericsson.se (Unknown_Domain [147.117.188.78]) by usplmg21.ericsson.net (Symantec Mail Security) with SMTP id 46.46.32102.D056D865; Wed, 6 Jan 2016 20:03:41 +0100 (CET) Received: from [142.133.110.144] (147.117.188.8) by smtp-am.internal.ericsson.com (147.117.188.80) with Microsoft SMTP Server id 14.3.248.2; Wed, 6 Jan 2016 14:03:53 -0500 Subject: Re: [PATCH v3 5/7] InferiorThread.global_num To: Pedro Alves , References: <1452085418-18300-1-git-send-email-palves@redhat.com> <1452085418-18300-6-git-send-email-palves@redhat.com> From: Simon Marchi Message-ID: <568D6519.7090904@ericsson.com> Date: Wed, 06 Jan 2016 19:03:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <1452085418-18300-6-git-send-email-palves@redhat.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2016-01/txt/msg00100.txt.bz2 On 16-01-06 08:03 AM, Pedro Alves wrote: > This commit adds a new Python InferiorThread.global_num attribute. > This can be used to pass the correct thread ID to Breakpoint.thread, > which takes a global thread ID, not a per-inferior thread number. > > gdb/ChangeLog: > 2016-01-06 Pedro Alves > > * NEWS: Mention InferiorThread.global_num. > * python/py-infthread.c (thpy_get_global_num): New function. > (thread_object_getset): Register "global_num". > > gdb/testsuite/ChangeLog: > 2016-01-06 Pedro Alves > > * gdb.multi/tids.exp: Test InferiorThread.global_num and > Breakpoint.thread. > * gdb.python/py-infthread.exp: Test InferiorThread.global_num. > > gdb/doc/ChangeLog: > 2016-01-06 Pedro Alves > > * python.texi (Breakpoints In Python) : Add > anchor. > (Threads In Python): Document new InferiorThread.global_num > attribute. > --- > gdb/NEWS | 7 ++++--- > gdb/doc/python.texi | 7 +++++++ > gdb/python/py-infthread.c | 14 ++++++++++++++ > gdb/testsuite/gdb.multi/tids.exp | 19 ++++++++++++++++++- > gdb/testsuite/gdb.python/py-infthread.exp | 1 + > 5 files changed, 44 insertions(+), 4 deletions(-) > > diff --git a/gdb/NEWS b/gdb/NEWS > index 03944383..c87a73d 100644 > --- a/gdb/NEWS > +++ b/gdb/NEWS > @@ -184,9 +184,10 @@ show remote exec-event-feature-packet > > * Python Scripting > > - ** The "num" attribute of gdb.InferiorThread objects now refers to > - the thread's per-inferior number. See "Per-inferior thread > - numbers" above. > + ** gdb.InferiorThread objects have a new attribute "global_num", > + which refers to the thread's global thread ID. The existing > + "num" attribute now refers to the thread's per-inferior number. > + See "Per-inferior thread numbers" above. > ** gdb.InferiorThread objects have a new attribute "inferior", which > is the Inferior object the thread belongs to. > > diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi > index f9f9e5b..ffbf89a 100644 > --- a/gdb/doc/python.texi > +++ b/gdb/doc/python.texi > @@ -2998,6 +2998,12 @@ user-specified thread name. > The per-inferior number of the thread, as assigned by GDB. > @end defvar > > +@defvar InferiorThread.global_num > +The global ID of the thread, as assigned by GDB. You can use this to > +make Python breakpoints thread-specific, for example > +(@pxref{python_breakpoint_thread,,The Breakpoint.thread attribute}). > +@end defvar > + > @defvar InferiorThread.ptid > ID of the thread, as assigned by the operating system. This attribute is a > tuple containing three integers. The first is the Process ID (PID); the second > @@ -4642,6 +4648,7 @@ first command is @code{silent}. This is not reported by the > @code{silent} attribute. > @end defvar > > +@anchor{python_breakpoint_thread} > @defvar Breakpoint.thread > If the breakpoint is thread-specific, this attribute holds the > thread's global id. If the breakpoint is not thread-specific, this > diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c > index a9dd5cb..3a9bae7 100644 > --- a/gdb/python/py-infthread.c > +++ b/gdb/python/py-infthread.c > @@ -127,6 +127,18 @@ thpy_get_num (PyObject *self, void *closure) > return PyLong_FromLong (thread_obj->thread->per_inf_num); > } > > +/* Getter for InferiorThread.global_num. */ > + > +static PyObject * > +thpy_get_global_num (PyObject *self, void *closure) > +{ > + thread_object *thread_obj = (thread_object *) self; > + > + THPY_REQUIRE_VALID (thread_obj); > + > + return PyLong_FromLong (thread_obj->thread->global_num); > +} > + > /* Getter for InferiorThread.ptid -> (pid, lwp, tid). > Returns a tuple with the thread's ptid components. */ > > @@ -298,6 +310,8 @@ static PyGetSetDef thread_object_getset[] = > "The name of the thread, as set by the user or the OS.", NULL }, > { "num", thpy_get_num, NULL, > "Per-inferior number of the thread, as assigned by GDB.", NULL }, > + { "global_num", thpy_get_global_num, NULL, > + "Global number of the thread, as assigned by GDB.", NULL }, > { "ptid", thpy_get_ptid, NULL, "ID of the thread, as assigned by the OS.", > NULL }, > { "inferior", thpy_get_inferior, NULL, > diff --git a/gdb/testsuite/gdb.multi/tids.exp b/gdb/testsuite/gdb.multi/tids.exp > index 7b51c80..12aca07 100644 > --- a/gdb/testsuite/gdb.multi/tids.exp > +++ b/gdb/testsuite/gdb.multi/tids.exp > @@ -244,11 +244,28 @@ with_test_prefix "two inferiors" { > > if { ![skip_python_tests] } { > with_test_prefix "python" { > - # Check that InferiorThread.num returns the expected number. > + # Check that InferiorThread.num and InferiorThread.global_num > + # return the expected numbers. > gdb_py_test_silent_cmd "python t0 = gdb.selected_thread ()" \ > "test gdb.selected_thread" 1 > gdb_test "python print ('result = %s' % t0.num)" " = 3" \ > "test InferiorThread.num" > + gdb_test "python print ('result = %s' % t0.global_num)" " = 6" \ > + "test InferiorThread.global_num" > + > + # Breakpoint.thread expects global IDs. Confirm that that > + # works as expected. > + delete_breakpoints > + gdb_breakpoint "thread_function1" > + > + gdb_py_test_silent_cmd "python bp = gdb.breakpoints()\[0\]" \ > + "get python breakpoint" 0 > + gdb_test "python bp.thread = 6" "thread = 6" \ > + "make breakpoint thread-specific with python" > + # Check that the inferior-qualified ID is correct. > + gdb_test "info breakpoint" \ > + "stop only in thread 1.3\r\n.*" \ > + "thread specific breakpoint right thread" > } > } > > diff --git a/gdb/testsuite/gdb.python/py-infthread.exp b/gdb/testsuite/gdb.python/py-infthread.exp > index e07fd82..11f8d21 100644 > --- a/gdb/testsuite/gdb.python/py-infthread.exp > +++ b/gdb/testsuite/gdb.python/py-infthread.exp > @@ -42,6 +42,7 @@ if ![runto_main] then { > gdb_py_test_silent_cmd "python t0 = gdb.selected_thread ()" "test gdb.selected_thread" 1 > gdb_test "python print (t0)" "\\" "verify InferiorThread object" > gdb_test "python print ('result = %s' % t0.num)" " = 1" "test InferiorThread.num" > +gdb_test "python print ('result = %s' % t0.global_num)" " = 1" "test InferiorThread.global_num" > gdb_test "python print ('result = %s' % str (t0.ptid))" " = \\(\[0-9\]+, \[0-9\]+, \[0-9\]+\\)" "test InferiorThread.ptid" > > gdb_py_test_silent_cmd "python i0 = t0.inferior" "test InferiorThread.inferior" 1 > LGTM.