[PATCH v2] gdb/python: add a 'connection_num' attribute to Inferior objects
Aktemur, Tankut Baris
tankut.baris.aktemur@intel.com
Tue Apr 27 17:15:13 GMT 2021
On Tuesday, April 27, 2021 11:10 AM, Andrew Burgess wrote:
> * Tankut Baris Aktemur via Gdb-patches <gdb-patches@sourceware.org> [2021-04-12 17:04:28
> +0200]:
>
> > Define a 'connection_num' attribute for Inferior objects. The
> > read-only attribute is the ID of the process stratum target of an
> > inferior, as printed by "info inferiors".
> >
> > gdb/ChangeLog:
> > 2021-04-12 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
> >
> > * python/py-inferior.c (infpy_get_connection_num): New function.
> > (inferior_object_getset): Add a new element for 'connection_num'.
> > * NEWS: Mention the 'connection_num' attribute of Inferior objects.
> >
> > gdb/doc/ChangeLog:
> > 2021-04-12 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
> >
> > * python.texi (Inferiors In Python): Mention the 'connection_num'
> > attribute.
> >
> > gdb/testsuite/ChangeLog:
> > 2021-04-12 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
> >
> > * gdb.python/py-inferior.exp: Add test cases for
> > * 'connection_num'.
>
> Thanks for looking at this, I had a couple of minor comments.
>
> > ---
> > gdb/NEWS | 5 +++++
> > gdb/doc/python.texi | 5 +++++
> > gdb/python/py-inferior.c | 16 +++++++++++++++
> > gdb/testsuite/gdb.python/py-inferior.exp | 25 +++++++++++++++++++++++-
> > 4 files changed, 50 insertions(+), 1 deletion(-)
> >
> > diff --git a/gdb/NEWS b/gdb/NEWS
> > index 6cf76a14317..bdc0e2c6593 100644
> > --- a/gdb/NEWS
> > +++ b/gdb/NEWS
> > @@ -138,6 +138,11 @@ QMemTags
> > Request the remote to store the specified allocation tags to the requested
> > memory range.
> >
> > +* Python API
> > +
> > + ** Inferior objects now contain a read-only 'connection_num' attribute that
> > + gives the ID of the Inferior's process stratum target.
>
> I don't think you should mention "process stratum" here. The NEWS
> file is for users to read, and "stratum" is not mentioned anywhere in
> the GDB manual (or in this NEWS file).
>
> How about:
>
> ** Inferior objects now contain a read-only 'connection_num' attribute that
> gives the connection number as seen in 'info connections' and
> 'info inferiors'.
Sure, I'll fix the text as above.
> > +
> > *** Changes in GDB 10
> >
> > * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
> > diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
> > index 9135d415dd1..b459ff245d4 100644
> > --- a/gdb/doc/python.texi
> > +++ b/gdb/doc/python.texi
> > @@ -2989,6 +2989,11 @@ A @code{gdb.Inferior} object has the following attributes:
> > ID of inferior, as assigned by GDB.
> > @end defvar
> >
> > +@defvar Inferior.connection_num
> > +ID of inferior's connection (i.e.@: process target), as assigned by
> > +@value{GDBN}.
> > +@end defvar
> > +
> > @defvar Inferior.pid
> > Process ID of the inferior, as assigned by the underlying operating
> > system.
> > diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
> > index a3d5952a10b..a7fac34f3d6 100644
> > --- a/gdb/python/py-inferior.c
> > +++ b/gdb/python/py-inferior.c
> > @@ -426,6 +426,20 @@ infpy_get_num (PyObject *self, void *closure)
> > return gdb_py_object_from_longest (inf->inferior->num).release ();
> > }
> >
> > +static PyObject *
> > +infpy_get_connection_num (PyObject *self, void *closure)
>
> This function should have a header comment.
I'll add the header comment.
> Otherwise, this looks good.
>
> Thanks,
> Andrew
Thank you.
Eli had commented on the first revision. Any further comments, Eli?
-Baris
> > +{
> > + inferior_object *inf = (inferior_object *) self;
> > +
> > + INFPY_REQUIRE_VALID (inf);
> > +
> > + process_stratum_target *target = inf->inferior->process_target ();
> > + if (target == nullptr)
> > + Py_RETURN_NONE;
> > +
> > + return PyLong_FromLong (target->connection_number);
> > +}
> > +
> > static PyObject *
> > infpy_get_pid (PyObject *self, void *closure)
> > {
> > @@ -928,6 +942,8 @@ gdbpy_initialize_inferior (void)
> > static gdb_PyGetSetDef inferior_object_getset[] =
> > {
> > { "num", infpy_get_num, NULL, "ID of inferior, as assigned by GDB.", NULL },
> > + { "connection_num", infpy_get_connection_num, NULL,
> > + "ID of inferior's connection, as assigned by GDB.", NULL },
> > { "pid", infpy_get_pid, NULL, "PID of inferior, as assigned by the OS.",
> > NULL },
> > { "was_attached", infpy_get_was_attached, NULL,
> > diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-
> inferior.exp
> > index 9df74e05182..2252215b721 100644
> > --- a/gdb/testsuite/gdb.python/py-inferior.exp
> > +++ b/gdb/testsuite/gdb.python/py-inferior.exp
> > @@ -51,6 +51,7 @@ gdb_py_test_silent_cmd "python i0 = inferiors\[0\]" "get first inferior"
> 0
> >
> > gdb_test "python print ('result = %s' % (i0 == inferiors\[0\]))" " = True" "test equality
> comparison (true)"
> > gdb_test "python print ('result = %s' % i0.num)" " = \[0-9\]+" "test Inferior.num"
> > +gdb_test "python print ('result = %s' % i0.connection_num)" " = \[0-9\]+" "test
> Inferior.connection_num"
> > gdb_test "python print ('result = %s' % i0.pid)" " = \[0-9\]+" "test Inferior.pid"
> > gdb_test "python print ('result = %s' % i0.was_attached)" " = False" "test
> Inferior.was_attached"
> > gdb_test "python print (i0.threads ())" "\\(<gdb.InferiorThread object at
> 0x\[\[:xdigit:\]\]+>,\\)" "test Inferior.threads"
> > @@ -262,6 +263,8 @@ with_test_prefix "is_valid" {
> > # correctly.
> > gdb_test "python print (inf_list\[1\].num)" \
> > "RuntimeError: Inferior no longer exists.*"
> > + gdb_test "python print (inf_list\[1\].connection_num)" \
> > + "RuntimeError: Inferior no longer exists.*"
> > gdb_test "python print (inf_list\[1\].pid)" \
> > "RuntimeError: Inferior no longer exists.*"
> > gdb_test "python print (inf_list\[1\].was_attached)" \
> > @@ -278,10 +281,30 @@ with_test_prefix "is_valid" {
> > with_test_prefix "selected_inferior" {
> > gdb_test "inferior 1" ".*" "switch to first inferior"
> > gdb_test "py print (gdb.selected_inferior().num)" "1" "first inferior selected"
> > + gdb_test "py print (gdb.selected_inferior().connection_num)" "1" \
> > + "first inferior's connection"
> > + # Figure out if inf 1 has a native target.
> > + set inf_1_is_native [gdb_is_target_native]
> >
> > - gdb_test "add-inferior" "Added inferior 3 on connection .*" "create new inferior"
> > + gdb_test "add-inferior -no-connection" "Added inferior 3" "create new inferior"
> > gdb_test "inferior 3" ".*" "switch to third inferior"
> > gdb_test "py print (gdb.selected_inferior().num)" "3" "third inferior selected"
> > + gdb_test "py print (gdb.selected_inferior().connection_num)" "None" \
> > + "third inferior's None connection"
> > + gdb_test "target native" "Done. Use the \"run\" command to start a process." \
> > + "target for the third inferior"
> > +
> > + # If inf 1 has a native target, inf 3's target is shared with 1's.
> > + # Otherwise, it must have created a new target with a new number.
> > + if {$inf_1_is_native} {
> > + set expected_connection_num 1
> > + } else {
> > + set expected_connection_num 2
> > + }
> > + gdb_test "py print (gdb.selected_inferior().connection_num)" \
> > + "$expected_connection_num" \
> > + "third inferior's native connection"
> > +
> > gdb_test "inferior 1" ".*" "switch back to first inferior"
> > gdb_test_no_output "remove-inferiors 3" "remove second inferior"
> > }
> > --
> > 2.17.1
> >
Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928
More information about the Gdb-patches
mailing list