]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit - gdb/value.c
gdb: pass frames as `const frame_info_ptr &`
authorSimon Marchi <simon.marchi@efficios.com>
Mon, 19 Feb 2024 18:07:47 +0000 (13:07 -0500)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 20 Feb 2024 15:42:25 +0000 (10:42 -0500)
commit8480a37e146c40e82a93c0ecf6144571516c95c5
treebfa5d1e14e5212821ee29ae5099be72399137036
parent1b2c120daf9e2d935453f9051bbeafbac7f9f14d
gdb: pass frames as `const frame_info_ptr &`

We currently pass frames to function by value, as `frame_info_ptr`.
This is somewhat expensive:

 - the size of `frame_info_ptr` is 64 bytes, which is a bit big to pass
   by value
 - the constructors and destructor link/unlink the object in the global
   `frame_info_ptr::frame_list` list.  This is an `intrusive_list`, so
   it's not so bad: it's just assigning a few points, there's no memory
   allocation as if it was `std::list`, but still it's useless to do
   that over and over.

As suggested by Tom Tromey, change many function signatures to accept
`const frame_info_ptr &` instead of `frame_info_ptr`.

Some functions reassign their `frame_info_ptr` parameter, like:

  void
  the_func (frame_info_ptr frame)
  {
    for (; frame != nullptr; frame = get_prev_frame (frame))
      {
        ...
      }
  }

I wondered what to do about them, do I leave them as-is or change them
(and need to introduce a separate local variable that can be
re-assigned).  I opted for the later for consistency.  It might not be
clear why some functions take `const frame_info_ptr &` while others take
`frame_info_ptr`.  Also, if a function took a `frame_info_ptr` because
it did re-assign its parameter, I doubt that we would think to change it
to `const frame_info_ptr &` should the implementation change such that
it doesn't need to take `frame_info_ptr` anymore.  It seems better to
have a simple rule and apply it everywhere.

Change-Id: I59d10addef687d157f82ccf4d54f5dde9a963fd0
Approved-By: Andrew Burgess <aburgess@redhat.com>
224 files changed:
gdb/aarch64-fbsd-tdep.c
gdb/aarch64-linux-tdep.c
gdb/aarch64-tdep.c
gdb/ada-lang.c
gdb/ada-lang.h
gdb/alpha-linux-tdep.c
gdb/alpha-mdebug-tdep.c
gdb/alpha-netbsd-tdep.c
gdb/alpha-obsd-tdep.c
gdb/alpha-tdep.c
gdb/alpha-tdep.h
gdb/amd64-darwin-tdep.c
gdb/amd64-fbsd-tdep.c
gdb/amd64-linux-tdep.c
gdb/amd64-netbsd-tdep.c
gdb/amd64-obsd-tdep.c
gdb/amd64-sol2-tdep.c
gdb/amd64-tdep.c
gdb/amd64-windows-tdep.c
gdb/amdgpu-tdep.c
gdb/arc-linux-tdep.c
gdb/arc-tdep.c
gdb/arc-tdep.h
gdb/arch-utils.c
gdb/arch-utils.h
gdb/arm-fbsd-tdep.c
gdb/arm-linux-tdep.c
gdb/arm-obsd-tdep.c
gdb/arm-tdep.c
gdb/arm-tdep.h
gdb/arm-wince-tdep.c
gdb/avr-tdep.c
gdb/bfin-linux-tdep.c
gdb/bfin-tdep.c
gdb/blockframe.c
gdb/bpf-tdep.c
gdb/cp-abi.c
gdb/cp-abi.h
gdb/cris-tdep.c
gdb/csky-linux-tdep.c
gdb/csky-tdep.c
gdb/dtrace-probe.c
gdb/dummy-frame.c
gdb/dummy-frame.h
gdb/dwarf2/ada-imported.c
gdb/dwarf2/call-site.h
gdb/dwarf2/expr.c
gdb/dwarf2/expr.h
gdb/dwarf2/frame-tailcall.c
gdb/dwarf2/frame-tailcall.h
gdb/dwarf2/frame.c
gdb/dwarf2/frame.h
gdb/dwarf2/loc.c
gdb/dwarf2/loc.h
gdb/extension-priv.h
gdb/extension.c
gdb/extension.h
gdb/findvar.c
gdb/frame-base.c
gdb/frame-base.h
gdb/frame-unwind.c
gdb/frame-unwind.h
gdb/frame.c
gdb/frame.h
gdb/frv-linux-tdep.c
gdb/frv-tdep.c
gdb/ft32-tdep.c
gdb/gdbarch-gen.h
gdb/gdbarch.c
gdb/gdbarch_components.py
gdb/gnu-v3-abi.c
gdb/h8300-tdep.c
gdb/hppa-bsd-tdep.c
gdb/hppa-linux-tdep.c
gdb/hppa-netbsd-tdep.c
gdb/hppa-tdep.c
gdb/hppa-tdep.h
gdb/i386-bsd-tdep.c
gdb/i386-darwin-tdep.c
gdb/i386-darwin-tdep.h
gdb/i386-fbsd-tdep.c
gdb/i386-gnu-tdep.c
gdb/i386-linux-tdep.c
gdb/i386-netbsd-tdep.c
gdb/i386-nto-tdep.c
gdb/i386-obsd-tdep.c
gdb/i386-sol2-tdep.c
gdb/i386-tdep.c
gdb/i386-tdep.h
gdb/i386-windows-tdep.c
gdb/i387-tdep.c
gdb/i387-tdep.h
gdb/ia64-libunwind-tdep.c
gdb/ia64-libunwind-tdep.h
gdb/ia64-tdep.c
gdb/ia64-tdep.h
gdb/infcmd.c
gdb/inferior.h
gdb/infrun.c
gdb/infrun.h
gdb/inline-frame.c
gdb/inline-frame.h
gdb/iq2000-tdep.c
gdb/jit.c
gdb/language.h
gdb/lm32-tdep.c
gdb/loongarch-linux-tdep.c
gdb/loongarch-tdep.c
gdb/loongarch-tdep.h
gdb/m32c-tdep.c
gdb/m32r-linux-tdep.c
gdb/m32r-tdep.c
gdb/m68hc11-tdep.c
gdb/m68k-linux-tdep.c
gdb/m68k-tdep.c
gdb/mep-tdep.c
gdb/mi/mi-cmd-stack.c
gdb/mi/mi-main.c
gdb/microblaze-linux-tdep.c
gdb/microblaze-tdep.c
gdb/minsyms.c
gdb/mips-fbsd-tdep.c
gdb/mips-linux-tdep.c
gdb/mips-netbsd-tdep.c
gdb/mips-sde-tdep.c
gdb/mips-tdep.c
gdb/mips-tdep.h
gdb/mips64-obsd-tdep.c
gdb/mn10300-linux-tdep.c
gdb/mn10300-tdep.c
gdb/moxie-tdep.c
gdb/msp430-tdep.c
gdb/nds32-tdep.c
gdb/nios2-linux-tdep.c
gdb/nios2-tdep.c
gdb/nios2-tdep.h
gdb/observable.h
gdb/or1k-linux-tdep.c
gdb/or1k-tdep.c
gdb/ppc-fbsd-tdep.c
gdb/ppc-linux-tdep.c
gdb/ppc-netbsd-tdep.c
gdb/ppc-obsd-tdep.c
gdb/ppc-sysv-tdep.c
gdb/ppc-tdep.h
gdb/ppc64-tdep.c
gdb/ppc64-tdep.h
gdb/printcmd.c
gdb/probe.c
gdb/probe.h
gdb/python/py-event.h
gdb/python/py-frame.c
gdb/python/py-framefilter.c
gdb/python/py-inferior.c
gdb/python/py-infevents.c
gdb/python/py-unwind.c
gdb/python/python-internal.h
gdb/record-btrace.c
gdb/riscv-fbsd-tdep.c
gdb/riscv-linux-tdep.c
gdb/riscv-tdep.c
gdb/riscv-tdep.h
gdb/rl78-tdep.c
gdb/rs6000-aix-tdep.c
gdb/rs6000-tdep.c
gdb/rx-tdep.c
gdb/s12z-tdep.c
gdb/s390-linux-tdep.c
gdb/s390-tdep.c
gdb/s390-tdep.h
gdb/sentinel-frame.c
gdb/sh-linux-tdep.c
gdb/sh-tdep.c
gdb/sol2-tdep.c
gdb/sol2-tdep.h
gdb/sparc-linux-tdep.c
gdb/sparc-netbsd-tdep.c
gdb/sparc-obsd-tdep.c
gdb/sparc-sol2-tdep.c
gdb/sparc-tdep.c
gdb/sparc-tdep.h
gdb/sparc64-fbsd-tdep.c
gdb/sparc64-linux-tdep.c
gdb/sparc64-netbsd-tdep.c
gdb/sparc64-obsd-tdep.c
gdb/sparc64-sol2-tdep.c
gdb/sparc64-tdep.c
gdb/sparc64-tdep.h
gdb/stack.c
gdb/stack.h
gdb/stap-probe.c
gdb/std-regs.c
gdb/symtab.h
gdb/tic6x-linux-tdep.c
gdb/tic6x-tdep.c
gdb/tic6x-tdep.h
gdb/tilegx-linux-tdep.c
gdb/tilegx-tdep.c
gdb/tracepoint.c
gdb/trad-frame.c
gdb/trad-frame.h
gdb/tramp-frame.c
gdb/tramp-frame.h
gdb/tui/tui-disasm.c
gdb/tui/tui-disasm.h
gdb/tui/tui-hooks.c
gdb/tui/tui-regs.c
gdb/tui/tui-regs.h
gdb/tui/tui-source.c
gdb/tui/tui-source.h
gdb/tui/tui-status.c
gdb/tui/tui-status.h
gdb/tui/tui-winsource.h
gdb/unittests/frame_info_ptr-selftests.c
gdb/user-regs.c
gdb/user-regs.h
gdb/v850-tdep.c
gdb/valops.c
gdb/value.c
gdb/value.h
gdb/vax-tdep.c
gdb/xstormy16-tdep.c
gdb/xtensa-tdep.c
gdb/z80-tdep.c