From: Simon Marchi <simon.marchi@efficios.com>
To: gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@efficios.com>
Subject: [PATCH v2 00/42] Share DWARF partial symtabs between objfiles
Date: Tue, 12 May 2020 17:08:31 -0400 [thread overview]
Message-ID: <20200512210913.5593-1-simon.marchi@efficios.com> (raw)
This is version 2 of this patchset originally written by Tom:
https://sourceware.org/legacy-ml/gdb-patches/2020-02/msg00594.html
The current patchset therefore contains a mix of Tom's patches that I modified,
plus a few new patches. I won't repeat everything that is said in the cover
letter of that patchset, please read that to understand the motivation behind
this change..
The big difference between v1 and v2 is how the split is done. In v1, the
object structure looks like this:
objfile -> dwarf2_per_objfile -> dwarf2_unshareable
where `dwarf2_per_objfile` is actually shared between objfiles (there is one
copy per BFD), and `dwarf2_unshareable` is not (there is one copy per objfile).
The dwarf2_per_objfile -> dwarf2_unshareable link is updated at all entry
points of the DWARF code based on what is the current objfile.
The current patchset (v2) proposes this structure instead, which in my opinion
is more natural:
objfile -> dwarf2_per_objfile -> dwarf2_per_bfd
Where `dwarf2_per_objfile` is really per-objfile (there is one copy per
objfile) and `dwarf2_per_bfd` is per-bfd (there is one copy per-bfd). There is
no link to update, whatever is shared between objfiles is put in
`dwarf2_per_bfd` and each `dwarf2_per_objfile` always points to one
`dwarf2_per_bfd`.
Since there were performance numbers with the original patchset, I made my own
here to see if the speedups were still there. Like in the original patchset, I
set "maintenance time 1" and did "add-inferior -exec ./gdb" after "./gdb gdb".
I disabled any auto-loading to avoid loading gdb-gdb.{gdb,py}. GDB is built
with -O2 and gcc 9, and it is running on an AMD EPYC 7351P.
Before: Command execution time: 1.213480 (cpu), 1.214268 (wall)
After: Command execution time: 0.001697 (cpu), 0.001694 (wall)
These are the times of one run, but all runs I did are very close. The "after"
time is surpringly low compared to the original numbers, I hope it doesn't mean
I messed up something and we are skipping something important...
At some point I tested with all these boards and did not see any regression
(they helped very much to find some issues in the process though):
unix cc-with-debug-names cc-with-dwz cc-with-dwz-m cc-with-gdb-index dwarf4-gdb-index fission-dwp fission readnow
I have since rebased the patchset and resolved conflicts, it's therefore
possible I messed something up.
Simon Marchi (35):
Split dwarf2_per_objfile into dwarf2_per_objfile and dwarf2_per_bfd
Remove symtab links from dwarf2_psymtab and dwarf2_per_cu_quick_data
Move die_type_hash to dwarf2_per_objfile
Add dwarf2_per_objfile field to dwarf2_cu
Remove reference to dwarf2_per_cu_data::dwarf2_per_objfile in
dw2_do_instantiate_symtab
Remove dwarf2_cu->per_cu->dwarf2_per_objfile references
Add dwarf2_per_bfd field to dwarf2_per_cu_data
Make dwarf2_get_dwz_file take a dwarf2_per_bfd
Use bfd_get_filename instead of objfile_name in lookup_dwo_unit
Add dwarf2_per_objfile parameter to cutu_reader's constructors
Make queue_and_load_dwo_tu receive a dwarf2_cu
Remove dwarf2_per_cu_data::dwarf2_per_objfile reference in
cutu_reader::keep
Add dwarf2_per_objfile parameter to create_partial_symtab
Add dwarf2_per_objfile parameter to recursively_compute_inclusions
Add dwarf2_per_objfile parameter to process_full_{comp,type}_unit
Pass dwarf2_cu objects to dwo-related functions, instead of
dwarf2_per_cu_data
Remove reference to dwarf2_per_cu_data::dwarf2_per_objfile in
queue_and_load_all_dwo_tus
Move int type methods out of dwarf2_per_cu_data
Add dwarf2_per_objfile to dwarf_expr_context and dwarf2_frame_cache
Remove dwarf2_per_cu_data::text_offset
Add dwarf2_per_objfile parameter to dwarf2_read_addr_index
Add dwarf2_per_objfile parameter to allocate_piece_closure
Add dwarf2_per_objfile parameters to dwarf2_fetch_* functions
Remove dwarf2_per_cu_data::objfile ()
Add dwarf2_per_objfile parameter to free_one_cached_comp_unit
Add dwarf2_per_objfile parameter to get_die_type_at_offset
Remove leftover references to dwarf2_per_cu_data::dwarf2_per_objfile
Remove dwarf2_per_cu_data::dwarf2_per_objfile
Pass dwarf2_per_bfd instead of dwarf2_per_objfile to some
index-related functions
Pass dwarf2_cu to process_full_{comp,type}_unit
Make load_cu return the loaded dwarf2_cu
Add comp_unit_head to dwarf2_per_cu_data
Pass existing_cu object to cutu_reader
Replace dwarf2_per_cu_data::cu backlink with per-objfile map
Make mapped_debug_names independent of objfile
Tom Tromey (7):
Introduce dwarf2_per_objfile::obstack
Add "objfile" parameter to two partial_symtab methods
Add dwarf2_per_cu_data::index
Add dwarf2_per_objfile member to DWARF batons
Split type_unit_group
Move signatured_type::type to unshareable object
Share DWARF partial symtabs
gdb/compile/compile-loc2c.c | 20 +-
gdb/compile/compile.h | 13 +-
gdb/dwarf2/expr.c | 11 +-
gdb/dwarf2/expr.h | 11 +-
gdb/dwarf2/frame.c | 67 +-
gdb/dwarf2/index-cache.c | 2 +-
gdb/dwarf2/index-write.c | 51 +-
gdb/dwarf2/loc.c | 289 ++--
gdb/dwarf2/loc.h | 11 +-
gdb/dwarf2/macro.c | 11 +-
gdb/dwarf2/read.c | 2490 ++++++++++++++++++-----------------
gdb/dwarf2/read.h | 298 +++--
gdb/gdbtypes.h | 8 +-
gdb/objfiles.h | 2 +-
gdb/psympriv.h | 19 +-
gdb/psymtab.c | 44 +-
16 files changed, 1848 insertions(+), 1499 deletions(-)
--
2.26.2
next reply other threads:[~2020-05-12 21:09 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-12 21:08 Simon Marchi [this message]
2020-05-12 21:08 ` [PATCH v2 01/42] Introduce dwarf2_per_objfile::obstack Simon Marchi
2020-05-12 21:08 ` [PATCH v2 02/42] Add "objfile" parameter to two partial_symtab methods Simon Marchi
2020-05-12 21:08 ` [PATCH v2 03/42] Add dwarf2_per_cu_data::index Simon Marchi
2020-05-12 21:08 ` [PATCH v2 04/42] Add dwarf2_per_objfile member to DWARF batons Simon Marchi
2020-05-12 21:08 ` [PATCH v2 05/42] Split dwarf2_per_objfile into dwarf2_per_objfile and dwarf2_per_bfd Simon Marchi
2020-05-12 21:08 ` [PATCH v2 06/42] Remove symtab links from dwarf2_psymtab and dwarf2_per_cu_quick_data Simon Marchi
2020-05-12 21:08 ` [PATCH v2 07/42] Move die_type_hash to dwarf2_per_objfile Simon Marchi
2020-05-12 21:08 ` [PATCH v2 08/42] Add dwarf2_per_objfile field to dwarf2_cu Simon Marchi
2020-05-12 21:08 ` [PATCH v2 09/42] Remove reference to dwarf2_per_cu_data::dwarf2_per_objfile in dw2_do_instantiate_symtab Simon Marchi
2020-05-12 21:11 ` [PATCH v2 10/42] Remove dwarf2_cu->per_cu->dwarf2_per_objfile references Simon Marchi
2020-05-12 21:11 ` [PATCH v2 11/42] Add dwarf2_per_bfd field to dwarf2_per_cu_data Simon Marchi
2020-05-12 21:11 ` [PATCH v2 12/42] Make dwarf2_get_dwz_file take a dwarf2_per_bfd Simon Marchi
2020-05-12 21:11 ` [PATCH v2 13/42] Use bfd_get_filename instead of objfile_name in lookup_dwo_unit Simon Marchi
2020-05-12 21:11 ` [PATCH v2 14/42] Add dwarf2_per_objfile parameter to cutu_reader's constructors Simon Marchi
2020-05-12 21:11 ` [PATCH v2 15/42] Make queue_and_load_dwo_tu receive a dwarf2_cu Simon Marchi
2020-05-22 20:45 ` Tom Tromey
2020-05-25 19:10 ` Simon Marchi
2020-05-12 21:11 ` [PATCH v2 16/42] Remove dwarf2_per_cu_data::dwarf2_per_objfile reference in cutu_reader::keep Simon Marchi
2020-05-12 21:11 ` [PATCH v2 17/42] Add dwarf2_per_objfile parameter to create_partial_symtab Simon Marchi
2020-05-12 21:11 ` [PATCH v2 18/42] Add dwarf2_per_objfile parameter to recursively_compute_inclusions Simon Marchi
2020-05-12 21:11 ` [PATCH v2 19/42] Add dwarf2_per_objfile parameter to process_full_{comp, type}_unit Simon Marchi
2020-05-12 21:12 ` [PATCH v2 20/42] Pass dwarf2_cu objects to dwo-related functions, instead of dwarf2_per_cu_data Simon Marchi
2020-05-12 21:12 ` [PATCH v2 21/42] Remove reference to dwarf2_per_cu_data::dwarf2_per_objfile in queue_and_load_all_dwo_tus Simon Marchi
2020-05-12 21:12 ` [PATCH v2 22/42] Move int type methods out of dwarf2_per_cu_data Simon Marchi
2020-05-12 21:12 ` [PATCH v2 23/42] Add dwarf2_per_objfile to dwarf_expr_context and dwarf2_frame_cache Simon Marchi
2020-05-22 21:04 ` Tom Tromey
2020-05-25 19:50 ` Simon Marchi
2020-05-28 1:44 ` Simon Marchi
2020-05-12 21:12 ` [PATCH v2 24/42] Remove dwarf2_per_cu_data::text_offset Simon Marchi
2020-05-12 21:12 ` [PATCH v2 25/42] Add dwarf2_per_objfile parameter to dwarf2_read_addr_index Simon Marchi
2020-05-12 21:12 ` [PATCH v2 26/42] Add dwarf2_per_objfile parameter to allocate_piece_closure Simon Marchi
2020-05-12 21:12 ` [PATCH v2 27/42] Add dwarf2_per_objfile parameters to dwarf2_fetch_* functions Simon Marchi
2020-05-12 21:12 ` [PATCH v2 28/42] Remove dwarf2_per_cu_data::objfile () Simon Marchi
2020-05-27 16:27 ` Tom de Vries
2020-05-27 16:52 ` Tom de Vries
2020-05-27 20:03 ` Simon Marchi
2020-05-27 21:08 ` Tom de Vries
2020-05-27 21:55 ` Simon Marchi
2020-05-27 22:16 ` Simon Marchi
2020-05-28 2:00 ` Simon Marchi
2020-05-28 13:05 ` Tom de Vries
2020-05-28 15:33 ` Simon Marchi
2020-05-28 16:24 ` Christian Biesinger
2020-05-28 16:52 ` Simon Marchi
2020-05-28 19:49 ` Simon Marchi
2020-05-12 21:12 ` [PATCH v2 29/42] Add dwarf2_per_objfile parameter to free_one_cached_comp_unit Simon Marchi
2020-05-12 21:17 ` [PATCH v2 30/42] Add dwarf2_per_objfile parameter to get_die_type_at_offset Simon Marchi
2020-05-12 21:17 ` [PATCH v2 31/42] Remove leftover references to dwarf2_per_cu_data::dwarf2_per_objfile Simon Marchi
2020-05-12 21:17 ` [PATCH v2 32/42] Remove dwarf2_per_cu_data::dwarf2_per_objfile Simon Marchi
2020-05-12 21:17 ` [PATCH v2 33/42] Split type_unit_group Simon Marchi
2020-05-13 9:54 ` Tom de Vries
2020-05-13 15:06 ` Simon Marchi
2020-05-12 21:17 ` [PATCH v2 34/42] Move signatured_type::type to unshareable object Simon Marchi
2020-05-12 21:17 ` [PATCH v2 35/42] Pass dwarf2_per_bfd instead of dwarf2_per_objfile to some index-related functions Simon Marchi
2020-05-12 21:17 ` [PATCH v2 36/42] Pass dwarf2_cu to process_full_{comp,type}_unit Simon Marchi
2020-05-12 21:17 ` [PATCH v2 37/42] Make load_cu return the loaded dwarf2_cu Simon Marchi
2020-05-12 21:17 ` [PATCH v2 38/42] Add comp_unit_head to dwarf2_per_cu_data Simon Marchi
2020-05-12 21:17 ` [PATCH v2 39/42] Pass existing_cu object to cutu_reader Simon Marchi
2020-05-22 20:57 ` Tom Tromey
2020-05-25 19:10 ` Simon Marchi
2020-05-12 21:18 ` [PATCH v2 40/42] Replace dwarf2_per_cu_data::cu backlink with per-objfile map Simon Marchi
2020-05-12 21:18 ` [PATCH v2 41/42] Make mapped_debug_names independent of objfile Simon Marchi
2020-05-22 21:01 ` Tom Tromey
2020-05-25 19:53 ` Simon Marchi
2020-05-12 21:18 ` [PATCH v2 42/42] Share DWARF partial symtabs Simon Marchi
2020-05-13 10:17 ` [PATCH v2 00/42] Share DWARF partial symtabs between objfiles Tom de Vries
2020-05-13 15:46 ` Simon Marchi
2020-05-22 21:02 ` Tom Tromey
2020-05-25 19:53 ` Simon Marchi
2020-05-13 14:52 ` Simon Marchi
2020-05-22 21:07 ` Tom Tromey
2020-05-23 12:24 ` Pedro Alves
2020-05-25 19:56 ` Simon Marchi
2020-05-26 11:17 ` Pedro Alves
2020-05-26 15:35 ` Simon Marchi
2020-05-26 21:34 ` Simon Marchi
2020-05-27 5:08 ` Simon Marchi
2020-05-27 14:53 ` Simon Marchi
2020-05-27 15:51 ` Simon Marchi
2020-05-29 10:23 ` Tom de Vries
2020-05-29 12:55 ` Tom de Vries
2020-05-31 4:16 ` Simon Marchi
2020-05-31 14:22 ` Tom de Vries
2020-06-02 21:27 ` Simon Marchi
2020-06-04 17:55 ` Tom de Vries
2020-06-04 18:04 ` Simon Marchi
2020-06-10 3:43 ` Simon Marchi
2020-06-12 3:25 ` Tom Tromey
2020-05-27 14:50 ` [PATCH v2 41.5/42] Move line_header_hash to dwarf2_per_objfile Simon Marchi
2020-05-27 15:07 ` Tom Tromey
2020-05-27 15:10 ` Simon Marchi
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=20200512210913.5593-1-simon.marchi@efficios.com \
--to=simon.marchi@efficios.com \
--cc=gdb-patches@sourceware.org \
/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