diff --git a/gdb/ChangeLog b/gdb/ChangeLog index aac1c6d6ce7..d896bf48e1c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2018-10-06 Tom Tromey + + PR python/19399: + * python/py-inferior.c: Add "architecture" entry. + (infpy_architecture): New function. + 2018-10-06 Tom Tromey PR python/21765: diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 2e2894904c9..acf68ceb34d 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,9 @@ +2018-10-06 Tom Tromey + + PR python/19399: + * python.texi (Inferiors In Python): Document + Inferior.Architecture. + 2018-10-06 Tom Tromey PR python/21765: diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 0a8f7a1dc9a..dc53cfad7c2 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -2860,6 +2860,13 @@ when it is called. If there are no valid threads, the method will return an empty tuple. @end defun +@defun Inferior.architecture () +Return the @code{gdb.Architecture} (@pxref{Architectures In Python}) +for this inferior. This represents the architecture of the inferior +as a whole. Some platforms can have multiple architectures in a +single address space, so this may not match the architecture of a +particular frame (@pxref{Frames in Python}). + @findex Inferior.read_memory @defun Inferior.read_memory (address, length) Read @var{length} addressable memory units from the inferior, starting at diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index 5bba676478c..e987cfed225 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -855,6 +855,18 @@ infpy_thread_from_thread_handle (PyObject *self, PyObject *args, PyObject *kw) Py_RETURN_NONE; } +/* Implementation of gdb.Inferior.architecture. */ + +static PyObject * +infpy_architecture (PyObject *self, PyObject *args) +{ + inferior_object *inf = (inferior_object *) self; + + INFPY_REQUIRE_VALID (inf); + + return gdbarch_to_arch_object (inf->inferior->gdbarch); +} + /* Implement repr() for gdb.Inferior. */ static PyObject * @@ -988,6 +1000,9 @@ Return a long with the address of a match, or None." }, METH_VARARGS | METH_KEYWORDS, "thread_from_thread_handle (handle) -> gdb.InferiorThread.\n\ Return thread object corresponding to thread handle." }, + { "architecture", (PyCFunction) infpy_architecture, METH_NOARGS, + "architecture () -> gdb.Architecture\n\ +Return architecture of this inferior." }, { NULL } }; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index f43936b8094..9473646aa05 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-10-06 Tom Tromey + + PR python/19399: + * gdb.python/py-inferior.exp: Add architecture test. + 2018-10-06 Tom Tromey * gdb.base/gnu-ifunc.exp (build): Use standard_output_file. diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp index 38f52573b19..7b1a01b3ea6 100644 --- a/gdb/testsuite/gdb.python/py-inferior.exp +++ b/gdb/testsuite/gdb.python/py-inferior.exp @@ -299,3 +299,11 @@ with_test_prefix "__repr__" { "\\\(, \\\)" \ "print all inferiors 2" } + +# Test architecture. +with_test_prefix "architecture" { + gdb_test "inferior 1" ".*" "switch to first inferior" + gdb_test "python print(gdb.selected_frame().architecture() is gdb.selected_inferior().architecture())" \ + "True" \ + "inferior architecture matches frame architecture" +}