diff --git a/_gdb.spec.Patch.include b/_gdb.spec.Patch.include index 8f81947..1d8ffd9 100644 --- a/_gdb.spec.Patch.include +++ b/_gdb.spec.Patch.include @@ -397,3 +397,6 @@ Patch097: gdb-rhbz1553104-s390x-arch12-test.patch # Fix int conversion error from bfd/elf.c when compiling with gcc 10 Patch098: gdb-rhbz1818011-bfd-gcc10-error.patch +# Backport fix for deprecation of PyEval_InitThreads in Python 3.9. +Patch099: gdb-rhbz1822715-fix-python-deprecation.patch + diff --git a/_gdb.spec.patch.include b/_gdb.spec.patch.include index b089bb1..dddd45a 100644 --- a/_gdb.spec.patch.include +++ b/_gdb.spec.patch.include @@ -96,3 +96,4 @@ %patch096 -p1 %patch097 -p1 %patch098 -p1 +%patch099 -p1 diff --git a/_patch_order b/_patch_order index 16cee99..a4377d5 100644 --- a/_patch_order +++ b/_patch_order @@ -96,3 +96,4 @@ gdb-archer.patch gdb-vla-intel-fix-print-char-array.patch gdb-rhbz1553104-s390x-arch12-test.patch gdb-rhbz1818011-bfd-gcc10-error.patch +gdb-rhbz1822715-fix-python-deprecation.patch diff --git a/gdb-rhbz1822715-fix-python-deprecation.patch b/gdb-rhbz1822715-fix-python-deprecation.patch new file mode 100644 index 0000000..6d7c10b --- /dev/null +++ b/gdb-rhbz1822715-fix-python-deprecation.patch @@ -0,0 +1,70 @@ +From FEDORA_PATCHES Mon Sep 17 00:00:00 2001 +From: Kevin Buettner +Date: Thu, 16 Apr 2020 05:27:26 -0700 +Subject: gdb-rhbz1822715-fix-python-deprecation.patch + +;; Backport fix for deprecation of PyEval_InitThreads in Python 3.9. + +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 --git a/gdb/python/python.c b/gdb/python/python.c +--- a/gdb/python/python.c ++++ b/gdb/python/python.c +@@ -1618,7 +1618,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"); diff --git a/gdb.spec b/gdb.spec index 8afe97c..847c19f 100644 --- a/gdb.spec +++ b/gdb.spec @@ -35,7 +35,7 @@ Version: 9.1 # The release always contains a leading reserved number, start it at 1. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing. -Release: 5%{?dist} +Release: 6%{?dist} License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and LGPLv3+ and BSD and Public Domain and GFDL # Do not provide URL for snapshots as the file lasts there only for 2 days. @@ -1155,6 +1155,10 @@ fi %endif %changelog +* Thu Apr 16 2020 Kevin Buettner - 9.1-6 +- Fix build breakage of gdb/python/python.c due to use of deprecated + Python function (RHBZ 1822715, Kevin Buettner) + * Wed Apr 08 2020 Kevin Buettner - 9.1-5 - Fix build breakage when compiling bfd/elf.c with gcc 10. (RHBZ 1818011, H.J. Lu)