diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/NEWS | 6 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/doc/python.texi | 6 | ||||
-rw-r--r-- | gdb/python/py-inferior.c | 19 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-inferior.exp | 25 |
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 @@ -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" } |