diff options
author | Joel Brobecker <brobecker@gnat.com> | 2010-05-28 01:32:08 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2010-05-28 01:32:08 +0000 |
commit | e802dbe04fefcc694efa1ae0c26effc830841a96 (patch) | |
tree | 40526585f6ee2456dcfcef56e8ae4239060bd5af /bfd/vms-misc.c | |
parent | e15a9a5e1c53753e796aef73051f753e682df522 (diff) | |
download | gdb-e802dbe04fefcc694efa1ae0c26effc830841a96.zip gdb-e802dbe04fefcc694efa1ae0c26effc830841a96.tar.gz gdb-e802dbe04fefcc694efa1ae0c26effc830841a96.tar.bz2 |
Cache the TSD type in inferior-data (performance).
This is something I noticed while looking at ada_find_any_type.
Use of that function is expensive, since it causes a global lookup.
Reviewing some of the uses, I found that we were calling it to get
a specific type everytime we print a tagged type (the equivalent of
classes in C++); and not only that, we did it 4 times [1]!
Since the type in question (ada__tags__type_specific_data) is guarantied
to remain the same througout the entire life of the inferior, the solution
was to cache that type in inferior private data. This patch creates
an ada-land private-data area, and uses it to store that type after
the first time we look it up.
[1]: The problem is mitigated in AdaCore's tree because we use an Ada
symbol cache which we are thinking of contributing to the FSF tree.
But that's still pretty bad, regardless.
2010-05-27 Joel Brobecker <brobecker@adacore.com>
* ada-lang.c (ada_inferior_data): New struct.
(ada_inferior_data): New static global.
(ada_inferior_data_cleanup, get_ada_inferior_data, ada_inferior_exit)
(ada_get_tsd_type): New functions.
(ada_tag_name_2): Use ada_get_tsd_type instead of ada_find_any_type
to look the tsd type up.
(_initialize_ada_language): Attach ada_inferior_exit to inferior_exit
event. Set ada_inferior_data.
Diffstat (limited to 'bfd/vms-misc.c')
0 files changed, 0 insertions, 0 deletions