aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/NEWS6
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/python.texi6
-rw-r--r--gdb/python/py-inferior.c19
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.python/py-inferior.exp25
7 files changed, 70 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4bed8c2..d44b06d 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2021-05-14 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.
+
2021-05-14 Andrew Burgess <andrew.burgess@embecosm.com>
* remote.c (check_pending_events_prevent_wildcard_vcont): Change
diff --git a/gdb/NEWS b/gdb/NEWS
index 6e147cb..ab678ac 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -211,6 +211,12 @@ QMemTags
value-reference-value, value-rvalue-reference-value and
value-const-value.
+* Python API
+
+ ** Inferior objects now contain a read-only 'connection_num' attribute that
+ gives the connection number as seen in 'info connections' and
+ 'info inferiors'.
+
*** Changes in GDB 10
* There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 9990cd9..db72a47 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,8 @@
+2021-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ * python.texi (Inferiors In Python): Mention the 'connection_num'
+ attribute.
+
2021-05-12 George Barrett <bob@bob131.so>
* guile.texi (Values From Inferior In Guile): Add documentation
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index 4865634..f1ca6f7 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -3065,6 +3065,12 @@ 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 as assigned by @value{GDBN}, or None if
+the inferior is not connected to a target.
+@xref{Inferiors Connections and Programs}.
+@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 94c2c23..336c642 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -427,6 +427,23 @@ infpy_get_num (PyObject *self, void *closure)
return gdb_py_object_from_longest (inf->inferior->num).release ();
}
+/* Return the connection number of the given inferior, or None if a
+ connection does not exist. */
+
+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)
{
@@ -943,6 +960,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/ChangeLog b/gdb/testsuite/ChangeLog
index cb0a04e..fbe2d21 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2021-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ * gdb.python/py-inferior.exp: Add test cases for 'connection_num'.
+
2021-05-14 Kent Cheung <kent.cheung@arm.com>
Andrew Burgess <andrew.burgess@embecosm.com>
diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp
index 9df74e0..2252215 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"
}