gdb: make Python conftest compatible with Python limited C API

The current test to check the support of '--dynamic-list' linker flag
uses PyRun_SimpleString (), which is part of the unstable API. As it is
now, the test will systematically fail due to the undefined symbol
rather than testing the import of ctypes.
This patch replaces PyRun_SimpleString () by an equivalent code relying
on the limited C API, and compatible with Python 3.4.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23830
Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
Matthieu Longo
2025-07-16 17:17:36 +01:00
parent 3510e35e96
commit 5643188363
2 changed files with 20 additions and 6 deletions

13
gdb/configure vendored
View File

@@ -31034,11 +31034,18 @@ else
int
main ()
{
int err;
const char *code = "import ctypes\n";
Py_Initialize ();
err = PyRun_SimpleString ("import ctypes\n");
PyObject *main_module = PyImport_AddModule ("__main__");
PyObject *global_dict = PyModule_GetDict (main_module);
PyObject *local_dict = PyDict_New ();
PyObject *py_code = Py_CompileString (code, "test", Py_single_input);
if (py_code == NULL)
return 1;
PyObject *res = PyEval_EvalCode (py_code, global_dict, local_dict);
Py_Finalize ();
return err == 0 ? 0 : 1;
return res ? 0 : 1;
;
return 0;
}

View File

@@ -1761,11 +1761,18 @@ if test "${gdb_native}" = yes; then
AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[#include "Python.h"],
[int err;
[
const char *code = "import ctypes\n";
Py_Initialize ();
err = PyRun_SimpleString ("import ctypes\n");
PyObject *main_module = PyImport_AddModule ("__main__");
PyObject *global_dict = PyModule_GetDict (main_module);
PyObject *local_dict = PyDict_New ();
PyObject *py_code = Py_CompileString (code, "test", Py_single_input);
if (py_code == NULL)
return 1;
PyObject *res = PyEval_EvalCode (py_code, global_dict, local_dict);
Py_Finalize ();
return err == 0 ? 0 : 1;])],
return res ? 0 : 1;])],
[dynamic_list=true], [], [true])
LIBS="$old_LIBS"
CFLAGS="$old_CFLAGS"