From: Tom Tromey Date: Sun, 7 Oct 2018 04:57:19 +0000 (-0600) Subject: Add Inferior.architecture method X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=add5ded5e476918ef8b05823801531de2f51fa9c;p=binutils-gdb.git Add Inferior.architecture method I've written a couple of gdb unwinders in Python, and while doing so, I wanted to find the architecture of the inferior. (In an unwinder in particular, one can't use the frame's architecture, because there is no frame.) This patch adds Inferior.architecture to allow this. Normally I think I would have chosen an attribute and not a method here, but seeing that Frame.architecture is a method, I chose a method as well, for consistency. gdb/ChangeLog 2018-10-06 Tom Tromey PR python/19399: * python/py-inferior.c: Add "architecture" entry. (infpy_architecture): New function. gdb/doc/ChangeLog 2018-10-06 Tom Tromey PR python/19399: * python.texi (Inferiors In Python): Document Inferior.Architecture. gdb/testsuite/ChangeLog 2018-10-06 Tom Tromey PR python/19399: * gdb.python/py-inferior.exp: Add architecture test. --- 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" +}