python: Add Progspace.objfiles method

This patch adds an objfiles method to the Progspace object, which
returns a sequence of the objfiles associated to that program space.  I
chose a method rather than a property for symmetry with gdb.objfiles().

gdb/ChangeLog:

	* python/py-progspace.c (PSPY_REQUIRE_VALID): New macro.
	(pspy_get_objfiles): New function.
	(progspace_object_methods): New.
	(pspace_object_type): Add tp_methods callback.
	* python/python-internal.h (build_objfiles_list): New
	declaration.
	* python/python.c (build_objfiles_list): New function.
	(gdbpy_objfiles): Implement using build_objfiles_list.
	* NEWS: Mention the Progspace.objfiles method.

gdb/doc/ChangeLog:

	* python.texi (Program Spaces In Python): Document the
	Progspace.objfiles method.
	(Objfiles In Python): Mention that gdb.objfiles() is identical
	to gdb.selected_inferior().progspace.objfiles().

gdb/testsuite/ChangeLog:

	* gdb.python/py-progspace.exp: Test the Progspace.objfiles
	method.
This commit is contained in:
Simon Marchi 2018-09-13 15:40:41 -04:00
parent a40bf0c2e9
commit 0ae1a3211a
9 changed files with 122 additions and 14 deletions

View file

@ -1437,10 +1437,10 @@ gdbpy_get_current_objfile (PyObject *unused1, PyObject *unused2)
return result;
}
/* Return a sequence holding all the Objfiles. */
/* See python-internal.h. */
static PyObject *
gdbpy_objfiles (PyObject *unused1, PyObject *unused2)
gdbpy_ref<>
build_objfiles_list (program_space *pspace)
{
struct objfile *objf;
@ -1448,15 +1448,23 @@ gdbpy_objfiles (PyObject *unused1, PyObject *unused2)
if (list == NULL)
return NULL;
ALL_OBJFILES (objf)
{
PyObject *item = objfile_to_objfile_object (objf);
ALL_PSPACE_OBJFILES (pspace, objf)
{
PyObject *item = objfile_to_objfile_object (objf);
if (!item || PyList_Append (list.get (), item) == -1)
return NULL;
}
if (item == nullptr || PyList_Append (list.get (), item) == -1)
return NULL;
}
return list.release ();
return list;
}
/* Return a sequence holding all the Objfiles. */
static PyObject *
gdbpy_objfiles (PyObject *unused1, PyObject *unused2)
{
return build_objfiles_list (current_program_space).release ();
}
/* Compute the list of active python type printers and store them in