[v2,00/31] Baby step for objfile splitting

Message ID 20231105-split-objfile-2023-bound-sym-october-v2-0-dbd2d158bbc3@tromey.com
Headers
Series Baby step for objfile splitting |

Message

Tom Tromey Nov. 5, 2023, 6:11 p.m. UTC
  Every year or so, I take a stab at the objfile splitting work.  This
always fails and I end up not sending anything.

This year, I decided to take a baby step instead, thinking maybe it
would be possible to slowly grind away at the problem.

This series is the first such step.  It spreads the use of
block_symbol through a bunch of code, trying to eliminate calls to
symbol::value_address.

The longer term idea here is to then add an objfile member to
block_symbol.  After this, it would be relatively simple to change
symbols to be relocated at point of use.  (This would be a significant
step toward objfile splitting, but there's even more to do after
that...)

Regression tested on x86-64 Fedora 38.

---
Changes in v2:
- Updated per review
- Added bound_symbol patch, converted some patches to use it
- More comprehensive change in ada-lang.c
- Link to v1: https://inbox.sourceware.org/gdb-patches/20231029-split-objfile-2023-bound-sym-october-v1-0-612531df2734@tromey.com

---
Tom Tromey (31):
      Introduce block-symbol.h
      Add block_symbol::address
      Add bound_symbol
      Easy conversions to use block_symbol::address
      Use block_symbol::address in ada-tasks.c
      Use block_symbol::address in printcmd.c
      Use bound_symbol::address in tracepoint.c
      Use block_symbol::address in tracepoint.c
      Use block_symbol::address in ax-gdb.c
      Use block_symbol::address in linespec.c
      Use block_symbol::address in ada-lang.c
      Use bound_symbol::address in symmisc.c
      Introduce read_var_value overload
      Use read_var_value in gdb/compile
      Return a block_symbol from find_pc_sect_function
      Use read_var_value overload in finish_command_fsm
      Use block_symbol in overload-handling code
      Change evaluate_var_value to accept a block_symbol
      Change value_of_variable to take a block_symbol
      Return a block_symbol from get_frame_function
      Use read_var_value overload in return_command
      Use read_var_value overload in py-finishbreakpoint.c
      Use read_var_value overload in py-framefilter.c
      Use read_var_value overload in Guile
      Use read_var_value in read_frame_arg and read_frame_local
      Change print_variable_and_value to take a block_symbol
      Change find_frame_funname to return a block_symbol
      Change btrace_function::sym to a block_symbol
      Use read_var_value overload in Python
      Remove the old read_var_value
      Change language_defn::read_var_value to accept block_symbol

 gdb/ada-lang.c                      | 116 +++++++++++++----------------
 gdb/ada-tasks.c                     |  19 ++---
 gdb/ax-gdb.c                        |  28 +++----
 gdb/ax-gdb.h                        |   2 +-
 gdb/block-symbol.h                  |  42 +++++++++++
 gdb/blockframe.c                    |  18 ++---
 gdb/breakpoint.c                    |   4 +-
 gdb/btrace.c                        |  38 +++++-----
 gdb/btrace.h                        |   5 +-
 gdb/cli/cli-cmds.c                  |   4 +-
 gdb/compile/compile-c-symbols.c     |  18 +++--
 gdb/compile/compile-cplus-symbols.c |   6 +-
 gdb/compile/compile-cplus-types.c   |   2 +-
 gdb/compile/compile-loc2c.c         |  14 ++--
 gdb/compile/compile.h               |   6 +-
 gdb/cp-support.c                    |  46 +++++++-----
 gdb/cp-support.h                    |   6 +-
 gdb/dwarf2/ada-imported.c           |   2 +-
 gdb/dwarf2/loc.c                    |  16 ++--
 gdb/dwarf2/loc.h                    |   3 +-
 gdb/eval.c                          |  62 +++++++---------
 gdb/expop.h                         |   5 ++
 gdb/f-valprint.c                    |   4 +-
 gdb/findvar.c                       |  24 +++---
 gdb/frame.c                         |   2 +-
 gdb/frame.h                         |   9 ++-
 gdb/guile/guile-internal.h          |   2 +-
 gdb/guile/scm-block.c               |   6 +-
 gdb/guile/scm-frame.c               |   7 +-
 gdb/guile/scm-symbol.c              |  78 ++++++++++----------
 gdb/infcall.c                       |   4 +-
 gdb/infcmd.c                        |  29 ++++----
 gdb/infrun.c                        |  10 +--
 gdb/inline-frame.c                  |   2 +-
 gdb/language.h                      |  14 +---
 gdb/linespec.c                      |  15 ++--
 gdb/mi/mi-cmd-stack.c               |  20 ++---
 gdb/printcmd.c                      |  22 +++---
 gdb/python/py-block.c               |   6 +-
 gdb/python/py-finishbreakpoint.c    |  11 +--
 gdb/python/py-frame.c               |  15 ++--
 gdb/python/py-framefilter.c         |  64 +++++++---------
 gdb/python/py-objfile.c             |  16 ++--
 gdb/python/py-record-btrace.c       |   2 +-
 gdb/python/py-symbol.c              | 143 ++++++++++++++++++------------------
 gdb/python/py-type.c                |   2 +-
 gdb/python/py-unwind.c              |   4 +-
 gdb/python/python-internal.h        |   4 +-
 gdb/record-btrace.c                 |   8 +-
 gdb/rust-lang.c                     |   2 +-
 gdb/skip.c                          |   2 +-
 gdb/solib-frv.c                     |   2 +-
 gdb/sparc-tdep.c                    |   4 +-
 gdb/stack.c                         |  59 ++++++++-------
 gdb/stack.h                         |   2 +-
 gdb/symmisc.c                       |  15 ++--
 gdb/symtab.c                        |   4 +-
 gdb/symtab.h                        |  38 +++++++---
 gdb/tracepoint.c                    |  26 ++++---
 gdb/tracepoint.h                    |   2 +-
 gdb/valarith.c                      |   9 +--
 gdb/valops.c                        |  75 ++++++++++---------
 gdb/value.c                         |   2 +-
 gdb/value.h                         |  18 ++---
 64 files changed, 647 insertions(+), 598 deletions(-)
---
base-commit: 0a845aef62b8813275616bd399e8fca679161cfc
change-id: 20231029-split-objfile-2023-bound-sym-october-8da7ff1061cc

Best regards,
  

Comments

Andrew Burgess Nov. 6, 2023, 3:16 p.m. UTC | #1
Tom Tromey <tom@tromey.com> writes:

> Every year or so, I take a stab at the objfile splitting work.  This
> always fails and I end up not sending anything.

For those of us who aren't familiar with the background here.  Do you
have a link to a previous description of, or could you give a
description of, what the "objfile splitting work" is about.  What's the
longer term goal, of which this series is a step towards.

Thanks,
Andrew


>
> This year, I decided to take a baby step instead, thinking maybe it
> would be possible to slowly grind away at the problem.
>
> This series is the first such step.  It spreads the use of
> block_symbol through a bunch of code, trying to eliminate calls to
> symbol::value_address.
>
> The longer term idea here is to then add an objfile member to
> block_symbol.  After this, it would be relatively simple to change
> symbols to be relocated at point of use.  (This would be a significant
> step toward objfile splitting, but there's even more to do after
> that...)
>
> Regression tested on x86-64 Fedora 38.
>
> ---
> Changes in v2:
> - Updated per review
> - Added bound_symbol patch, converted some patches to use it
> - More comprehensive change in ada-lang.c
> - Link to v1: https://inbox.sourceware.org/gdb-patches/20231029-split-objfile-2023-bound-sym-october-v1-0-612531df2734@tromey.com
>
> ---
> Tom Tromey (31):
>       Introduce block-symbol.h
>       Add block_symbol::address
>       Add bound_symbol
>       Easy conversions to use block_symbol::address
>       Use block_symbol::address in ada-tasks.c
>       Use block_symbol::address in printcmd.c
>       Use bound_symbol::address in tracepoint.c
>       Use block_symbol::address in tracepoint.c
>       Use block_symbol::address in ax-gdb.c
>       Use block_symbol::address in linespec.c
>       Use block_symbol::address in ada-lang.c
>       Use bound_symbol::address in symmisc.c
>       Introduce read_var_value overload
>       Use read_var_value in gdb/compile
>       Return a block_symbol from find_pc_sect_function
>       Use read_var_value overload in finish_command_fsm
>       Use block_symbol in overload-handling code
>       Change evaluate_var_value to accept a block_symbol
>       Change value_of_variable to take a block_symbol
>       Return a block_symbol from get_frame_function
>       Use read_var_value overload in return_command
>       Use read_var_value overload in py-finishbreakpoint.c
>       Use read_var_value overload in py-framefilter.c
>       Use read_var_value overload in Guile
>       Use read_var_value in read_frame_arg and read_frame_local
>       Change print_variable_and_value to take a block_symbol
>       Change find_frame_funname to return a block_symbol
>       Change btrace_function::sym to a block_symbol
>       Use read_var_value overload in Python
>       Remove the old read_var_value
>       Change language_defn::read_var_value to accept block_symbol
>
>  gdb/ada-lang.c                      | 116 +++++++++++++----------------
>  gdb/ada-tasks.c                     |  19 ++---
>  gdb/ax-gdb.c                        |  28 +++----
>  gdb/ax-gdb.h                        |   2 +-
>  gdb/block-symbol.h                  |  42 +++++++++++
>  gdb/blockframe.c                    |  18 ++---
>  gdb/breakpoint.c                    |   4 +-
>  gdb/btrace.c                        |  38 +++++-----
>  gdb/btrace.h                        |   5 +-
>  gdb/cli/cli-cmds.c                  |   4 +-
>  gdb/compile/compile-c-symbols.c     |  18 +++--
>  gdb/compile/compile-cplus-symbols.c |   6 +-
>  gdb/compile/compile-cplus-types.c   |   2 +-
>  gdb/compile/compile-loc2c.c         |  14 ++--
>  gdb/compile/compile.h               |   6 +-
>  gdb/cp-support.c                    |  46 +++++++-----
>  gdb/cp-support.h                    |   6 +-
>  gdb/dwarf2/ada-imported.c           |   2 +-
>  gdb/dwarf2/loc.c                    |  16 ++--
>  gdb/dwarf2/loc.h                    |   3 +-
>  gdb/eval.c                          |  62 +++++++---------
>  gdb/expop.h                         |   5 ++
>  gdb/f-valprint.c                    |   4 +-
>  gdb/findvar.c                       |  24 +++---
>  gdb/frame.c                         |   2 +-
>  gdb/frame.h                         |   9 ++-
>  gdb/guile/guile-internal.h          |   2 +-
>  gdb/guile/scm-block.c               |   6 +-
>  gdb/guile/scm-frame.c               |   7 +-
>  gdb/guile/scm-symbol.c              |  78 ++++++++++----------
>  gdb/infcall.c                       |   4 +-
>  gdb/infcmd.c                        |  29 ++++----
>  gdb/infrun.c                        |  10 +--
>  gdb/inline-frame.c                  |   2 +-
>  gdb/language.h                      |  14 +---
>  gdb/linespec.c                      |  15 ++--
>  gdb/mi/mi-cmd-stack.c               |  20 ++---
>  gdb/printcmd.c                      |  22 +++---
>  gdb/python/py-block.c               |   6 +-
>  gdb/python/py-finishbreakpoint.c    |  11 +--
>  gdb/python/py-frame.c               |  15 ++--
>  gdb/python/py-framefilter.c         |  64 +++++++---------
>  gdb/python/py-objfile.c             |  16 ++--
>  gdb/python/py-record-btrace.c       |   2 +-
>  gdb/python/py-symbol.c              | 143 ++++++++++++++++++------------------
>  gdb/python/py-type.c                |   2 +-
>  gdb/python/py-unwind.c              |   4 +-
>  gdb/python/python-internal.h        |   4 +-
>  gdb/record-btrace.c                 |   8 +-
>  gdb/rust-lang.c                     |   2 +-
>  gdb/skip.c                          |   2 +-
>  gdb/solib-frv.c                     |   2 +-
>  gdb/sparc-tdep.c                    |   4 +-
>  gdb/stack.c                         |  59 ++++++++-------
>  gdb/stack.h                         |   2 +-
>  gdb/symmisc.c                       |  15 ++--
>  gdb/symtab.c                        |   4 +-
>  gdb/symtab.h                        |  38 +++++++---
>  gdb/tracepoint.c                    |  26 ++++---
>  gdb/tracepoint.h                    |   2 +-
>  gdb/valarith.c                      |   9 +--
>  gdb/valops.c                        |  75 ++++++++++---------
>  gdb/value.c                         |   2 +-
>  gdb/value.h                         |  18 ++---
>  64 files changed, 647 insertions(+), 598 deletions(-)
> ---
> base-commit: 0a845aef62b8813275616bd399e8fca679161cfc
> change-id: 20231029-split-objfile-2023-bound-sym-october-8da7ff1061cc
>
> Best regards,
> -- 
> Tom Tromey <tom@tromey.com>
  
Tom Tromey Nov. 7, 2023, 3:36 a.m. UTC | #2
>>>>> "Andrew" == Andrew Burgess <aburgess@redhat.com> writes:

Andrew> Tom Tromey <tom@tromey.com> writes:
>> Every year or so, I take a stab at the objfile splitting work.  This
>> always fails and I end up not sending anything.

Andrew> For those of us who aren't familiar with the background here.  Do you
Andrew> have a link to a previous description of, or could you give a
Andrew> description of, what the "objfile splitting work" is about.  What's the
Andrew> longer term goal, of which this series is a step towards.

The basic idea is that debug info should be independent of the program
space.  That way, symbol tables can be shared across inferiors.

The project is somewhat documented here:

https://sourceware.org/gdb/wiki/ObjfileSplitting

It's been vaguely ongoing for a very long time.  I managed to implement
it for minsyms, psyms, and line tables; but symbols and blocks have
proven to be more difficult, with a trail of failed branches behind
them.

Tom
  
Andrew Burgess Nov. 7, 2023, 11:06 a.m. UTC | #3
Tom Tromey <tom@tromey.com> writes:

>>>>>> "Andrew" == Andrew Burgess <aburgess@redhat.com> writes:
>
> Andrew> Tom Tromey <tom@tromey.com> writes:
>>> Every year or so, I take a stab at the objfile splitting work.  This
>>> always fails and I end up not sending anything.
>
> Andrew> For those of us who aren't familiar with the background here.  Do you
> Andrew> have a link to a previous description of, or could you give a
> Andrew> description of, what the "objfile splitting work" is about.  What's the
> Andrew> longer term goal, of which this series is a step towards.
>
> The basic idea is that debug info should be independent of the program
> space.  That way, symbol tables can be shared across inferiors.
>
> The project is somewhat documented here:
>
> https://sourceware.org/gdb/wiki/ObjfileSplitting
>
> It's been vaguely ongoing for a very long time.  I managed to implement
> it for minsyms, psyms, and line tables; but symbols and blocks have
> proven to be more difficult, with a trail of failed branches behind
> them.

Thanks.  I have heard this discussed before, I'd just not associated
with that name.

Thanks,
Andrew