public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2 00/42] Share DWARF partial symtabs between objfiles
@ 2020-05-12 21:08 Simon Marchi
  2020-05-12 21:08 ` [PATCH v2 01/42] Introduce dwarf2_per_objfile::obstack Simon Marchi
                   ` (45 more replies)
  0 siblings, 46 replies; 92+ messages in thread
From: Simon Marchi @ 2020-05-12 21:08 UTC (permalink / raw)
  To: gdb-patches; +Cc: Simon Marchi

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


^ permalink raw reply	[flat|nested] 92+ messages in thread

end of thread, other threads:[~2020-06-12  3:25 UTC | newest]

Thread overview: 92+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-12 21:08 [PATCH v2 00/42] Share DWARF partial symtabs between objfiles Simon Marchi
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).