This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA] Add global/static and symbol kind indicator to .gdb_index
- From: Tom Tromey <tromey at redhat dot com>
- To: dje at google dot com (Doug Evans)
- Cc: gdb-patches at sourceware dot org, ccoutant at google dot com
- Date: Fri, 22 Jun 2012 13:44:52 -0600
- Subject: Re: [RFA] Add global/static and symbol kind indicator to .gdb_index
- References: <20120619074931.6F0B41E136F@ruffy2.mtv.corp.google.com>
>>>>> "Doug" == Doug Evans <dje@google.com> writes:
Doug> The global/static bit massively speeds up looking up things like
Doug> "int" when debugging with lots of shared libraries (all having
Doug> .gdb_index). PR 14125
I don't think this patch is needed to achieve this. At least, the "int"
case and other similar cases were fixed by:
revision 1.462
date: 2010/09/27 18:42:36; author: tromey; state: Exp; lines: +80 -45
* dwarf2read.c (dwarf2_read_index): Only allow version 3.
(write_psymbols): Add 'psyms_seen' and 'is_static' arguments.
Only emit a given psymbol once.
(struct signatured_type_index_data) <psyms_seen>: New field.
(write_one_signatured_type): Update.
(cleanup_htab): New function.
(write_psymtabs_to_index): Update. Create psyms_seen hash. Bump
version to 3.
(save_gdb_index_command): Update index documentation.
What happens after 1.462 is that a given partial symbol only ends up in
the index once. Due to the bcache this means that all duplicates of the
same type are filtered out.
So, for instance, from gdb.debug on Fedora 16:
barimba. readelf --debug-dump=gdb_index /usr/lib/debug/usr/bin/gdb.debug |fgrep '] int:'
[29426] int: 0
That is, "int" is just defined in a single CU.
Maybe gold isn't doing this? I think it probably should.
I was going to ask if you measured the size increase; but I think it
can't be very large -- basically only in the case where a psymbol
appears in one CU's static list and another CU's global list. I doubt
that happens often enough to worry about.
Doug> The symbol kind indicator speeds up things like "info fun|var foo".
Doug> [One example is ~500MB/67sec -> ~250MB/30sec.]
I think this is a reasonable justification.
Doug> [The patch adds include/gdb/gdb-index.h which technically needs
Doug> approval from binutils@, but no point in submitting it there
Doug> until the gdb parts are approved.]
I don't think I even knew about this directory until I read your patch
:-)
Anyway, I read the patch, and I didn't see any issues with it.
I think it is ok.
Tom