diff options
author | Pedro Alves <palves@redhat.com> | 2016-01-13 10:56:08 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2016-01-13 11:00:54 +0000 |
commit | 22a0232400ea09c57ab70d97cffc1f25e6320da7 (patch) | |
tree | 795f4c5f87e23dea3bffb5c17cdb6f142f2401de | |
parent | 5d5658a1d3c3eb2a09c03f2f0662a1c01963c869 (diff) | |
download | gdb-22a0232400ea09c57ab70d97cffc1f25e6320da7.zip gdb-22a0232400ea09c57ab70d97cffc1f25e6320da7.tar.gz gdb-22a0232400ea09c57ab70d97cffc1f25e6320da7.tar.bz2 |
Add Python InferiorThread.global_num attribute
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-13 Pedro Alves <palves@redhat.com>
* 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-13 Pedro Alves <palves@redhat.com>
* 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-13 Pedro Alves <palves@redhat.com>
* python.texi (Breakpoints In Python) <Breakpoint.thread>: Add
anchor.
(Threads In Python): Document new InferiorThread.global_num
attribute.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/NEWS | 7 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/doc/python.texi | 7 | ||||
-rw-r--r-- | gdb/python/py-infthread.c | 14 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/tids.exp | 19 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-infthread.exp | 1 |
8 files changed, 63 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c10644b..d253808 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2016-01-13 Pedro Alves <palves@redhat.com> + * NEWS: Mention InferiorThread.global_num. + * python/py-infthread.c (thpy_get_global_num): New function. + (thread_object_getset): Register "global_num". + +2016-01-13 Pedro Alves <palves@redhat.com> + * NEWS: Mention that thread IDs are now per inferior and global thread IDs. * Makefile.in (SFILES): Add tid-parse.c. @@ -208,9 +208,10 @@ show remote catch-syscall-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/ChangeLog b/gdb/doc/ChangeLog index 46207f6..65f8ed9 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,10 @@ +2016-01-13 Pedro Alves <palves@redhat.com> + + * python.texi (Breakpoints In Python) <Breakpoint.thread>: Add + anchor. + (Threads In Python): Document new InferiorThread.global_num + attribute. + 2016-01-07 Pedro Alves <palves@redhat.com> * gdb.texinfo (Threads): Document per-inferior thread IDs, 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/ChangeLog b/gdb/testsuite/ChangeLog index d9bafe1..92989a9 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-01-13 Pedro Alves <palves@redhat.com> + + * gdb.multi/tids.exp: Test InferiorThread.global_num and + Breakpoint.thread. + * gdb.python/py-infthread.exp: Test InferiorThread.global_num. + 2016-01-07 Pedro Alves <palves@redhat.com> * gdb.base/break.exp: Adjust to output changes. diff --git a/gdb/testsuite/gdb.multi/tids.exp b/gdb/testsuite/gdb.multi/tids.exp index 70a1d81..6895f3c 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)" "\\<gdb.InferiorThread object at 0x\[\[:xdigit:\]\]+>" "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 |