This is the mail archive of the gdb@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]

A hack for DW_FORM_ref_addr


On Wed, Jul 30, 2003 at 10:16:53PM -0700, H. J. Lu wrote:
> > > 
> > > While waiting for your new DWARF reader, I will see how my hack
> > > goes :-(.
> > 
> > Since the die table is hashed by offset (isn't it?), presumably very
> > badly.
> 
> It is OK for different compilation units within the same .debug_info
> section.
> 
> 

FYI, this is the hack I am going to try.


H.J.
----
2003-07-31  H.J. Lu  <hongjiu.lu@intel.com>

	* dwarf2read.c (dwarf2_build_psymtabs_hard): Read in all
	compilation units.
	(read_comp_unit): Don't reset die reference table if abfd
	is not changed.

--- gdb/dwarf2read.c.ref	2003-07-30 09:43:51.000000000 -0700
+++ gdb/dwarf2read.c	2003-07-31 08:11:23.000000000 -0700
@@ -1195,6 +1195,7 @@ dwarf2_build_psymtabs_hard (struct objfi
   struct partial_symtab *pst;
   struct cleanup *back_to;
   CORE_ADDR lowpc, highpc;
+  struct die_info *dies;
 
   info_ptr = dwarf_info_buffer;
   abbrev_ptr = dwarf_abbrev_buffer;
@@ -1280,6 +1281,8 @@ dwarf2_build_psymtabs_hard (struct objfi
       dwarf2_read_abbrevs (abfd, &cu_header);
       make_cleanup (dwarf2_empty_abbrev_table, cu_header.dwarf2_abbrevs);
 
+      dies = read_comp_unit (info_ptr, abfd, &cu_header);
+
       /* Read the compilation unit die */
       info_ptr = read_partial_die (&comp_unit_die, abfd, info_ptr,
 				   &cu_header);
@@ -3653,10 +3656,17 @@ read_comp_unit (char *info_ptr, bfd *abf
   struct die_info *first_die, *last_die, *die;
   char *cur_ptr;
   int nesting_level;
+  static bfd *bfd_die_ref_table;
+
+  if (!bfd_die_ref_table)
+    bfd_die_ref_table = abfd;
 
-  /* Reset die reference table; we are
-     building new ones now.  */
-  dwarf2_empty_hash_tables ();
+  if (bfd_die_ref_table != abfd)
+    {
+      bfd_die_ref_table = abfd;
+      /* Reset die reference table; we are building new ones now.  */
+      dwarf2_empty_hash_tables ();
+    }
 
   cur_ptr = info_ptr;
   nesting_level = 0;


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