From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7872 invoked by alias); 10 Oct 2002 20:27:19 -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 7861 invoked from network); 10 Oct 2002 20:27:18 -0000 Received: from unknown (HELO zenia.red-bean.com) (66.244.67.22) by sources.redhat.com with SMTP; 10 Oct 2002 20:27:18 -0000 Received: (from jimb@localhost) by zenia.red-bean.com (8.11.6/8.11.6) id g9AKA8V17533; Thu, 10 Oct 2002 15:10:08 -0500 To: David Edelsohn Cc: gdb-patches@sources.redhat.com Subject: Re: [PATCH] C++ Dwarf2 inner scope PR/789 References: <200210080410.AAA29076@makai.watson.ibm.com> From: Jim Blandy In-Reply-To: <200210080410.AAA29076@makai.watson.ibm.com> User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2.90 Date: Thu, 10 Oct 2002 13:27:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-10/txt/msg00219.txt.bz2 To be clear, I don't mean a whole dejagnu .exp thingy (although that would be nice); I mean just a specific C++ program I can compile and use to try to reproduce the problem myself. Jim Blandy writes: > Could you provide a test case for this? > > David Edelsohn writes: > > > While debugging a C++ application compiled with g++-3.2 and Dwarf2 > > debugging information, we discovered that some functions would not have > > any symbols available. This problem occurs when a method is defined > > inside a class-local function and prevents any symbols from appearing. > > > > We traced this back to gdb/dwarf2read.c:read_func_scope(). That > > function is called recursively for the inner scope, but it currently is > > written to always pop back to file scope instead of the previous scope. > > The appended patch saves the current scope in a local variable on the > > stack and restores that scope after parsing the inner scope. This allows > > global symbols to be seen, but we still have not been able to fix the > > innermost scope problem. > > > > Thanks, David > > > > > > --- dwarf2read.c.orig Sun Oct 6 15:00:32 2002 > > +++ dwarf2read.c Sun Oct 6 14:05:39 2002 > > @@ -1663,6 +1663,7 @@ read_func_scope (struct die_info *die, s > > struct die_info *child_die; > > struct attribute *attr; > > char *name; > > + struct pending **prev_list_in_scope; > > > > name = dwarf2_linkage_name (die); > > > > @@ -1704,6 +1705,7 @@ read_func_scope (struct die_info *die, s > > > > new = push_context (0, lowpc); > > new->name = new_symbol (die, die->type, objfile, cu_header); > > + prev_list_in_scope = list_in_scope; > > list_in_scope = &local_symbols; > > > > if (die->has_children) > > @@ -1720,7 +1722,10 @@ read_func_scope (struct die_info *die, s > > /* Make a block for the local symbols within. */ > > finish_block (new->name, &local_symbols, new->old_blocks, > > lowpc, highpc, objfile); > > - list_in_scope = &file_symbols; > > + > > + local_symbols = new->locals; > > + param_symbols = new->params; > > + list_in_scope = prev_list_in_scope; > > } > > > > /* Process all the DIES contained within a lexical block scope. Start