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

Daniel Jacobowitz
2004-03-05T02:55:05Z

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.