From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21994 invoked by alias); 8 Oct 2002 04:10:51 -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 21987 invoked from network); 8 Oct 2002 04:10:50 -0000 Received: from unknown (HELO igw3.watson.ibm.com) (198.81.209.18) by sources.redhat.com with SMTP; 8 Oct 2002 04:10:50 -0000 Received: from sp1n293en1.watson.ibm.com (sp1n293en1.watson.ibm.com [9.2.112.57]) by igw3.watson.ibm.com (8.11.4/8.11.4) with ESMTP id g984Anf183440 for ; Tue, 8 Oct 2002 00:10:49 -0400 Received: from makai.watson.ibm.com (makai.watson.ibm.com [9.2.216.144]) by sp1n293en1.watson.ibm.com (8.11.4/8.11.4) with ESMTP id g984An0152728 for ; Tue, 8 Oct 2002 00:10:49 -0400 Received: from watson.ibm.com (localhost [127.0.0.1]) by makai.watson.ibm.com (AIX4.3/8.9.3/8.9.3/09-18-2002) with ESMTP id AAA29076 for ; Tue, 8 Oct 2002 00:10:49 -0400 Message-Id: <200210080410.AAA29076@makai.watson.ibm.com> To: gdb-patches@sources.redhat.com Subject: [PATCH] C++ Dwarf2 inner scope PR/789 Date: Mon, 07 Oct 2002 21:10:00 -0000 From: David Edelsohn X-SW-Source: 2002-10/txt/msg00181.txt.bz2 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