Re: GDB fails to build with Python 3.7

Phil Muldoon <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 29/05/18 13:11, [email protected] wrote:
> 
> 
>> On May 29, 2018, at 7:37 AM, Phil Muldoon <[email protected]> wrote:
>>
>> Currently GDB fails to build with Python 3.7
>>
>> https://bugs.python.org/issue33470
>>
>> This is because we use an internal Python API:
>>
>> #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");
>> #else
>>  gdb_module = Py_InitModule ("_gdb", python_GdbMethods);
>> #endif
>>
>> (the _PyImport_FixupBuiltin in python.c).
>>
>> This internal API has been changed. According to the advice of the Python
>> maintainers we should never have used it in the first place. I didn't
>> add this (at least I don't think I did!), so I'm asking whomever
>> authored that code to please change it to be 3.7 compatible. I'm not
>> sure what the code achieves so I'm reluctant to touch it in case of
>> breakages on platforms I don't have easily access to.
> 
> That may be part of my original Python 3 support work.  I'd have to
> dig back in somewhat dusty memories to find the reason.  Part of the
> problem is that Python initialization is different in Python 3 and
> the differences are (or were?) undocumented and not particularly obvious.
> 
> I'll take a look.  Right now I can't get configure to find Python at
> all on my Mac -- "--with-python=/Library/Frameworks...." isn't doing it.
> 
> 	paul
> 
> BUILDSTDERR: ../../gdb/python/python.c:1853:45: error: too few arguments to function 'int _PyImport_FixupBuiltin(PyObject*, const char*, PyObject*)'

Paul,

Thanks! And gah, I forgot to add the developers comments:

"This is a private API, gdb should not use it. I don't know why gdb
chose to call a private function.

To fix gdb, an #ifdef using PY_VERSION_HEX should be use to pass one
more additional parameter to Python 3.7: "modules". This parameter can
be found in interp->modules, where interp is the current
interpreter. For example, use PyThreadState_Get()->interp to get the
current interpreter."

Cheers

Phil
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.