aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2021-05-14 11:56:31 +0200
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2021-05-14 15:33:23 +0200
commit55789354fcbaf879f3ca8475b647b2747dec486e (patch)
treec190df296e9397418263e9615401a9b6dde02b2d
parent2f63ec5ccc5dca36398e570a500ad553729b19a3 (diff)
downloadfsf-binutils-gdb-55789354fcbaf879f3ca8475b647b2747dec486e.zip
fsf-binutils-gdb-55789354fcbaf879f3ca8475b647b2747dec486e.tar.gz
fsf-binutils-gdb-55789354fcbaf879f3ca8475b647b2747dec486e.tar.bz2
gdb/python: add a 'connection_num' attribute to Inferior objects
Define a 'connection_num' attribute for Inferior objects. The read-only attribute is the ID of the connection of an inferior, as printed by "info inferiors". In GDB's internal terminology, that's the process stratum target of the inferior. If the inferior has no target connection, the attribute is None. gdb/ChangeLog: 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. gdb/doc/ChangeLog: 2021-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * python.texi (Inferiors In Python): Mention the 'connection_num' attribute. gdb/testsuite/ChangeLog: 2021-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * gdb.python/py-inferior.exp: Add test cases for 'connection_num'.
-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"
}