From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 437 invoked by alias); 23 Nov 2010 16:29:36 -0000 Received: (qmail 419 invoked by uid 22791); 23 Nov 2010 16:29:34 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,TW_WB,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 23 Nov 2010 16:29:12 +0000 Received: (qmail 26762 invoked from network); 23 Nov 2010 16:28:37 -0000 Received: from unknown (HELO orlando.localnet) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 23 Nov 2010 16:28:37 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: [RFA/Python] Fix procfs.c build failure on 32bit solaris (_FILE_OFFSET_BITS) Date: Tue, 23 Nov 2010 16:29:00 -0000 User-Agent: KMail/1.13.5 (Linux/2.6.33-29-realtime; KDE/4.4.5; x86_64; ; ) Cc: Tom Tromey , Joel Brobecker References: <1290474834-1945-1-git-send-email-brobecker@adacore.com> <201011231242.44422.pedro@codesourcery.com> In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201011231628.33851.pedro@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-11/txt/msg00355.txt.bz2 On Tuesday 23 November 2010 15:21:41, Tom Tromey wrote: > >>>>> "Pedro" == Pedro Alves 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 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. */