Make 'import gdb.events' work

Pierre-Marie noticed that, while gdb.events is a Python module, it
can't be imported.  This patch changes how this module is created, so
that it can be imported, while also ensuring that the module is always
visible, just as it was in the past.

This new approach required one non-obvious change -- when running
gdb.base/warning.exp, where --data-directory is intentionally not
found, the event registries can now be nullptr.  Consequently, this
patch probably also requires

    https://sourceware.org/pipermail/gdb-patches/2022-June/189796.html

Note that this patch obsoletes

    https://sourceware.org/pipermail/gdb-patches/2022-June/189797.html
This commit is contained in:
Tom Tromey 2022-06-03 07:59:49 -06:00
parent 736918239b
commit 3acd9a692d
6 changed files with 37 additions and 22 deletions

View file

@ -2005,11 +2005,20 @@ do_start_initialization ()
remain alive for the duration of the program's execution, so
it is not freed after this call. */
Py_SetProgramName (progname_copy);
/* Define _gdb as a built-in module. */
PyImport_AppendInittab ("_gdb", init__gdb_module);
#endif
/* Define all internal modules. These are all imported (and thus
created) during initialization. */
struct _inittab mods[3] =
{
{ "_gdb", init__gdb_module },
{ "_gdbevents", gdbpy_events_mod_func },
{ nullptr, nullptr }
};
if (PyImport_ExtendInittab (mods) < 0)
return false;
Py_Initialize ();
#if PY_VERSION_HEX < 0x03090000
/* PyEval_InitThreads became deprecated in Python 3.9 and will
@ -2077,7 +2086,6 @@ do_start_initialization ()
|| gdbpy_initialize_thread () < 0
|| gdbpy_initialize_inferior () < 0
|| gdbpy_initialize_eventregistry () < 0
|| gdbpy_initialize_py_events () < 0
|| gdbpy_initialize_event () < 0
|| gdbpy_initialize_arch () < 0
|| gdbpy_initialize_registers () < 0