Backport upstream commits 7ae9ecfd801 and 8170efad364 to avoid
using _PyOS_ReadlineTState (RHBZ 2250652).
This commit is contained in:
parent
ebdac5bb6e
commit
9b90152921
@ -187,3 +187,9 @@ Patch042: gdb-rhbz-2232086-generate-gdb-index-consistently.patch
|
|||||||
# non-deterministic gdb-index generation (RH BZ 2232086).
|
# non-deterministic gdb-index generation (RH BZ 2232086).
|
||||||
Patch043: gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch
|
Patch043: gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch
|
||||||
|
|
||||||
|
|
||||||
|
Patch044: gdb-rhbz2250652-gdbpy_gil.patch
|
||||||
|
|
||||||
|
|
||||||
|
Patch045: gdb-rhbz2250652-avoid-PyOS_ReadlineTState.patch
|
||||||
|
|
||||||
|
@ -41,3 +41,5 @@
|
|||||||
%patch -p1 -P041
|
%patch -p1 -P041
|
||||||
%patch -p1 -P042
|
%patch -p1 -P042
|
||||||
%patch -p1 -P043
|
%patch -p1 -P043
|
||||||
|
%patch -p1 -P044
|
||||||
|
%patch -p1 -P045
|
||||||
|
@ -41,3 +41,5 @@ gdb-rhbz-2232086-reduce-size-of-gdb-index.patch
|
|||||||
gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch
|
gdb-rhbz-2232086-cpp-ify-mapped-symtab.patch
|
||||||
gdb-rhbz-2232086-generate-gdb-index-consistently.patch
|
gdb-rhbz-2232086-generate-gdb-index-consistently.patch
|
||||||
gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch
|
gdb-rhbz-2232086-generate-dwarf-5-index-consistently.patch
|
||||||
|
gdb-rhbz2250652-gdbpy_gil.patch
|
||||||
|
gdb-rhbz2250652-avoid-PyOS_ReadlineTState.patch
|
||||||
|
48
gdb-rhbz2250652-avoid-PyOS_ReadlineTState.patch
Normal file
48
gdb-rhbz2250652-avoid-PyOS_ReadlineTState.patch
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= <ahajkova@redhat.com>
|
||||||
|
Date: Mon, 8 Jan 2024 13:24:05 +0100
|
||||||
|
Subject: gdb-rhbz2250652-avoid-PyOS_ReadlineTState.patch
|
||||||
|
|
||||||
|
gdb/python: avoid use of _PyOS_ReadlineTState
|
||||||
|
|
||||||
|
In python/py-gdb-readline.c we make use of _PyOS_ReadlineTState,
|
||||||
|
however, this variable is no longer public in Python 3.13, and so GDB
|
||||||
|
no longer builds.
|
||||||
|
|
||||||
|
We are making use of _PyOS_ReadlineTState in order to re-acquire the
|
||||||
|
Python Global Interpreter Lock (GIL). The _PyOS_ReadlineTState
|
||||||
|
variable is set in Python's outer readline code prior to calling the
|
||||||
|
user (GDB) supplied readline callback function, which for us is
|
||||||
|
gdbpy_readline_wrapper. The gdbpy_readline_wrapper function is called
|
||||||
|
without the GIL held.
|
||||||
|
|
||||||
|
Instead of using _PyOS_ReadlineTState, I propose that we switch to
|
||||||
|
calling PyGILState_Ensure() and PyGILState_Release(). These functions
|
||||||
|
will acquire the GIL based on the current thread. I think this should
|
||||||
|
be sufficient; I can't imagine why we'd be running
|
||||||
|
gdbpy_readline_wrapper on one thread on behalf of a different Python
|
||||||
|
thread.... that would be unexpected I think.
|
||||||
|
|
||||||
|
Approved-By: Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
diff --git a/gdb/python/py-gdb-readline.c b/gdb/python/py-gdb-readline.c
|
||||||
|
--- a/gdb/python/py-gdb-readline.c
|
||||||
|
+++ b/gdb/python/py-gdb-readline.c
|
||||||
|
@@ -56,13 +56,11 @@ gdbpy_readline_wrapper (FILE *sys_stdin, FILE *sys_stdout,
|
||||||
|
if (except.reason == RETURN_QUIT)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
- /* The thread state is nulled during gdbpy_readline_wrapper,
|
||||||
|
- with the original value saved in the following undocumented
|
||||||
|
- variable (see Python's Parser/myreadline.c and
|
||||||
|
- Modules/readline.c). */
|
||||||
|
- PyEval_RestoreThread (_PyOS_ReadlineTState);
|
||||||
|
+
|
||||||
|
+ /* This readline callback is called without the GIL held. */
|
||||||
|
+ gdbpy_gil gil;
|
||||||
|
+
|
||||||
|
gdbpy_convert_exception (except);
|
||||||
|
- PyEval_SaveThread ();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
81
gdb-rhbz2250652-gdbpy_gil.patch
Normal file
81
gdb-rhbz2250652-gdbpy_gil.patch
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= <ahajkova@redhat.com>
|
||||||
|
Date: Mon, 8 Jan 2024 13:12:15 +0100
|
||||||
|
Subject: gdb-rhbz2250652-gdbpy_gil.patch
|
||||||
|
|
||||||
|
gdb: move gdbpy_gil into python-internal.h
|
||||||
|
|
||||||
|
Move gdbpy_gil class into python-internal.h, the next
|
||||||
|
commit wants to make use of this class from a file other
|
||||||
|
than python.c.
|
||||||
|
|
||||||
|
Approved-By: Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
|
||||||
|
--- a/gdb/python/python-internal.h
|
||||||
|
+++ b/gdb/python/python-internal.h
|
||||||
|
@@ -754,6 +754,30 @@ class gdbpy_allow_threads
|
||||||
|
PyThreadState *m_save;
|
||||||
|
};
|
||||||
|
|
||||||
|
+/* A helper class to save and restore the GIL, but without touching
|
||||||
|
+ the other globals that are handled by gdbpy_enter. */
|
||||||
|
+
|
||||||
|
+class gdbpy_gil
|
||||||
|
+{
|
||||||
|
+public:
|
||||||
|
+
|
||||||
|
+ gdbpy_gil ()
|
||||||
|
+ : m_state (PyGILState_Ensure ())
|
||||||
|
+ {
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ~gdbpy_gil ()
|
||||||
|
+ {
|
||||||
|
+ PyGILState_Release (m_state);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ DISABLE_COPY_AND_ASSIGN (gdbpy_gil);
|
||||||
|
+
|
||||||
|
+private:
|
||||||
|
+
|
||||||
|
+ PyGILState_STATE m_state;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/* Use this after a TRY_EXCEPT to throw the appropriate Python
|
||||||
|
exception. */
|
||||||
|
#define GDB_PY_HANDLE_EXCEPTION(Exception) \
|
||||||
|
diff --git a/gdb/python/python.c b/gdb/python/python.c
|
||||||
|
--- a/gdb/python/python.c
|
||||||
|
+++ b/gdb/python/python.c
|
||||||
|
@@ -257,30 +257,6 @@ gdbpy_enter::finalize ()
|
||||||
|
python_gdbarch = target_gdbarch ();
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* A helper class to save and restore the GIL, but without touching
|
||||||
|
- the other globals that are handled by gdbpy_enter. */
|
||||||
|
-
|
||||||
|
-class gdbpy_gil
|
||||||
|
-{
|
||||||
|
-public:
|
||||||
|
-
|
||||||
|
- gdbpy_gil ()
|
||||||
|
- : m_state (PyGILState_Ensure ())
|
||||||
|
- {
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- ~gdbpy_gil ()
|
||||||
|
- {
|
||||||
|
- PyGILState_Release (m_state);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- DISABLE_COPY_AND_ASSIGN (gdbpy_gil);
|
||||||
|
-
|
||||||
|
-private:
|
||||||
|
-
|
||||||
|
- PyGILState_STATE m_state;
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
/* Set the quit flag. */
|
||||||
|
|
||||||
|
static void
|
6
gdb.spec
6
gdb.spec
@ -57,7 +57,7 @@ Version: 14.1
|
|||||||
|
|
||||||
# The release always contains a leading reserved number, start it at 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.
|
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
|
|
||||||
License: GPL-3.0-or-later AND BSD-3-clause AND FSFAP AND LGPL-2.1-or-later AND GPL-2.0-or-later AND LGPL-2.0-or-later AND LicenseRef-Fedora-Public-Domain AND GFDL-1.3-or-later AND LGPL-2.0-or-later WITH GCC-exception-2.0 AND GPL-3.0-or-later WITH GCC-exception-3.1 AND GPL-2.0-or-later WITH GNU-compiler-exception
|
License: GPL-3.0-or-later AND BSD-3-clause AND FSFAP AND LGPL-2.1-or-later AND GPL-2.0-or-later AND LGPL-2.0-or-later AND LicenseRef-Fedora-Public-Domain AND GFDL-1.3-or-later AND LGPL-2.0-or-later WITH GCC-exception-2.0 AND GPL-3.0-or-later WITH GCC-exception-3.1 AND GPL-2.0-or-later WITH GNU-compiler-exception
|
||||||
# Do not provide URL for snapshots as the file lasts there only for 2 days.
|
# Do not provide URL for snapshots as the file lasts there only for 2 days.
|
||||||
@ -1250,6 +1250,10 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jan 8 2024 Alexandra Hájková <ahajkova@redhat.com> - 14.1-2
|
||||||
|
- Backport upstream commits 7ae9ecfd801 and 8170efad364 to avoid
|
||||||
|
using _PyOS_ReadlineTState (RHBZ 2250652).
|
||||||
|
|
||||||
* Fri Dec 8 2023 Kevin Buettner <kevinb@redhat.com> - 14.1-1
|
* Fri Dec 8 2023 Kevin Buettner <kevinb@redhat.com> - 14.1-1
|
||||||
- Rebase to FSF GDB 14.1.
|
- Rebase to FSF GDB 14.1.
|
||||||
- Update local patches:
|
- Update local patches:
|
||||||
|
Loading…
Reference in New Issue
Block a user