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]

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


	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]