aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/python.c
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>2010-04-15 19:54:13 +0000
committerDoug Evans <dje@google.com>2010-04-15 19:54:13 +0000
commitfa33c3cd050c9f8a33ab0826479fd3e0f26a3da6 (patch)
tree8aa1bd5a3237ffff09f051cad7544427a67ed81e /gdb/python/python.c
parent3f7b2faa4bb3f35f6c88687b6943cdbe6003b615 (diff)
downloadgdb-fa33c3cd050c9f8a33ab0826479fd3e0f26a3da6.zip
gdb-fa33c3cd050c9f8a33ab0826479fd3e0f26a3da6.tar.gz
gdb-fa33c3cd050c9f8a33ab0826479fd3e0f26a3da6.tar.bz2
* NEWS: Add entry for python program space support.
* Makefile.in (SUBDIR_PYTHON_OBS): Add py-progspace.o. (SUBDIR_PYTHON_SRCS): Add py-progspace.c. (py-progspace.o): New rule. * python/py-prettyprint.c (find_pretty_printer_from_objfiles): New function. (find_pretty_printer_from_progspace): New function. (find_pretty_printer_from_gdb): New function. (find_pretty_printer): Rewrite. * python/py-progspace.c: New file. * python/python-internal.h (program_space): Add forward decl. (pspace_to_pspace_object, pspy_get_printers): Declare. (gdbpy_initialize_pspace): Declare. * python/python.c: #include "progspace.h". (gdbpy_get_current_progspace, gdbpy_progspaces): New functions. (_initialize_python): Call gdbpy_initialize_pspace. (GdbMethods): Add current_progspace, progspaces. doc/ * gdb.texinfo (Python API): Add progspaces section. (Selecting Pretty-Printers): Progspace pretty-printers are searched too. (Progspaces In Python): New section. testsuite/ * gdb.python/py-progspace.c: New file. * gdb.python/py-progspace.exp: New file.
Diffstat (limited to 'gdb/python/python.c')
-rw-r--r--gdb/python/python.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/gdb/python/python.c b/gdb/python/python.c
index b21ea99..935715a 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -23,6 +23,7 @@
#include "ui-out.h"
#include "cli/cli-script.h"
#include "gdbcmd.h"
+#include "progspace.h"
#include "objfiles.h"
#include "observer.h"
#include "value.h"
@@ -417,6 +418,47 @@ gdbpy_print_stack (void)
+/* Return the current Progspace.
+ There always is one. */
+
+static PyObject *
+gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2)
+{
+ PyObject *result;
+
+ result = pspace_to_pspace_object (current_program_space);
+ if (result)
+ Py_INCREF (result);
+ return result;
+}
+
+/* Return a sequence holding all the Progspaces. */
+
+static PyObject *
+gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
+{
+ struct program_space *ps;
+ PyObject *list;
+
+ list = PyList_New (0);
+ if (!list)
+ return NULL;
+
+ ALL_PSPACES (ps)
+ {
+ PyObject *item = pspace_to_pspace_object (ps);
+ if (!item || PyList_Append (list, item) == -1)
+ {
+ Py_DECREF (list);
+ return NULL;
+ }
+ }
+
+ return list;
+}
+
+
+
/* The "current" objfile. This is set when gdb detects that a new
objfile has been loaded. It is only set for the duration of a call
to gdbpy_new_objfile; it is NULL at other times. */
@@ -512,6 +554,7 @@ gdbpy_get_current_objfile (PyObject *unused1, PyObject *unused2)
}
/* Return a sequence holding all the Objfiles. */
+
static PyObject *
gdbpy_objfiles (PyObject *unused1, PyObject *unused2)
{
@@ -668,6 +711,7 @@ Enables or disables auto-loading of Python code when an object is opened."),
gdbpy_initialize_blocks ();
gdbpy_initialize_functions ();
gdbpy_initialize_types ();
+ gdbpy_initialize_pspace ();
gdbpy_initialize_objfile ();
gdbpy_initialize_breakpoints ();
gdbpy_initialize_lazy_string ();
@@ -734,6 +778,11 @@ static PyMethodDef GdbMethods[] =
{ "default_visualizer", gdbpy_default_visualizer, METH_VARARGS,
"Find the default visualizer for a Value." },
+ { "current_progspace", gdbpy_get_current_progspace, METH_NOARGS,
+ "Return the current Progspace." },
+ { "progspaces", gdbpy_progspaces, METH_NOARGS,
+ "Return a sequence of all progspaces." },
+
{ "current_objfile", gdbpy_get_current_objfile, METH_NOARGS,
"Return the current Objfile being loaded, or None." },
{ "objfiles", gdbpy_objfiles, METH_NOARGS,