From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14928 invoked by alias); 17 Nov 2005 04:11:05 -0000 Received: (qmail 14900 invoked by uid 22791); 17 Nov 2005 04:10:59 -0000 Received: from nevyn.them.org (HELO nevyn.them.org) (66.93.172.17) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Thu, 17 Nov 2005 04:10:59 +0000 Received: from drow by nevyn.them.org with local (Exim 4.54) id 1Ecb6u-0000z8-Ke; Wed, 16 Nov 2005 23:10:56 -0500 Date: Thu, 17 Nov 2005 04:11:00 -0000 From: Daniel Jacobowitz To: Mark Kettenis Cc: gdb@sourceware.org Subject: Re: C++ related core dump Message-ID: <20051117041056.GC3513@nevyn.them.org> Mail-Followup-To: Mark Kettenis , gdb@sourceware.org References: <200511151015.jAFAFKXw032226@jop31.nfra.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200511151015.jAFAFKXw032226@jop31.nfra.nl> User-Agent: Mutt/1.5.8i Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2005-11/txt/msg00336.txt.bz2 On Tue, Nov 15, 2005 at 11:15:20AM +0100, Mark Kettenis wrote: > I'm debugging some evil C++ code at work, and gdb keeps dumping core > on me: > > (gdb) ptype antennac > type = class ROScalarColumn : public virtual ROTableColumn { ... > Int operator()(unsigned int) const; > (gdb) p antennac(0) > Segmentation fault (core dumped) > > This is with gcc 3.2 on sparc-sun-solaris2.7, which still uses stabs > debugging info. > > I tracked it down to some code in valops.c:find_overload_match(), > where SYMBOL_CPLUS_DEMANGLED_NAME is returning a null pointer which we > pass to cp_func_name() and that function can't deal with that. As a > stopgap, I applied the attached patch, and now I get: > > (gdb) p antennac(0) > Invalid data type for function to be called. > > which isn't quite what I want, but at least keeps my gdb alive. > > What I really want of course is for the above to invoke > antennac.operator()(0). Is that supposed to work at all? I know > stabs support for C++ has issues, but reading the code I don't see how > this would work for DWARF2 either. Well certainly that's not going to work :-) antennac(0) is not an invocation of operator(). It's an invocation of the antennac class constructor. If you want to invoke operator(), you need an object. If you had an object, I would expect this to work (or mostly work); GDB does support user-defined operators. GDB does _not_ support calling constructors, though. This is a bit tricky. > Regardless of properly invoking operator(), we should do something > about this crash. Can we do something better than the attached patch? > - func_name = cp_func_name (qualified_name); > + if (qualified_name) > + func_name = cp_func_name (qualified_name); Return earlier if fsym is not a function? Or this seems reasonable, to avoid the crash. -- Daniel Jacobowitz CodeSourcery, LLC