summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuanhui Zhang <asmwarrior@gmail.com>2015-05-15 16:00:40 +0100
committerPedro Alves <palves@redhat.com>2015-05-15 16:00:40 +0100
commit13fa0398d7dd8d2b468acf0aba5610ce014709a6 (patch)
tree8c70e867596eff6290f05db33a1f44151692140f
parent9cd4d857bb046ad9be3c6d978b5b2aebb528eaf4 (diff)
downloadbinutils-gdb-13fa0398d7dd8d2b468acf0aba5610ce014709a6.tar.gz
Fix a couple C++ build issues
Building mingw GDB with --enable-build-with-cxx shows: ../../binutils-gdb/gdb/python/py-unwind.c:500:45: error: cannot convert 'cached_frame_info::reg_info*' to 'pyuw_prev_register(frame_info*, void**, int)::reg_info*' in initialization struct reg_info *reg_info = cached_frame->reg; ^ ../../binutils-gdb/gdb/python/py-unwind.c:501:60: error: invalid use of incomplete type 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' struct reg_info *reg_info_end = reg_info + cached_frame->reg_count; ^ ../../binutils-gdb/gdb/python/py-unwind.c:500:10: error: forward declaration of 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' struct reg_info *reg_info = cached_frame->reg; ^ ../../binutils-gdb/gdb/python/py-unwind.c:505:37: error: cannot increment a pointer to incomplete type 'pyuw_prev_register(frame_info*, void**, int)::reg_info' for (; reg_info < reg_info_end; ++reg_info) ^ ../../binutils-gdb/gdb/python/py-unwind.c:507:29: error: invalid use of incomplete type 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' if (regnum == reg_info->number) ^ ../../binutils-gdb/gdb/python/py-unwind.c:500:10: error: forward declaration of 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' struct reg_info *reg_info = cached_frame->reg; ^ ../../binutils-gdb/gdb/python/py-unwind.c:508:68: error: invalid use of incomplete type 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' return frame_unwind_got_bytes (this_frame, regnum, reg_info->data); ^ ../../binutils-gdb/gdb/python/py-unwind.c:500:10: error: forward declaration of 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' struct reg_info *reg_info = cached_frame->reg; ^ ../../binutils-gdb/gdb/python/py-unwind.c: In function 'int pyuw_sniffer(const frame_unwind*, frame_info*, void**)': ../../binutils-gdb/gdb/python/py-unwind.c:574:70: warning: invalid conversion from 'void*' to 'cached_frame_info*' [-fpermissive] reg_count * sizeof (cached_frame->reg[0])); ^ ../../binutils-gdb/gdb/python/py-unwind.c: In function 'void pyuw_on_new_gdbarch(gdbarch*)': ../../binutils-gdb/gdb/python/py-unwind.c:636:47: warning: invalid conversion from 'void*' to 'pyuw_gdbarch_data_type*' [-fpermissive] gdbarch_data (newarch, pyuw_gdbarch_data); ^ ../../binutils-gdb/gdb/python/py-unwind.c:647:29: warning: invalid conversion from 'void*' to 'const frame_data*' [-fpermissive] unwinder->unwind_data = (void *) newarch; ^ ../../binutils-gdb/gdb/python/py-unwind.c: At global scope: ../../binutils-gdb/gdb/python/py-unwind.c:699:21: error: redefinition of 'PyTypeObject pending_frame_object_type' static PyTypeObject pending_frame_object_type = ^ ../../binutils-gdb/gdb/python/py-unwind.c:96:21: error: 'PyTypeObject pending_frame_object_type' previously declared here static PyTypeObject pending_frame_object_type ^ ../../binutils-gdb/gdb/python/py-unwind.c:749:21: error: redefinition of 'PyTypeObject unwind_info_object_type' static PyTypeObject unwind_info_object_type = ^ ../../binutils-gdb/gdb/python/py-unwind.c:99:21: error: 'PyTypeObject unwind_info_object_type' previously declared here static PyTypeObject unwind_info_object_type ^ The first kind of error is caused by the embedded struct definition, so move it out of the parent struct. The second kind of error is caused by forward declaring a static global variable, which works in C, but not in C++ (or C with -fno-common). Make it using extern instead, like done in other similar cases. gdb/ChangeLog: 2015-05-15 Yuanhui Zhang <asmwarrior@gmail.com> * python/py-unwind.c (struct reg_info): Move out of ... (struct cached_frame_info): ... this scope. (pending_frame_object_type, unwind_info_object_type): Make extern.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/python/py-unwind.c26
2 files changed, 20 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 14929810ad4..1fdc4f47713 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2015-05-15 Yuanhui Zhang <asmwarrior@gmail.com>
+
+ * python/py-unwind.c (struct reg_info): Move out of ...
+ (struct cached_frame_info): ... this scope.
+ (pending_frame_object_type, unwind_info_object_type): Make extern.
+
2015-05-15 Joel Brobecker <brobecker@adacore.com>
* ada-lang.c (ada_value_primitive_packed_val): Make sure
diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c
index bcfea4bbe87..b6e8a7531ba 100644
--- a/gdb/python/py-unwind.c
+++ b/gdb/python/py-unwind.c
@@ -72,6 +72,15 @@ typedef struct
/* The data we keep for a frame we can unwind: frame ID and an array of
(register_number, register_value) pairs. */
+struct reg_info
+{
+ /* Register number. */
+ int number;
+
+ /* Register data bytes pointer. */
+ gdb_byte data[MAX_REGISTER_SIZE];
+};
+
typedef struct
{
/* Frame ID. */
@@ -83,20 +92,13 @@ typedef struct
/* Length of the `reg' array below. */
int reg_count;
- struct reg_info
- {
- /* Register number. */
- int number;
-
- /* Register data bytes pointer. */
- gdb_byte data[MAX_REGISTER_SIZE];
- } reg[];
+ struct reg_info reg[];
} cached_frame_info;
-static PyTypeObject pending_frame_object_type
+extern PyTypeObject pending_frame_object_type
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("pending_frame_object");
-static PyTypeObject unwind_info_object_type
+extern PyTypeObject unwind_info_object_type
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("unwind_info_object");
static unsigned int pyuw_debug = 0;
@@ -696,7 +698,7 @@ static PyMethodDef pending_frame_object_methods[] =
{NULL} /* Sentinel */
};
-static PyTypeObject pending_frame_object_type =
+PyTypeObject pending_frame_object_type =
{
PyVarObject_HEAD_INIT (NULL, 0)
"gdb.PendingFrame", /* tp_name */
@@ -746,7 +748,7 @@ static PyMethodDef unwind_info_object_methods[] =
{ NULL } /* Sentinel */
};
-static PyTypeObject unwind_info_object_type =
+PyTypeObject unwind_info_object_type =
{
PyVarObject_HEAD_INIT (NULL, 0)
"gdb.UnwindInfo", /* tp_name */