This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] C++ Dwarf2 inner scope PR/789


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 <dje@watson.ibm.com> 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]