[RFA/dwarf] Don't process types multiple times

Daniel Jacobowitz drow@false.org
Fri Mar 5 02:55:00 GMT 2004


On Tue, Feb 24, 2004 at 11:42:06PM -0500, Daniel Jacobowitz wrote:
> This independent patch is a performance and correctness fix for full symbol
> processing.  My description from the intercu branch posting:
> 
>  There are two ways that we can process a general DIE: process_die or
>  read_type_die.  Children of particular DIE types may be processed directly,
>  but these are the only major dispatch points.  It's interesting to notice
>  that almost everything called from read_type_die starts with "if (die->type)
>  return": everything but enumeration types and aggregate types, in fact.
>  This means that if the first reference to an enumeration or aggregate type
>  is a DW_AT_type or DW_AT_containing_type in a DIE numerically before the
>  type's DIE, we'll end up calling new_symbol for it twice.
> 
>  Fixing this saves about 8% memory and 4% time from gdb -readnow libc.so.6,
>  a lot of duplicate entries on maint print symbols which I vaguely recall
>  being confused about but never investigated, and some serious problems for
>  inter-CU support.  Without this, types could be added to the wrong symbol
>  table.
> 
> Tested i686-pc-linux-gnu, no regressions.  OK to commit?

Ping.  I would like to apply this bug fix for GDB 6.1.


-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer



More information about the Gdb-patches mailing list