From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1028) id 81C22385B835; Thu, 16 Apr 2020 12:14:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 81C22385B835 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Kevin Buettner To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Fix compilation of python/python.c for Python 3.9 X-Act-Checkin: binutils-gdb X-Git-Author: Kevin Buettner X-Git-Refname: refs/heads/master X-Git-Oldrev: aec72fda3b320c36eb99fc1c4cf95b10fc026729 X-Git-Newrev: 97ed802d1531632efba69f34accd811217579d0b Message-Id: <20200416121422.81C22385B835@sourceware.org> Date: Thu, 16 Apr 2020 12:14:22 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Apr 2020 12:14:22 -0000 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=97ed802d1531632efba69f34accd811217579d0b commit 97ed802d1531632efba69f34accd811217579d0b Author: Kevin Buettner Date: Wed Apr 15 10:20:53 2020 -0700 Fix compilation of python/python.c for Python 3.9 This commit fixes a compilation warning/error when building GDB with Python 3.9: g++ -x c++ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -DDNF_DEBUGINFO_INSTALL -I. -I../../gdb -I../../gdb/config -DLOCALEDIR="\"/usr/share/locale\"" -DHAVE_CONFIG_H -I../../gdb/../include/opcode -I../bfd -I../../gdb/../bfd -I../../gdb/../include -I../libdecnumber -I../../gdb/../libdecnumber -I../../gdb/../gnulib/import -I../gnulib/import -DTUI=1 -I/usr/include/guile/2.0 -pthread -I/usr/include/python3.9 -I/usr/include/python3.9 -I../../gdb/.. -pthread -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wno-mismatched-tags -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wdeprecated-copy -Wdeprecated-copy-dtor -Wredundant-move -Wformat -Wformat-nonliteral -Wno-unused -Werror -c -o ser-tcp.o -MT ser-tcp.o -MMD -MP -MF ./.deps/ser-tcp.Tpo ../../gdb/ser-tcp.c ../../gdb/python/python.c: In function 'bool do_start_initialization()': ../../gdb/python/python.c:1621:23: error: 'void PyEval_InitThreads()' is deprecated [-Werror=deprecated-declarations] 1621 | PyEval_InitThreads (); | ^ In file included from /usr/include/python3.9/Python.h:141, from ../../gdb/python/python-internal.h:86, from ../../gdb/python/python.c:92: /usr/include/python3.9/ceval.h:132:37: note: declared here 132 | Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void); | ^~~~~~~~~~~~~~~~~~ Information about the deprecated function can be found here: https://docs.python.org/3.9/whatsnew/3.9.html#deprecated Specifically, with regard to PyEval_InitThreads(), it says: The PyEval_InitThreads() and PyEval_ThreadsInitialized() functions are now deprecated and will be removed in Python 3.11. Calling PyEval_InitThreads() now does nothing. The GIL is initialized by Py_Initialize() since Python 3.7. (Contributed by Victor Stinner in bpo-39877.) I chose to disable the call with a #if test using PY_VERSION_HEX. There is precedent for use of PY_VERSION_HEX; it's used in two places in python-internal.h. I noticed that under certain circumstances python-internal.h defines PyEval_InitThreads to be nothing, which accomplishes the same thing. I considered doing something similar for this case, but decided against it because, at some point in the future, the presence of PyEval_InitThreads() without some explanation will be confusing to a reader who won't be able to find PyEval_InitThreads in the current (future for us) Python API. IMO, use of the #if along with an accompanying comment seemed more straightforward. gdb/ChangeLog: * python/python.c (do_start_initialization): Don't call PyEval_InitThreads for Python 3.9 and beyond. Change-Id: I0679fc10b6b76761a99538568f13188c6d8014e0 Diff: --- gdb/ChangeLog | 5 +++++ gdb/python/python.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 291a3ae70d8..0130d06c9fc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-04-16 Kevin Buettner + + * python/python.c (do_start_initialization): Don't call + PyEval_InitThreads for Python 3.9 and beyond. + 2020-04-15 Kamil Rytarowski * obsd-nat.c (obsd_nat_target::update_thread_list): Pass "this" to diff --git a/gdb/python/python.c b/gdb/python/python.c index 02543aea710..e56520ab11a 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1701,7 +1701,12 @@ do_start_initialization () #endif Py_Initialize (); +#if PY_VERSION_HEX < 0x03090000 + /* PyEval_InitThreads became deprecated in Python 3.9 and will + be removed in Python 3.11. Prior to Python 3.7, this call was + required to initialize the GIL. */ PyEval_InitThreads (); +#endif #ifdef IS_PY3K gdb_module = PyImport_ImportModule ("_gdb");