+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
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"
+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
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.
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)
{
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,
+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>
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"
# 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)" \
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"
}