class, it signals to gdb that the printer may implement new
pretty-printer methods.
+ ** New attribute Progspace.symbol_file. This attribute holds the
+ gdb.Objfile that corresponds to Progspace.filename (when
+ Progspace.filename is not None), otherwise, this attribute is
+ itself None.
+
*** Changes in GDB 13
* MI version 1 is deprecated, and will be removed in GDB 14.
will be @code{None}.
@end defvar
+@defvar Progspace.symbol_file
+The @code{gdb.Objfile} representing the main symbol file (from which
+debug symbols have been loaded) for the @code{gdb.Progspace}. This is
+the symbol file set by the @kbd{symbol-file} or @kbd{file} commands.
+
+This will be the @code{gdb.Objfile} representing
+@code{Progspace.filename} when @code{Progspace.filename} is not
+@code{None}.
+
+If there is no main symbol table currently loaded, then this attribute
+will be @code{None}.
+
+If the @code{Progspace} is invalid, i.e.@:, when
+@code{Progspace.is_valid()} returns @code{False}, then attempting to
+access this attribute will raise a @code{RuntimeError} exception.
+@end defvar
+
@defvar Progspace.pretty_printers
The @code{pretty_printers} attribute is a list of functions. It is
used to look up pretty-printers. A @code{Value} is passed to each
Py_RETURN_NONE;
}
+/* Implement the gdb.Progspace.symbol_file attribute. Retun the
+ gdb.Objfile corresponding to the currently loaded symbol-file, or None
+ if no symbol-file is loaded. If the Progspace is invalid then raise an
+ exception. */
+
+static PyObject *
+pspy_get_symbol_file (PyObject *self, void *closure)
+{
+ pspace_object *obj = (pspace_object *) self;
+
+ PSPY_REQUIRE_VALID (obj);
+
+ struct objfile *objfile = obj->pspace->symfile_object_file;
+
+ if (objfile != nullptr)
+ return objfile_to_objfile_object (objfile).release ();
+
+ Py_RETURN_NONE;
+}
+
static void
pspy_dealloc (PyObject *self)
{
"The __dict__ for this progspace.", &pspace_object_type },
{ "filename", pspy_get_filename, NULL,
"The filename of the progspace's main symbol file, or None.", nullptr },
+ { "symbol_file", pspy_get_symbol_file, nullptr,
+ "The gdb.Objfile for the progspace's main symbol file, or None.",
+ nullptr},
{ "pretty_printers", pspy_get_printers, pspy_set_printers,
"Pretty printers.", NULL },
{ "frame_filters", pspy_get_frame_filters, pspy_set_frame_filters,
gdb_test "python print (gdb.current_progspace().filename)" "None" \
"current progspace filename (None)"
+gdb_test "python print (gdb.current_progspace().symbol_file)" "None" \
+ "current progspace symbol_file is None"
gdb_test "python print (gdb.progspaces())" "\\\[<gdb.Progspace object at $hex>\\\]"
gdb_test_no_output "python dir(gdb.current_progspace())"
gdb_test "python print (progspace.filename)" "py-progspace" \
"current progspace filename (py-progspace)"
+gdb_test "python print (gdb.current_progspace().symbol_file)" \
+ "<gdb.Objfile filename=.*/py-progspace>" \
+ "current progspace symbol_file is set correctly"
+
gdb_py_test_silent_cmd "python progspace.random_attribute = 42" \
"Set random attribute in progspace" 1
gdb_test "python print (progspace.random_attribute)" "42" \
gdb_test_no_output "remove-inferiors 2"
gdb_test "python print (progspace2.objfiles ())" \
"RuntimeError: Program space no longer exists.*"
+
+gdb_test "python print (progspace2.symbol_file)" \
+ "RuntimeError: Program space no longer exists.*"