Re: [PATCH 07/36] Make array object extern

Simon Marchi
2015-02-27T22:47:09Z

On 02/09/2015 06:20 PM, Pedro Alves wrote:
> Compiling python.c in C++ mode, we get:
>
> ...src/gdb/python/python.c: At global scope:
> ...src/gdb/python/python.c:106:31: error: storage size of ‘GdbMethods’ isn’t known
> static PyMethodDef GdbMethods[];
> ^
>
> Fix it by making the affected array objects extern.
>
> gdb/ChangeLog:
> 2015-02-09 Pedro Alves <palves@redhat.com>
>
> * python/python.c (GdbMethods): Rename to ...
> (python_GdbMethods): ... this and make extern.
> (GdbModuleDef): Rename to ...
> (python_GdbModuleDef): ... this and make extern.
> ---
> gdb/python/python.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/gdb/python/python.c b/gdb/python/python.c
> index 9854c79..a13638f 100644
> --- a/gdb/python/python.c
> +++ b/gdb/python/python.c
> @@ -103,10 +103,10 @@ const struct extension_language_defn extension_language_python =
>
> int gdb_python_initialized;
>
> -static PyMethodDef GdbMethods[];
> +extern PyMethodDef python_GdbMethods[];
>
> #ifdef IS_PY3K
> -static struct PyModuleDef GdbModuleDef;
> +extern struct PyModuleDef python_GdbModuleDef;
> #endif
>
> PyObject *gdb_module;
> @@ -1712,11 +1712,11 @@ message == an error message without a stack will be printed."),
> PyEval_InitThreads ();
>
> #ifdef IS_PY3K
> - gdb_module = PyModule_Create (&GdbModuleDef);
> + 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", GdbMethods);
> + gdb_module = Py_InitModule ("_gdb", python_GdbMethods);
> #endif
> if (gdb_module == NULL)
> goto fail;
> @@ -1932,7 +1932,7 @@ gdbpy_initialized (const struct extension_language_defn *extlang)
>
> #ifdef HAVE_PYTHON
>
> -static PyMethodDef GdbMethods[] =
> +PyMethodDef python_GdbMethods[] =
> {
> { "history", gdbpy_history, METH_VARARGS,
> "Get a value from history" },
> @@ -2044,7 +2044,7 @@ Return a tuple containing all inferiors." },
> };
>
> #ifdef IS_PY3K
> -static struct PyModuleDef GdbModuleDef =
> +struct PyModuleDef python_GdbModuleDef =
> {
> PyModuleDef_HEAD_INIT,
> "_gdb",

Hi Pedro,

I think you forgot one instance of GdbMethods, used when building with
Python 3. This should fix it:

From 33c839c7bb4bb201fa20f22e0935831b7e1de27f Mon Sep 17 00:00:00 2001
From: Simon Marchi <simon.marchi@ericsson.com>
Date: Fri, 27 Feb 2015 17:40:36 -0500
Subject: [PATCH] Fix Python 3 build

Rename forgotten GdbMethods to python_GdbMethods.

gdb/ChangeLog:

* python/python.c (python_GdbModuleDef): Rename GdbMethods to
python_GdbMethods.
---
gdb/python/python.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/python/python.c b/gdb/python/python.c
index a13638f..c3ffbae 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -2050,7 +2050,7 @@ struct PyModuleDef python_GdbModuleDef =
"_gdb",
NULL,
-1,
- GdbMethods,
+ python_GdbMethods,
NULL,
NULL,
NULL,
--
2.1.4