public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2] gdb/python: add a 'connection_num' attribute to Inferior objects
@ 2021-04-12 15:04 Tankut Baris Aktemur
  2021-04-27  6:44 ` Aktemur, Tankut Baris
  2021-04-27  9:10 ` Andrew Burgess
  0 siblings, 2 replies; 8+ messages in thread
From: Tankut Baris Aktemur @ 2021-04-12 15:04 UTC (permalink / raw)
  To: gdb-patches

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


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-05-14 10:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-12 15:04 [PATCH v2] gdb/python: add a 'connection_num' attribute to Inferior objects Tankut Baris Aktemur
2021-04-27  6:44 ` Aktemur, Tankut Baris
2021-04-27  9:10 ` Andrew Burgess
2021-04-27 17:15   ` Aktemur, Tankut Baris
2021-05-04  8:22     ` Aktemur, Tankut Baris
2021-05-11  7:22       ` Aktemur, Tankut Baris
2021-05-13 18:31         ` Simon Marchi
2021-05-14 10:13           ` Aktemur, Tankut Baris

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).