[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