diff options
author | Doug Evans <dje@google.com> | 2010-04-15 19:54:13 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2010-04-15 19:54:13 +0000 |
commit | fa33c3cd050c9f8a33ab0826479fd3e0f26a3da6 (patch) | |
tree | 8aa1bd5a3237ffff09f051cad7544427a67ed81e /gdb/python/python.c | |
parent | 3f7b2faa4bb3f35f6c88687b6943cdbe6003b615 (diff) | |
download | gdb-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.c | 49 |
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, |