From: Daniel Berlin <dberlin@dberlin.org>
To: David Carlton <carlton@math.stanford.edu>
Cc: Andrew Cagney <ac131313@ges.redhat.com>, gdb <gdb@sources.redhat.com>
Subject: Re: struct environment
Date: Tue, 17 Sep 2002 12:50:00 -0000 [thread overview]
Message-ID: <A4C19322-CA76-11D6-9548-000393575BCC@dberlin.org> (raw)
In-Reply-To: <ro1u1kofrtq.fsf@jackfruit.Stanford.EDU>
Having done this for regcache and reggroup it is worth it -> you get
>> to see what actually works rather than what everyone else thinks
>> should work. You can also pick out the cleanups that will make the
>> final change easier. For instance - tightening up the way GDB
>> creates symbol tables (DanielB suggested moving psymtab into stabs)
>> an performs lookups on them.
>
> Personally, I'd rather tighten up the interface to symbol lookups
> first and only then move on to optimizations like changing how
> reading in a part of the symbol information is implemented.
These are orthogonal issues. Reading in part of the symbol information
is *not* an optimization (as the source stands now). It is a necessity
controlled *by the symbol lookup*.
If psymtabs were private to stabs, then this would not be the cast
anymore, but as it stands now, the readin of psymtabs and conversion to
symtabs is controlled by the symbol lookup functions.
If your lookup doesn't do this as well, *and* you don't change how
symbol tables are created (ie you do nothing), stuff will break.
>
>> Instead, initially, I think these tables could be simple linear
>> lists (that is what ``struct block'' currently implements so it
>> can't be any worse :-) (just the global / final table is special
>> :-).
>
> For struct block, I'm tracking existing design extremely closely.
>
No offense, but you shouldn't do that.
The current design does *not* scale. Or at least, not until hash tables
were introduced, which happened in the past 3 months.
I've only tested scaling of hash tables up to 100 meg of debug info.
Even then, due to the number of blocks one has to search, things start
to get a bit slow. There are plenty of projects these days with 500 or
1 gig of debug info.
You *need* to be thinking about these things whenever you design the
data structures and algorithms.
The reason GDB was so slow on these large cases before hash tables is
precisely because nobody seemed to even consider what would happen 10
years in the future.
It's perfectly reasonable to assume that in 10 years, we will have 10x
as much debug info to deal with.
If we don't, great.
If we do, and we haven't even considered it, we are *really* screwed.
> Currently, struct block has these options:
>
> * Hash tables. (Used almost everywhere.)
This is a new development.
> * Lists that aren't sorted by name. (Used in blocks that are the body
> of functions, and in Java's dynamic class table.)
> * Lists that are sorted by name. (Used by mdebugread.c in places
> where hash tables should be used.)
>
> Most of these can't grow, but jv-lang.c and mdebugread.c both have
> code by which lists can grow.
>
> When the struct block conversion is done, the only change will be that
> sorted lists will go away (since they're only used by mdebugread.c,
> which should be converted over to using hash tables instead), and that
> the common code in jv-lang.c and mdebugread.c to allow lists that grow
> will all be in one place. No other changes: extremely similar data
> structures, exactly the same algorithms.
Which haven't served particularly well for the past 5 years (before
that, maybe).
No offense, and not your fault.
And i'm not saying they *aren't* adequate.
It just needs more thought than "it's currently done this way, thus, we
should do it that way in the future".
>
>> - Am I correct to think that the objective is to create a directed
>> acyclic graph of nametabs and have lookups search through each in
>> turn.
>
> Not quite as Daniel has explained; C++'s name lookup rules are pretty
> complicated. Which isn't to say that we have to track those name
> lookup rules perfectly: e.g. it's not the end of the world if we don't
> notice that a name lookup is ambiguous where a C++ compiler would be
> required to notice that.
No, we should actually be able to do exactly this.
Even if we *don't*, we should be able to.
> But it is, I think, a bad idea if we miss a
> symbol that we should find, or if we return the wrong symbol instead
> of the right one.
>
Which is what happens if you don't track the name lookup rules
perfectly.
THe rules specify what is ill formed. If you find symbols you
shouldn't, it's not only confusing to the user, it's the wrong symbol.
next prev parent reply other threads:[~2002-09-17 19:50 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-09-05 13:50 David Carlton
2002-09-06 8:06 ` Daniel Jacobowitz
2002-09-06 10:20 ` David Carlton
2002-09-06 10:57 ` Daniel Jacobowitz
2002-09-06 11:56 ` David Carlton
2002-09-06 12:34 ` Daniel Berlin
2002-09-06 12:41 ` Daniel Jacobowitz
2002-09-06 12:55 ` Daniel Berlin
2002-09-11 11:33 ` David Carlton
2002-09-11 11:36 ` Daniel Jacobowitz
2002-09-11 12:27 ` David Carlton
2002-09-06 14:43 ` David Carlton
2002-09-06 14:46 ` Daniel Jacobowitz
2002-09-06 14:57 ` mdebugread.c (was Re: struct environment) David Carlton
2002-09-06 15:35 ` Daniel Jacobowitz
2002-09-10 17:25 ` struct environment David Carlton
2002-09-10 17:31 ` Daniel Jacobowitz
2002-09-11 10:29 ` David Carlton
2002-09-11 10:55 ` Daniel Jacobowitz
2002-09-11 12:33 ` Daniel Berlin
2002-09-10 17:36 ` David Carlton
2002-09-16 22:03 ` Andrew Cagney
2002-09-06 15:00 ` David Carlton
2002-09-06 16:37 ` Tom Tromey
2002-09-06 17:19 ` David Carlton
2002-09-07 10:26 ` Per Bothner
2002-09-07 10:32 ` Daniel Jacobowitz
2002-09-09 11:18 ` David Carlton
2002-09-12 12:26 ` Andrew Cagney
2002-09-13 9:44 ` David Carlton
2002-09-17 0:48 ` Andrew Cagney
2002-09-17 6:41 ` Daniel Jacobowitz
2002-09-17 8:59 ` Andrew Cagney
2002-09-17 9:07 ` Daniel Jacobowitz
2002-09-17 10:54 ` Andrew Cagney
2002-09-17 11:02 ` Daniel Jacobowitz
2002-09-17 12:37 ` Andrew Cagney
2002-09-17 12:41 ` Daniel Jacobowitz
2002-09-18 8:13 ` Andrew Cagney
2002-09-17 12:52 ` Daniel Berlin
2002-09-17 13:34 ` Daniel Jacobowitz
2002-09-17 21:51 ` Daniel Berlin
2002-09-18 7:26 ` Daniel Jacobowitz
2002-09-18 9:08 ` David Carlton
2002-09-17 12:18 ` David Carlton
2002-09-17 10:29 ` David Carlton
2002-09-17 12:50 ` Daniel Berlin [this message]
2002-09-17 13:24 ` David Carlton
2002-09-18 22:26 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=A4C19322-CA76-11D6-9548-000393575BCC@dberlin.org \
--to=dberlin@dberlin.org \
--cc=ac131313@ges.redhat.com \
--cc=carlton@math.stanford.edu \
--cc=gdb@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox