[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