From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14732 invoked by alias); 16 Feb 2005 19:08:36 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 14576 invoked from network); 16 Feb 2005 19:08:30 -0000 Received: from unknown (HELO priv-edtnes46.telusplanet.net) (199.185.220.240) by sourceware.org with SMTP; 16 Feb 2005 19:08:30 -0000 Received: from takamaka.act-europe.fr ([142.179.108.108]) by priv-edtnes46.telusplanet.net (InterMail vM.6.01.04.00 201-2131-118-20041027) with ESMTP id <20050216190825.SRFL24555.priv-edtnes46.telusplanet.net@takamaka.act-europe.fr>; Wed, 16 Feb 2005 12:08:25 -0700 Received: by takamaka.act-europe.fr (Postfix, from userid 507) id A7A1D47DBF; Wed, 16 Feb 2005 11:08:24 -0800 (PST) Date: Wed, 16 Feb 2005 22:50:00 -0000 From: Joel Brobecker To: Manoj Iyer , gdb-patches@sources.redhat.com, Elena Zannoni Subject: Re: [RFC] Dont skip DW_TAG_member in load_partial_dies() Message-ID: <20050216190824.GU1200@adacore.com> References: <20050215232018.GB8631@nevyn.them.org> <20050215233503.GB11771@adacore.com> <20050216001647.GA10512@nevyn.them.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050216001647.GA10512@nevyn.them.org> User-Agent: Mutt/1.4i X-SW-Source: 2005-02/txt/msg00170.txt.bz2 Hello Daniel, > > Just FYI: Here is the change we've made so far in gdb-6.3. > > > > if (abbrev->tag == DW_TAG_subprogram > > || abbrev->tag == DW_TAG_variable > > || abbrev->tag == DW_TAG_namespace > > + || abbrev->tag == DW_TAG_enumeration_type > > + || abbrev->tag == DW_TAG_structure_type > > That's a very different problem - you're at the other interesting if in > this function. Please show me an example of debug information which > requires this - and see the comment above which talks about why most of > these checks are only for buggy compilers... It's a long story :). In Ada, we allow nested functions. In order to be able to break inside a nested function, using "break nested_function", we need to scan the DIEs inside subprogram DIEs and build partial symbols for them. That's the first local change we did. Something like: if ada and then subprogram, then do not skip to sibling. And next, we face something a bit out of the ordinary: We had a function that was inlined. That caused GCC to create a nameless subprogram DIE, with an AT_specification attribute pointing to the original procedure. The tricky part was that there was inside that procedure a nameless enumeration DIE that also had an AT_specification. We failed on that second AT_specification during the lookup in the hash-table. I hope this makes sense. I'm trying to be short as I'm busier than I have ever been right now. Don't hesitate to let me know if I'm not, though. It may take a bit of time for me to answer, but I will answer. -- Joel