diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5783e7cb0a3..8ec110cef3d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2018-09-13 Simon Marchi + + * python/py-inferior.c (infpy_get_progspace): New function. + (inferior_object_getset): Add progspace property. + * NEWS: Mention the new property. + 2018-09-13 Tom Tromey PR rust/23650: diff --git a/gdb/NEWS b/gdb/NEWS index 4e4f12d8d13..4e26f4bb977 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -84,6 +84,11 @@ GNU/Linux/RISC-V riscv*-*-linux* CSKY ELF csky*-*-elf CSKY GNU/LINUX csky*-*-linux +* Python API + + ** The gdb.Inferior type has a new 'progspace' property, which is the program + space associated to that inferior. + *** Changes in GDB 8.2 * The 'set disassembler-options' command now supports specifying options diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 1c965087af6..4750c340b5c 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,12 @@ +2018-09-13 Simon Marchi +2018-09-13 Tom Tromey + + * python.texi (Inferiors In Python): Document + Inferior.progspace. + (Program Spaces In Python): Document that + gdb.current_progspace() is the same as + gdb.selected_inferior().progspace. + 2018-09-13 Simon Marchi * python.texi (Basic Python): Mention the string representation diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 6e2bf5c9eff..75d8ae1e399 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -2836,6 +2836,10 @@ Boolean signaling whether the inferior was created using `attach', or started by @value{GDBN} itself. @end defvar +@defvar Inferior.progspace +The inferior's program space. @xref{Progspaces In Python}. +@end defvar + A @code{gdb.Inferior} object has the following methods: @defun Inferior.is_valid () @@ -3995,7 +3999,9 @@ The following progspace-related functions are available in the @findex gdb.current_progspace @defun gdb.current_progspace () This function returns the program space of the currently selected inferior. -@xref{Inferiors and Programs}. +@xref{Inferiors and Programs}. This is identical to +@code{gdb.selected_inferior().progspace} (@pxref{Inferiors In Python}) and is +included for historical compatibility. @end defun @findex gdb.progspaces diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index 56019bf9e05..727a8d2f306 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -459,6 +459,23 @@ infpy_get_was_attached (PyObject *self, void *closure) Py_RETURN_FALSE; } +/* Getter of gdb.Inferior.progspace. */ + +static PyObject * +infpy_get_progspace (PyObject *self, void *closure) +{ + inferior_object *inf = (inferior_object *) self; + + INFPY_REQUIRE_VALID (inf); + + program_space *pspace = inf->inferior->pspace; + gdb_assert (pspace != nullptr); + + PyObject *py_pspace = pspace_to_pspace_object (pspace); + Py_XINCREF (py_pspace); + return py_pspace; +} + static int build_inferior_list (struct inferior *inf, void *arg) { @@ -966,6 +983,7 @@ static gdb_PyGetSetDef inferior_object_getset[] = NULL }, { "was_attached", infpy_get_was_attached, NULL, "True if the inferior was created using 'attach'.", NULL }, + { "progspace", infpy_get_progspace, NULL, "Program space of this inferior" }, { NULL } }; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 7d6a2ecbf07..553eaab15ba 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-09-13 Simon Marchi + + * gdb.python/py-inferior.exp: Add tests for Inferior.progspace + and a few other Inferior properties when the Inferior is no + longer valid. + 2018-09-13 Tom Tromey PR rust/23650: diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp index 7ec81930ff0..38f52573b19 100644 --- a/gdb/testsuite/gdb.python/py-inferior.exp +++ b/gdb/testsuite/gdb.python/py-inferior.exp @@ -55,6 +55,9 @@ gdb_test "python print ('result = %s' % i0.pid)" " = \[0-9\]+" "test Inferior.pi gdb_test "python print ('result = %s' % i0.was_attached)" " = False" "test Inferior.was_attached" gdb_test "python print (i0.threads ())" "\\(,\\)" "test Inferior.threads" +gdb_test "python print (i0.progspace)" "" +gdb_test "python print (i0.progspace == gdb.progspaces()\[0\])" "True" + # Test the number of inferior threads. gdb_breakpoint check_threads @@ -263,6 +266,8 @@ with_test_prefix "is_valid" { "RuntimeError: Inferior no longer exists.*" gdb_test "python print (inf_list\[1\].was_attached)" \ "RuntimeError: Inferior no longer exists.*" + gdb_test "python print (inf_list\[1\].progspace)" \ + "RuntimeError: Inferior no longer exists.*" gdb_test "python print (inf_list\[1\].threads ())" \ "RuntimeError: Inferior no longer exists.*" gdb_test "python print (inf_list\[1\].thread_from_thread_handle (1))" \