!68 gdb: fix build error
From: @WizardHowl Reviewed-by: @SuperSix173 Signed-off-by: @SuperSix173
This commit is contained in:
commit
63a76677af
256
gdb-Handle-Python-3.11-deprecation-of-PySys_SetPath-and-.patch
Normal file
256
gdb-Handle-Python-3.11-deprecation-of-PySys_SetPath-and-.patch
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
From eb6d8345fb21aa4eba9b02289645f3265c02175b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kevin Buettner <kevinb@redhat.com>
|
||||||
|
Date: Thu, 30 Jun 2022 15:40:29 -0700
|
||||||
|
Subject: [PATCH] Handle Python 3.11 deprecation of PySys_SetPath and
|
||||||
|
Py_SetProgramName
|
||||||
|
|
||||||
|
Python 3.11 deprecates PySys_SetPath and Py_SetProgramName. The
|
||||||
|
PyConfig API replaces these and other functions. This commit uses the
|
||||||
|
PyConfig API to provide equivalent functionality while also preserving
|
||||||
|
support for older versions of Python, i.e. those before Python 3.8.
|
||||||
|
|
||||||
|
A beta version of Python 3.11 is available in Fedora Rawhide. Both
|
||||||
|
Fedora 35 and Fedora 36 use Python 3.10, while Fedora 34 still used
|
||||||
|
Python 3.9. I've tested these changes on Fedora 34, Fedora 36, and
|
||||||
|
rawhide, though complete testing was not possible on rawhide due to
|
||||||
|
a kernel bug. That being the case, I decided to enable the newer
|
||||||
|
PyConfig API by testing PY_VERSION_HEX against 0x030a0000. This
|
||||||
|
corresponds to Python 3.10.
|
||||||
|
|
||||||
|
We could try to use the PyConfig API for Python versions as early as 3.8,
|
||||||
|
but I'm reluctant to do this as there may have been PyConfig related
|
||||||
|
bugs in earlier versions which have since been fixed. Recent linux
|
||||||
|
distributions should have support for Python 3.10. This should be
|
||||||
|
more than adequate for testing the new Python initialization code in
|
||||||
|
GDB.
|
||||||
|
|
||||||
|
Information about the PyConfig API as well as the motivation behind
|
||||||
|
deprecating the old interface can be found at these links:
|
||||||
|
|
||||||
|
https://github.com/python/cpython/issues/88279
|
||||||
|
https://peps.python.org/pep-0587/
|
||||||
|
https://docs.python.org/3.11/c-api/init_config.html
|
||||||
|
|
||||||
|
The v2 commit also addresses several problems that Simon found in
|
||||||
|
the v1 version.
|
||||||
|
|
||||||
|
In v1, I had used Py_DontWriteBytecodeFlag in the new initialization
|
||||||
|
code, but Simon pointed out that this global configuration variable
|
||||||
|
will be deprecated in Python 3.12. This version of the patch no longer
|
||||||
|
uses Py_DontWriteBytecodeFlag in the new initialization code.
|
||||||
|
Additionally, both Py_DontWriteBytecodeFlag and Py_IgnoreEnvironmentFlag
|
||||||
|
will no longer be used when building GDB against Python 3.10 or higher.
|
||||||
|
While it's true that both of these global configuration variables are
|
||||||
|
deprecated in Python 3.12, it makes sense to disable their use for
|
||||||
|
gdb builds against 3.10 and higher since those are the versions for
|
||||||
|
which the PyConfig API is now being used by GDB. (The PyConfig API
|
||||||
|
includes different mechanisms for making the same settings afforded
|
||||||
|
by use of the soon-to-be deprecated global configuration variables.)
|
||||||
|
|
||||||
|
Simon also noted that PyConfig_Clear() would not have be called for
|
||||||
|
one of the failure paths. I've fixed that problem and also made the
|
||||||
|
rest of the "bail out" code more direct. In particular,
|
||||||
|
PyConfig_Clear() will always be called, both for success and failure.
|
||||||
|
|
||||||
|
The v3 patch addresses some rebase conflicts related to module
|
||||||
|
initialization . Commit 3acd9a692dd ("Make 'import gdb.events' work")
|
||||||
|
uses PyImport_ExtendInittab instead of PyImport_AppendInittab. That
|
||||||
|
commit also initializes a struct for each module to import. Both the
|
||||||
|
initialization and the call to were moved ahead of the ifdefs to avoid
|
||||||
|
having to replicate (at least some of) the code three times in various
|
||||||
|
portions of the ifdefs.
|
||||||
|
|
||||||
|
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28668
|
||||||
|
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29287
|
||||||
|
---
|
||||||
|
gdb/python/python-internal.h | 5 ++
|
||||||
|
gdb/python/python.c | 99 +++++++++++++++++++++++++++++-------
|
||||||
|
2 files changed, 86 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
|
||||||
|
index 84f45ca..70808c9 100644
|
||||||
|
--- a/gdb/python/python-internal.h
|
||||||
|
+++ b/gdb/python/python-internal.h
|
||||||
|
@@ -199,6 +199,10 @@ gdb_PySys_GetObject (const char *name)
|
||||||
|
|
||||||
|
#define PySys_GetObject gdb_PySys_GetObject
|
||||||
|
|
||||||
|
+/* PySys_SetPath was deprecated in Python 3.11. Disable the deprecated
|
||||||
|
+ code for Python 3.10 and newer. */
|
||||||
|
+#if PY_VERSION_HEX < 0x030a0000
|
||||||
|
+
|
||||||
|
/* PySys_SetPath's 'path' parameter was missing the 'const' qualifier
|
||||||
|
before Python 3.6. Hence, we wrap it in a function to avoid errors
|
||||||
|
when compiled with -Werror. */
|
||||||
|
@@ -212,6 +216,7 @@ gdb_PySys_SetPath (const GDB_PYSYS_SETPATH_CHAR *path)
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PySys_SetPath gdb_PySys_SetPath
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/* Wrap PyGetSetDef to allow convenient construction with string
|
||||||
|
literals. Unfortunately, PyGetSetDef's 'name' and 'doc' members
|
||||||
|
diff --git a/gdb/python/python.c b/gdb/python/python.c
|
||||||
|
index e3f2550..97f421d 100644
|
||||||
|
--- a/gdb/python/python.c
|
||||||
|
+++ b/gdb/python/python.c
|
||||||
|
@@ -1709,8 +1709,14 @@ set_python_ignore_environment (const char *args, int from_tty,
|
||||||
|
struct cmd_list_element *c)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
+ /* Py_IgnoreEnvironmentFlag is deprecated in Python 3.12. Disable
|
||||||
|
+ its usage in Python 3.10 and above since the PyConfig mechanism
|
||||||
|
+ is now (also) used in 3.10 and higher. See do_start_initialization()
|
||||||
|
+ in this file. */
|
||||||
|
+#if PY_VERSION_HEX < 0x030a0000
|
||||||
|
Py_IgnoreEnvironmentFlag = python_ignore_environment ? 1 : 0;
|
||||||
|
#endif
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When this is turned on before Python is initialised then Python will
|
||||||
|
@@ -1738,6 +1744,24 @@ show_python_dont_write_bytecode (struct ui_file *file, int from_tty,
|
||||||
|
value);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Return value to assign to PyConfig.write_bytecode or, when
|
||||||
|
+ negated (via !), Py_DontWriteBytecodeFlag. Py_DontWriteBytecodeFlag
|
||||||
|
+ is deprecated in Python 3.12. */
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
+python_write_bytecode ()
|
||||||
|
+{
|
||||||
|
+ int wbc = 0;
|
||||||
|
+
|
||||||
|
+ if (python_dont_write_bytecode == AUTO_BOOLEAN_AUTO)
|
||||||
|
+ wbc = (!python_ignore_environment
|
||||||
|
+ && getenv ("PYTHONDONTWRITEBYTECODE") != nullptr) ? 0 : 1;
|
||||||
|
+ else
|
||||||
|
+ wbc = python_dont_write_bytecode == AUTO_BOOLEAN_TRUE ? 0 : 1;
|
||||||
|
+
|
||||||
|
+ return wbc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Implement 'set python dont-write-bytecode'. This sets Python's internal
|
||||||
|
flag no matter when the command is issued, however, if this is used
|
||||||
|
after Py_Initialize has been called then many modules could already
|
||||||
|
@@ -1748,13 +1772,13 @@ set_python_dont_write_bytecode (const char *args, int from_tty,
|
||||||
|
struct cmd_list_element *c)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
- if (python_dont_write_bytecode == AUTO_BOOLEAN_AUTO)
|
||||||
|
- Py_DontWriteBytecodeFlag
|
||||||
|
- = (!python_ignore_environment
|
||||||
|
- && getenv ("PYTHONDONTWRITEBYTECODE") != nullptr) ? 1 : 0;
|
||||||
|
- else
|
||||||
|
- Py_DontWriteBytecodeFlag
|
||||||
|
- = python_dont_write_bytecode == AUTO_BOOLEAN_TRUE ? 1 : 0;
|
||||||
|
+ /* Py_DontWriteBytecodeFlag is deprecated in Python 3.12. Disable
|
||||||
|
+ its usage in Python 3.10 and above since the PyConfig mechanism
|
||||||
|
+ is now (also) used in 3.10 and higher. See do_start_initialization()
|
||||||
|
+ in this file. */
|
||||||
|
+#if PY_VERSION_HEX < 0x030a0000
|
||||||
|
+ Py_DontWriteBytecodeFlag = !python_write_bytecode ();
|
||||||
|
+#endif
|
||||||
|
#endif /* HAVE_PYTHON */
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1856,6 +1880,18 @@ gdbpy_gdb_exiting (int exit_code)
|
||||||
|
static bool
|
||||||
|
do_start_initialization ()
|
||||||
|
{
|
||||||
|
+ /* Define all internal modules. These are all imported (and thus
|
||||||
|
+ created) during initialization. */
|
||||||
|
+ struct _inittab mods[] =
|
||||||
|
+ {
|
||||||
|
+ { "_gdb", init__gdb_module },
|
||||||
|
+ { "_gdbevents", gdbpy_events_mod_func },
|
||||||
|
+ { nullptr, nullptr }
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ if (PyImport_ExtendInittab (mods) < 0)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
#ifdef WITH_PYTHON_PATH
|
||||||
|
/* Work around problem where python gets confused about where it is,
|
||||||
|
and then can't find its libraries, etc.
|
||||||
|
@@ -1887,25 +1923,41 @@ do_start_initialization ()
|
||||||
|
}
|
||||||
|
setlocale (LC_ALL, oldloc.c_str ());
|
||||||
|
|
||||||
|
+ /* Py_SetProgramName was deprecated in Python 3.11. Use PyConfig
|
||||||
|
+ mechanisms for Python 3.10 and newer. */
|
||||||
|
+#if PY_VERSION_HEX < 0x030a0000
|
||||||
|
/* Note that Py_SetProgramName expects the string it is passed to
|
||||||
|
remain alive for the duration of the program's execution, so
|
||||||
|
it is not freed after this call. */
|
||||||
|
Py_SetProgramName (progname_copy);
|
||||||
|
-#endif
|
||||||
|
+ Py_Initialize ();
|
||||||
|
+#else
|
||||||
|
+ PyConfig config;
|
||||||
|
|
||||||
|
- /* Define all internal modules. These are all imported (and thus
|
||||||
|
- created) during initialization. */
|
||||||
|
- struct _inittab mods[3] =
|
||||||
|
- {
|
||||||
|
- { "_gdb", init__gdb_module },
|
||||||
|
- { "_gdbevents", gdbpy_events_mod_func },
|
||||||
|
- { nullptr, nullptr }
|
||||||
|
- };
|
||||||
|
+ PyConfig_InitPythonConfig (&config);
|
||||||
|
+ PyStatus status = PyConfig_SetString (&config, &config.program_name,
|
||||||
|
+ progname_copy);
|
||||||
|
+ if (PyStatus_Exception (status))
|
||||||
|
+ goto init_done;
|
||||||
|
|
||||||
|
- if (PyImport_ExtendInittab (mods) < 0)
|
||||||
|
- return false;
|
||||||
|
+ config.write_bytecode = python_write_bytecode ();
|
||||||
|
+ config.use_environment = !python_ignore_environment;
|
||||||
|
|
||||||
|
+ status = PyConfig_Read (&config);
|
||||||
|
+ if (PyStatus_Exception (status))
|
||||||
|
+ goto init_done;
|
||||||
|
+
|
||||||
|
+ status = Py_InitializeFromConfig (&config);
|
||||||
|
+
|
||||||
|
+init_done:
|
||||||
|
+ PyConfig_Clear (&config);
|
||||||
|
+ if (PyStatus_Exception (status))
|
||||||
|
+ return false;
|
||||||
|
+#endif
|
||||||
|
+#else
|
||||||
|
Py_Initialize ();
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#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
|
||||||
|
@@ -2210,12 +2262,23 @@ do_initialize (const struct extension_language_defn *extlang)
|
||||||
|
|
||||||
|
sys_path = PySys_GetObject ("path");
|
||||||
|
|
||||||
|
+ /* PySys_SetPath was deprecated in Python 3.11. Disable this
|
||||||
|
+ deprecated code for Python 3.10 and newer. Also note that this
|
||||||
|
+ ifdef eliminates potential initialization of sys.path via
|
||||||
|
+ PySys_SetPath. My (kevinb's) understanding of PEP 587 suggests
|
||||||
|
+ that it's not necessary due to module_search_paths being
|
||||||
|
+ initialized to an empty list following any of the PyConfig
|
||||||
|
+ initialization functions. If it does turn out that some kind of
|
||||||
|
+ initialization is still needed, it should be added to the
|
||||||
|
+ PyConfig-based initialization in do_start_initialize(). */
|
||||||
|
+#if PY_VERSION_HEX < 0x030a0000
|
||||||
|
/* If sys.path is not defined yet, define it first. */
|
||||||
|
if (!(sys_path && PyList_Check (sys_path)))
|
||||||
|
{
|
||||||
|
PySys_SetPath (L"");
|
||||||
|
sys_path = PySys_GetObject ("path");
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
if (sys_path && PyList_Check (sys_path))
|
||||||
|
{
|
||||||
|
gdbpy_ref<> pythondir (PyString_FromString (gdb_pythondir.c_str ()));
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
192
gdb-Make-import-gdb.events-work.patch
Normal file
192
gdb-Make-import-gdb.events-work.patch
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
From 139266420fbff31e3309235ac8e1836d19a065c7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tom Tromey <tromey@adacore.com>
|
||||||
|
Date: Fri, 3 Jun 2022 07:59:49 -0600
|
||||||
|
Subject: [PATCH] Make 'import gdb.events' work
|
||||||
|
|
||||||
|
Pierre-Marie noticed that, while gdb.events is a Python module, it
|
||||||
|
can't be imported. This patch changes how this module is created, so
|
||||||
|
that it can be imported, while also ensuring that the module is always
|
||||||
|
visible, just as it was in the past.
|
||||||
|
|
||||||
|
This new approach required one non-obvious change -- when running
|
||||||
|
gdb.base/warning.exp, where --data-directory is intentionally not
|
||||||
|
found, the event registries can now be nullptr. Consequently, this
|
||||||
|
patch probably also requires
|
||||||
|
|
||||||
|
https://sourceware.org/pipermail/gdb-patches/2022-June/189796.html
|
||||||
|
|
||||||
|
Note that this patch obsoletes
|
||||||
|
|
||||||
|
https://sourceware.org/pipermail/gdb-patches/2022-June/189797.html
|
||||||
|
---
|
||||||
|
gdb/python/lib/gdb/__init__.py | 5 +++++
|
||||||
|
gdb/python/py-evtregistry.c | 4 +++-
|
||||||
|
gdb/python/py-evts.c | 28 ++++++++++++--------------
|
||||||
|
gdb/python/python-internal.h | 4 ++--
|
||||||
|
gdb/python/python.c | 16 +++++++++++----
|
||||||
|
gdb/testsuite/gdb.python/py-events.exp | 2 ++
|
||||||
|
6 files changed, 37 insertions(+), 22 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gdb/python/lib/gdb/__init__.py b/gdb/python/lib/gdb/__init__.py
|
||||||
|
index a52f6b4..17ee6a1 100644
|
||||||
|
--- a/gdb/python/lib/gdb/__init__.py
|
||||||
|
+++ b/gdb/python/lib/gdb/__init__.py
|
||||||
|
@@ -27,6 +27,11 @@ else:
|
||||||
|
|
||||||
|
from _gdb import *
|
||||||
|
|
||||||
|
+# Historically, gdb.events was always available, so ensure it's
|
||||||
|
+# still available without an explicit import.
|
||||||
|
+import _gdbevents as events
|
||||||
|
+sys.modules['gdb.events'] = events
|
||||||
|
+
|
||||||
|
|
||||||
|
class _GdbFile(object):
|
||||||
|
# These two are needed in Python 3
|
||||||
|
diff --git a/gdb/python/py-evtregistry.c b/gdb/python/py-evtregistry.c
|
||||||
|
index ef96c48..f3a7f0c 100644
|
||||||
|
--- a/gdb/python/py-evtregistry.c
|
||||||
|
+++ b/gdb/python/py-evtregistry.c
|
||||||
|
@@ -118,7 +118,9 @@ gdbpy_initialize_eventregistry (void)
|
||||||
|
bool
|
||||||
|
evregpy_no_listeners_p (eventregistry_object *registry)
|
||||||
|
{
|
||||||
|
- return PyList_Size (registry->callbacks) == 0;
|
||||||
|
+ /* REGISTRY can be nullptr if gdb failed to find the data directory
|
||||||
|
+ at startup. */
|
||||||
|
+ return registry == nullptr || PyList_Size (registry->callbacks) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyMethodDef eventregistry_object_methods[] =
|
||||||
|
diff --git a/gdb/python/py-evts.c b/gdb/python/py-evts.c
|
||||||
|
index 23a5d75..ca9326a 100644
|
||||||
|
--- a/gdb/python/py-evts.c
|
||||||
|
+++ b/gdb/python/py-evts.c
|
||||||
|
@@ -23,7 +23,7 @@
|
||||||
|
static struct PyModuleDef EventModuleDef =
|
||||||
|
{
|
||||||
|
PyModuleDef_HEAD_INIT,
|
||||||
|
- "gdb.events",
|
||||||
|
+ "_gdbevents",
|
||||||
|
NULL,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
@@ -33,7 +33,8 @@ static struct PyModuleDef EventModuleDef =
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
-/* Initialize python events. */
|
||||||
|
+/* Helper function to add a single event registry to the events
|
||||||
|
+ module. */
|
||||||
|
|
||||||
|
static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
|
||||||
|
add_new_registry (eventregistry_object **registryp, const char *name)
|
||||||
|
@@ -48,24 +49,21 @@ add_new_registry (eventregistry_object **registryp, const char *name)
|
||||||
|
(PyObject *)(*registryp));
|
||||||
|
}
|
||||||
|
|
||||||
|
-int
|
||||||
|
-gdbpy_initialize_py_events (void)
|
||||||
|
+/* Create and populate the _gdbevents module. Note that this is
|
||||||
|
+ always created, see the base gdb __init__.py. */
|
||||||
|
+
|
||||||
|
+PyMODINIT_FUNC
|
||||||
|
+gdbpy_events_mod_func ()
|
||||||
|
{
|
||||||
|
gdb_py_events.module = PyModule_Create (&EventModuleDef);
|
||||||
|
+ if (gdb_py_events.module == nullptr)
|
||||||
|
+ return nullptr;
|
||||||
|
|
||||||
|
- if (!gdb_py_events.module)
|
||||||
|
- return -1;
|
||||||
|
-
|
||||||
|
-#define GDB_PY_DEFINE_EVENT(name) \
|
||||||
|
+#define GDB_PY_DEFINE_EVENT(name) \
|
||||||
|
if (add_new_registry (&gdb_py_events.name, #name) < 0) \
|
||||||
|
- return -1;
|
||||||
|
+ return nullptr;
|
||||||
|
#include "py-all-events.def"
|
||||||
|
#undef GDB_PY_DEFINE_EVENT
|
||||||
|
|
||||||
|
- if (gdb_pymodule_addobject (gdb_module,
|
||||||
|
- "events",
|
||||||
|
- (PyObject *) gdb_py_events.module) < 0)
|
||||||
|
- return -1;
|
||||||
|
-
|
||||||
|
- return 0;
|
||||||
|
+ return gdb_py_events.module;
|
||||||
|
}
|
||||||
|
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
|
||||||
|
index e3a3fc4..84f45ca 100644
|
||||||
|
--- a/gdb/python/python-internal.h
|
||||||
|
+++ b/gdb/python/python-internal.h
|
||||||
|
@@ -536,8 +536,6 @@ int gdbpy_initialize_eventregistry (void)
|
||||||
|
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
|
||||||
|
int gdbpy_initialize_event (void)
|
||||||
|
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
|
||||||
|
-int gdbpy_initialize_py_events (void)
|
||||||
|
- CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
|
||||||
|
int gdbpy_initialize_arch (void)
|
||||||
|
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
|
||||||
|
int gdbpy_initialize_registers ()
|
||||||
|
@@ -556,6 +554,8 @@ int gdbpy_initialize_micommands (void)
|
||||||
|
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
|
||||||
|
void gdbpy_finalize_micommands ();
|
||||||
|
|
||||||
|
+PyMODINIT_FUNC gdbpy_events_mod_func ();
|
||||||
|
+
|
||||||
|
/* A wrapper for PyErr_Fetch that handles reference counting for the
|
||||||
|
caller. */
|
||||||
|
class gdbpy_err_fetch
|
||||||
|
diff --git a/gdb/python/python.c b/gdb/python/python.c
|
||||||
|
index e97bca7..e3f2550 100644
|
||||||
|
--- a/gdb/python/python.c
|
||||||
|
+++ b/gdb/python/python.c
|
||||||
|
@@ -1891,11 +1891,20 @@ do_start_initialization ()
|
||||||
|
remain alive for the duration of the program's execution, so
|
||||||
|
it is not freed after this call. */
|
||||||
|
Py_SetProgramName (progname_copy);
|
||||||
|
-
|
||||||
|
- /* Define _gdb as a built-in module. */
|
||||||
|
- PyImport_AppendInittab ("_gdb", init__gdb_module);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+ /* Define all internal modules. These are all imported (and thus
|
||||||
|
+ created) during initialization. */
|
||||||
|
+ struct _inittab mods[3] =
|
||||||
|
+ {
|
||||||
|
+ { "_gdb", init__gdb_module },
|
||||||
|
+ { "_gdbevents", gdbpy_events_mod_func },
|
||||||
|
+ { nullptr, nullptr }
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ if (PyImport_ExtendInittab (mods) < 0)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
Py_Initialize ();
|
||||||
|
#if PY_VERSION_HEX < 0x03090000
|
||||||
|
/* PyEval_InitThreads became deprecated in Python 3.9 and will
|
||||||
|
@@ -1962,7 +1971,6 @@ do_start_initialization ()
|
||||||
|
|| gdbpy_initialize_thread () < 0
|
||||||
|
|| gdbpy_initialize_inferior () < 0
|
||||||
|
|| gdbpy_initialize_eventregistry () < 0
|
||||||
|
- || gdbpy_initialize_py_events () < 0
|
||||||
|
|| gdbpy_initialize_event () < 0
|
||||||
|
|| gdbpy_initialize_arch () < 0
|
||||||
|
|| gdbpy_initialize_registers () < 0
|
||||||
|
diff --git a/gdb/testsuite/gdb.python/py-events.exp b/gdb/testsuite/gdb.python/py-events.exp
|
||||||
|
index 2fdd216..4feeb02 100644
|
||||||
|
--- a/gdb/testsuite/gdb.python/py-events.exp
|
||||||
|
+++ b/gdb/testsuite/gdb.python/py-events.exp
|
||||||
|
@@ -42,6 +42,8 @@ clean_restart ${testfile}
|
||||||
|
|
||||||
|
if { [skip_python_tests] } { continue }
|
||||||
|
|
||||||
|
+gdb_test_no_output "python import gdb.events"
|
||||||
|
+
|
||||||
|
set pyfile [gdb_remote_download host ${srcdir}/${subdir}/py-events.py]
|
||||||
|
gdb_test_no_output "source ${pyfile}" "load python file"
|
||||||
|
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
40
gdb-Use-bool-for-evregpy_no_listeners_p.patch
Normal file
40
gdb-Use-bool-for-evregpy_no_listeners_p.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From 907de931f547bd0d6178ee04bdb6496cd66dbdd7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tom Tromey <tromey@adacore.com>
|
||||||
|
Date: Fri, 3 Jun 2022 10:35:30 -0600
|
||||||
|
Subject: [PATCH] Use bool for evregpy_no_listeners_p
|
||||||
|
|
||||||
|
I noticed that evregpy_no_listeners_p should return a bool. This
|
||||||
|
patch makes this change. I'm checking it in.
|
||||||
|
---
|
||||||
|
gdb/python/py-events.h | 2 +-
|
||||||
|
gdb/python/py-evtregistry.c | 2 +-
|
||||||
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gdb/python/py-events.h b/gdb/python/py-events.h
|
||||||
|
index bd4a75c..1680b58 100644
|
||||||
|
--- a/gdb/python/py-events.h
|
||||||
|
+++ b/gdb/python/py-events.h
|
||||||
|
@@ -52,6 +52,6 @@ struct events_object
|
||||||
|
extern events_object gdb_py_events;
|
||||||
|
|
||||||
|
extern eventregistry_object *create_eventregistry_object (void);
|
||||||
|
-extern int evregpy_no_listeners_p (eventregistry_object *registry);
|
||||||
|
+extern bool evregpy_no_listeners_p (eventregistry_object *registry);
|
||||||
|
|
||||||
|
#endif /* PYTHON_PY_EVENTS_H */
|
||||||
|
diff --git a/gdb/python/py-evtregistry.c b/gdb/python/py-evtregistry.c
|
||||||
|
index 003fe44..ef96c48 100644
|
||||||
|
--- a/gdb/python/py-evtregistry.c
|
||||||
|
+++ b/gdb/python/py-evtregistry.c
|
||||||
|
@@ -115,7 +115,7 @@ gdbpy_initialize_eventregistry (void)
|
||||||
|
/* Return the number of listeners currently connected to this
|
||||||
|
registry. */
|
||||||
|
|
||||||
|
-int
|
||||||
|
+bool
|
||||||
|
evregpy_no_listeners_p (eventregistry_object *registry)
|
||||||
|
{
|
||||||
|
return PyList_Size (registry->callbacks) == 0;
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
45
gdb-initialize-the-data_head-variable-to-eliminate-c.patch
Normal file
45
gdb-initialize-the-data_head-variable-to-eliminate-c.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
From 44ca285b73b68f6a8fa3e89004b510d6b7d98e91 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Enze Li <enze.li@hotmail.com>
|
||||||
|
Date: Sat, 11 Jun 2022 18:36:48 +0800
|
||||||
|
Subject: [PATCH] gdb: initialize the data_head variable to eliminate
|
||||||
|
compilation warnings
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
On a machine with gcc 12, I get this warning:
|
||||||
|
|
||||||
|
CXX nat/linux-btrace.o
|
||||||
|
In function ‘btrace_error linux_read_bts(btrace_data_bts*, btrace_target_info*, btrace_read_type)’,
|
||||||
|
inlined from ‘btrace_error linux_read_btrace(btrace_data*, btrace_target_info*, btrace_read_type)’ at ../gdb/nat/linux-btrace.c:935:29:
|
||||||
|
../gdb/nat/linux-btrace.c:865:21: warning: ‘data_head’ may be used uninitialized [-Wmaybe-uninitialized]
|
||||||
|
865 | pevent->last_head = data_head;
|
||||||
|
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
|
||||||
|
../gdb/nat/linux-btrace.c: In function ‘btrace_error linux_read_btrace(btrace_data*, btrace_target_info*, btrace_read_type)’:
|
||||||
|
../gdb/nat/linux-btrace.c:792:9: note: ‘data_head’ was declared here
|
||||||
|
792 | __u64 data_head, data_tail;
|
||||||
|
| ^~~~~~~~~
|
||||||
|
|
||||||
|
Fix this by initializing the 'data_head' variable.
|
||||||
|
|
||||||
|
Tested by rebuilding on x86_64 openSUSE Tumbleweed with gcc 12.
|
||||||
|
---
|
||||||
|
gdb/nat/linux-btrace.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c
|
||||||
|
index b0d6dcd7cf1..c31fb5ffe43 100644
|
||||||
|
--- a/gdb/nat/linux-btrace.c
|
||||||
|
+++ b/gdb/nat/linux-btrace.c
|
||||||
|
@@ -789,7 +789,7 @@ linux_read_bts (struct btrace_data_bts *btrace,
|
||||||
|
struct perf_event_buffer *pevent;
|
||||||
|
const uint8_t *begin, *end, *start;
|
||||||
|
size_t buffer_size, size;
|
||||||
|
- __u64 data_head, data_tail;
|
||||||
|
+ __u64 data_head = 0, data_tail;
|
||||||
|
unsigned int retries = 5;
|
||||||
|
|
||||||
|
pevent = &tinfo->variant.bts.bts;
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
From 24669c55aed712c192b80456295cce122c7d5f73 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Enze Li <enze.li@hotmail.com>
|
||||||
|
Date: Sat, 14 Jan 2023 11:33:48 +0800
|
||||||
|
Subject: [PATCH] libctf: update regexp to allow makeinfo to build document
|
||||||
|
|
||||||
|
While trying to build gdb on latest openSUSE Tumbleweed, I noticed the
|
||||||
|
following warning,
|
||||||
|
|
||||||
|
checking for makeinfo... makeinfo --split-size=5000000
|
||||||
|
configure: WARNING:
|
||||||
|
*** Makeinfo is too old. Info documentation will not be built.
|
||||||
|
|
||||||
|
then I checked the version of makeinfo, it said,
|
||||||
|
======
|
||||||
|
$ makeinfo --version
|
||||||
|
texi2any (GNU texinfo) 7.0.1
|
||||||
|
|
||||||
|
Copyright (C) 2022 Free Software Foundation, Inc.
|
||||||
|
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
||||||
|
This is free software: you are free to change and redistribute it.
|
||||||
|
There is NO WARRANTY, to the extent permitted by law.
|
||||||
|
======
|
||||||
|
|
||||||
|
After digging a little bit, it became quite obvious that a dot is
|
||||||
|
missing in regexp that makes it impossible to match versions higher than
|
||||||
|
7.0, and here's the solution:
|
||||||
|
|
||||||
|
- | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9][0-9])' >/dev/null 2>&1; then
|
||||||
|
+ | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9]\.[0-9])' >/dev/null 2>&1; then
|
||||||
|
|
||||||
|
However, Eli pointed out that the solution above has another problem: it
|
||||||
|
will stop working when Texinfo 10.1 will be released. Meanwhile, he
|
||||||
|
suggested to solve this problem permanently. That is, we don't care
|
||||||
|
about the minor version for Texinfo > 6.9, we only care about the major
|
||||||
|
version.
|
||||||
|
|
||||||
|
In this way, the problem will be resolved permanently, thanks to Eli.
|
||||||
|
|
||||||
|
libctf/ChangeLog:
|
||||||
|
|
||||||
|
* configure: Regenerated.
|
||||||
|
* configure.ac: Update regexp to match versions higher than 7.0.
|
||||||
|
---
|
||||||
|
libctf/configure | 2 +-
|
||||||
|
libctf/configure.ac | 2 +-
|
||||||
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libctf/configure b/libctf/configure
|
||||||
|
index c22f7dffd2c..a0e40f49a80 100755
|
||||||
|
--- a/libctf/configure
|
||||||
|
+++ b/libctf/configure
|
||||||
|
@@ -14864,7 +14864,7 @@ esac
|
||||||
|
# We require texinfo to be 6.3 or later, for a working synindex
|
||||||
|
# and validatemenus: otherwise we fall back to /bin/true.
|
||||||
|
if ${MAKEINFO} --version \
|
||||||
|
- | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9][0-9])' >/dev/null 2>&1; then
|
||||||
|
+ | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9]|[1-6][0-9])' >/dev/null 2>&1; then
|
||||||
|
build_info=yes
|
||||||
|
else
|
||||||
|
build_info=
|
||||||
|
diff --git a/libctf/configure.ac b/libctf/configure.ac
|
||||||
|
index 1d0cf4d0fa5..6a5eade1855 100644
|
||||||
|
--- a/libctf/configure.ac
|
||||||
|
+++ b/libctf/configure.ac
|
||||||
|
@@ -184,7 +184,7 @@ changequote(,)
|
||||||
|
# We require texinfo to be 6.3 or later, for a working synindex
|
||||||
|
# and validatemenus: otherwise we fall back to /bin/true.
|
||||||
|
if ${MAKEINFO} --version \
|
||||||
|
- | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9][0-9])' >/dev/null 2>&1; then
|
||||||
|
+ | egrep 'texinfo[^0-9]*(6\.[3-9]|[7-9]|[1-6][0-9])' >/dev/null 2>&1; then
|
||||||
|
build_info=yes
|
||||||
|
else
|
||||||
|
build_info=
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
1375
gdb-python-remove-Python-2-support.patch
Normal file
1375
gdb-python-remove-Python-2-support.patch
Normal file
File diff suppressed because it is too large
Load Diff
17
gdb.spec
17
gdb.spec
@ -1,6 +1,6 @@
|
|||||||
Name: gdb
|
Name: gdb
|
||||||
Version: 12.1
|
Version: 12.1
|
||||||
Release: 3
|
Release: 6
|
||||||
|
|
||||||
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-1.3
|
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-1.3
|
||||||
Source: https://ftp.gnu.org/gnu/gdb/gdb-%{version}.tar.xz
|
Source: https://ftp.gnu.org/gnu/gdb/gdb-%{version}.tar.xz
|
||||||
@ -88,6 +88,12 @@ Patch76: gdb-sw22395-constify-target_desc.patch
|
|||||||
|
|
||||||
Patch77: 0001-set-entry-point-when-text-segment-is-missing.patch
|
Patch77: 0001-set-entry-point-when-text-segment-is-missing.patch
|
||||||
Patch78: 0002-Add-support-for-readline-8.2.patch
|
Patch78: 0002-Add-support-for-readline-8.2.patch
|
||||||
|
Patch79: gdb-initialize-the-data_head-variable-to-eliminate-c.patch
|
||||||
|
Patch80: gdb-python-remove-Python-2-support.patch
|
||||||
|
Patch81: gdb-Use-bool-for-evregpy_no_listeners_p.patch
|
||||||
|
Patch82: gdb-Make-import-gdb.events-work.patch
|
||||||
|
Patch83: gdb-Handle-Python-3.11-deprecation-of-PySys_SetPath-and-.patch
|
||||||
|
Patch84: gdb-libctf-update-regexp-to-allow-makeinfo-to-build-docu.patch
|
||||||
|
|
||||||
%global gdb_src gdb-%{version}
|
%global gdb_src gdb-%{version}
|
||||||
%global gdb_build build-%{_target_platform}
|
%global gdb_build build-%{_target_platform}
|
||||||
@ -363,6 +369,15 @@ rm -f $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb/command/backtrace.py
|
|||||||
%{_infodir}/ctf-spec.info.gz
|
%{_infodir}/ctf-spec.info.gz
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 3 2023 Wenyu Liu <liuwenyu7@huawei.com> - 12.1-6
|
||||||
|
- libctf: update regexp to allow makeinfo to build document
|
||||||
|
|
||||||
|
* Thu Jul 27 2023 Wenyu Liu <liuwenyu7@huawei.com> - 12.1-5
|
||||||
|
- Handle Python 3.11 deprecation of PySys_SetPath and Py_SetProgramName
|
||||||
|
|
||||||
|
* Thu Jul 27 2023 Wenyu Liu <liuwenyu7@huawei.com> - 12.1-4
|
||||||
|
- initialize the data_head variable to eliminate compilation warnings
|
||||||
|
|
||||||
* Tue Feb 14 2023 Wenyu Liu <liuwenyu7@huawei.com> - 12.1-3
|
* Tue Feb 14 2023 Wenyu Liu <liuwenyu7@huawei.com> - 12.1-3
|
||||||
- Rectify the spec file.
|
- Rectify the spec file.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user