This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] fix build failure with Python 3.7
- From: <Paul dot Koning at dell dot com>
- To: <gdb-patches at sourceware dot org>
- Date: Thu, 31 May 2018 17:12:14 +0000
- Subject: [PATCH] fix build failure with Python 3.7
This cures PR gdb/33470, build failure due to calling an internal
API in Python that changed in V3.7. The code now uses the
"inittab" mechanism in Python, which is the approved way to
make compiled-in modules known to Python.
Gdb starts properly and I can see the _gdb module. On my test
system (a Mac) it's hard to get gdb to run at all, so the
test suite is a bit problematic. What other tests are needed?
paul
gdb/ChangeLog:
2018-05-31 Paul Koning <paul_koning@dell.com>
PR gdb/33470
* python/python.c (do_start_initialization):
Avoid call to internal Python API.
(PyInit__gdb): New function.
diff --git a/gdb/python/python.c b/gdb/python/python.c
index c29e7d7a6b..89443aee25 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -1667,6 +1667,14 @@ finalize_python (void *ignore)
restore_active_ext_lang (previous_active);
}
+#ifdef IS_PY3K
+PyMODINIT_FUNC
+PyInit__gdb (void)
+{
+ return PyModule_Create (&python_GdbModuleDef);
+}
+#endif
+
static bool
do_start_initialization ()
{
@@ -1707,6 +1715,9 @@ 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", PyInit__gdb);
#else
Py_SetProgramName (progname.release ());
#endif
@@ -1716,9 +1727,7 @@ do_start_initialization ()
PyEval_InitThreads ();
#ifdef IS_PY3K
- gdb_module = PyModule_Create (&python_GdbModuleDef);
- /* Add _gdb module to the list of known built-in modules. */
- _PyImport_FixupBuiltin (gdb_module, "_gdb");
+ gdb_module = PyImport_ImportModule ("_gdb");
#else
gdb_module = Py_InitModule ("_gdb", python_GdbMethods);
#endif