[PATCH v2] gdb/python: add a 'connection_num' attribute to Inferior objects

Aktemur, Tankut Baris tankut.baris.aktemur@intel.com
Tue Apr 27 06:44:30 GMT 2021


Kindly pinging.

Thanks
-Baris


On Monday, April 12, 2021 5:04 PM, Aktemur, Tankut Baris wrote:
> 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'.
> ---
>  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.
> +
>  *** 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)
> +{
> +  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