This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA/Python] Fix procfs.c build failure on 32bit solaris (_FILE_OFFSET_BITS)


On Tuesday 23 November 2010 15:21:41, Tom Tromey wrote:
> >>>>> "Pedro" == Pedro Alves <pedro@codesourcery.com> writes:

> Pedro> Given that we only need to hold a pointer to this, thus the PyObject
> Pedro> need not be complete at this point, can we forward declare PyObject
> Pedro> instead somehow?
> 
> Python defines it as a typedef for "struct _object *".  Yuck -- I'd
> rather not copy that into our code.

I see that PyObject is an abstract base class, and that this particular
concrete class is struct breakpoint_object ...

> Pedro> If not, can we perhaps come up with a wrapper type that itself
> Pedro> can be forward declared?  Or fallback to void* if nothing else
> Pedro> cleaner is possible?
> 
> Either of these works for me.

... so we already have a wrapper type we can forward declare.

Here's a patch.  We can move the PyObject fallback typedef from defs.h
to varobj.c again.  I haven't looked to see if the PyObject pointers
in struct varobj have some other concrete type we could forward
declare instead.  Or why don't we #ifdef out those fields if building
without python.

Tested by building gdb with and without --with-python=no.

-- 
Pedro Alves

2010-11-23  Pedro Alves  <pedro@codesourcery.com>

	gdb/
	* breakpoint.h: No longer include python.h or python-internal.h.
	(struct breakpoint_object): Forward declare.
	* defs.h (PyObject) [!HAVE_PYTHON]: Don't define.
	* varobj.c (PyObject) [!HAVE_PYTHON]: Define.
	* python/py-breakpoint.c (build_bp_list): Cast py_bp_object to
	PyObject pointer.
	(gdbpy_breakpoint_created): Remove casts around py_bp_object
	accesses.

---
 gdb/breakpoint.h           |    8 ++------
 gdb/defs.h                 |    4 ----
 gdb/python/py-breakpoint.c |    6 +++---
 gdb/varobj.c               |    2 ++
 4 files changed, 7 insertions(+), 13 deletions(-)

Index: src/gdb/breakpoint.h
===================================================================
--- src.orig/gdb/breakpoint.h	2010-11-11 14:46:24.000000000 +0000
+++ src/gdb/breakpoint.h	2010-11-23 16:07:20.000000000 +0000
@@ -24,13 +24,9 @@
 #include "value.h"
 #include "vec.h"
 
-#if HAVE_PYTHON
-#include "python/python.h"
-#include "python/python-internal.h"
-#endif
-
 struct value;
 struct block;
+struct breakpoint_object;
 
 /* This is the maximum number of bytes a breakpoint instruction can take.
    Feel free to increase it.  It's just used in a few places to size
@@ -568,7 +564,7 @@ struct breakpoint
        This is always NULL for a GDB that is not script enabled.  It
        can sometimes be NULL for enabled GDBs as not all breakpoint
        types are tracked by the Python scripting API.  */
-    PyObject *py_bp_object;
+    struct breakpoint_object *py_bp_object;
 };
 
 typedef struct breakpoint *breakpoint_p;
Index: src/gdb/defs.h
===================================================================
--- src.orig/gdb/defs.h	2010-11-11 14:46:24.000000000 +0000
+++ src/gdb/defs.h	2010-11-23 16:05:28.000000000 +0000
@@ -1240,8 +1240,4 @@ void dummy_obstack_deallocate (void *obj
 extern void initialize_progspace (void);
 extern void initialize_inferiors (void);
 
-#ifndef HAVE_PYTHON
-typedef int PyObject;
-#endif
-
 #endif /* #ifndef DEFS_H */
Index: src/gdb/python/py-breakpoint.c
===================================================================
--- src.orig/gdb/python/py-breakpoint.c	2010-11-11 14:46:26.000000000 +0000
+++ src/gdb/python/py-breakpoint.c	2010-11-23 16:11:24.000000000 +0000
@@ -636,7 +636,7 @@ static int
 build_bp_list (struct breakpoint *b, void *arg)
 {
   PyObject *list = arg;
-  PyObject *bp = b->py_bp_object;
+  PyObject *bp = (PyObject *) b->py_bp_object;
   int iserr = 0;
 
   /* Not all breakpoints will have a companion Python object.
@@ -718,7 +718,7 @@ gdbpy_breakpoint_created (int num)
     {
       newbp->number = num;
       newbp->bp = bp;
-      newbp->bp->py_bp_object = (PyObject *) newbp;
+      newbp->bp->py_bp_object = newbp;
       Py_INCREF (newbp);
       ++bppy_live;
     }
@@ -746,7 +746,7 @@ gdbpy_breakpoint_deleted (int num)
   if (! bp)
     return;
 
-  bp_obj = ((breakpoint_object *) bp->py_bp_object);
+  bp_obj = bp->py_bp_object;
   if (bp_obj)
     {
       bp_obj->bp = NULL;
Index: src/gdb/varobj.c
===================================================================
--- src.orig/gdb/varobj.c	2010-11-19 16:49:24.000000000 +0000
+++ src/gdb/varobj.c	2010-11-23 16:23:17.000000000 +0000
@@ -39,6 +39,8 @@
 #if HAVE_PYTHON
 #include "python/python.h"
 #include "python/python-internal.h"
+#else
+typedef int PyObject;
 #endif
 
 /* Non-zero if we want to see trace of varobj level stuff.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]