From: Bruno Larsen <blarsen@redhat.com>
To: Bruno Larsen <blarsen@redhat.com>, gdb-patches@sourceware.org
Subject: [Ping][PATCH v4 0/5] Smart pointer wrapper for frame_info
Date: Tue, 13 Sep 2022 10:06:31 +0200 [thread overview]
Message-ID: <e6d98c53-b83c-ecd6-065a-2ca0502a5da1@redhat.com> (raw)
In-Reply-To: <20220830100837.926692-1-blarsen@redhat.com>
ping
Cheers,
Bruno
On 30/08/2022 12:08, Bruno Larsen wrote:
> GDB occasionally gets bugs where a frame_info is kept alive across a
> call to reinit_frame_cache. This causes a use-after-free and, if
> you're lucky, a crash.
>
> This series aims to make this setup more "reliable", in the sense that
> you'll always get a crash if you break the rules. This is done by
> wrapping frame_info in a smart pointer class, and having
> reinit_frame_cache invalidate all the pointers.
>
> Tromey's original plan was that these pointers could be automatically
> reinflated after being invalidated, but most uses of the class would not
> need to be reinflated, and setting everything up to be reinflatable
> would be quite expensive, as calculating a frame_id requires some
> unwinding.
>
> I added a prepare_reinflate method, which stashes the relevant frame_id
> and allows the pointer to be reinflated. However, reinflation is done
> manually for now because doing it when reinit_frame_cache was creating
> weird problems.
>
> Changelog:
> v3:
> Reverted instrusive list changes
> Guile doesn't get fancy pointers because of exceptions through longjumps.
>
> v2:
> Fix commit squashing and email threading
> Version 2 had some problematic squashing of commits, and I tried to add
> some unit tests, but those didn't work out, so I eventually dropped
> that.
>
> Bruno Larsen (2):
> Continue making GDB use frame_info_ptr
> gdb/frame: Add reinflation method for frame_info_ptr
>
> Tom Tromey (3):
> Remove frame_id_eq
> Introduce frame_info_ptr smart pointer class
> Change GDB to use frame_info_ptr
>
> gdb/aarch64-fbsd-tdep.c | 2 +-
> gdb/aarch64-linux-tdep.c | 2 +-
> gdb/aarch64-tdep.c | 34 +-
> gdb/ada-lang.c | 10 +-
> gdb/ada-lang.h | 4 +-
> gdb/alpha-linux-tdep.c | 2 +-
> gdb/alpha-mdebug-tdep.c | 16 +-
> gdb/alpha-netbsd-tdep.c | 2 +-
> gdb/alpha-obsd-tdep.c | 2 +-
> gdb/alpha-tdep.c | 22 +-
> gdb/alpha-tdep.h | 2 +-
> gdb/amd64-darwin-tdep.c | 2 +-
> gdb/amd64-fbsd-tdep.c | 2 +-
> gdb/amd64-linux-tdep.c | 6 +-
> gdb/amd64-netbsd-tdep.c | 4 +-
> gdb/amd64-obsd-tdep.c | 12 +-
> gdb/amd64-sol2-tdep.c | 2 +-
> gdb/amd64-tdep.c | 34 +-
> gdb/amd64-tdep.h | 2 +-
> gdb/amd64-windows-tdep.c | 12 +-
> gdb/arc-linux-tdep.c | 4 +-
> gdb/arc-tdep.c | 20 +-
> gdb/arc-tdep.h | 4 +-
> gdb/arch-utils.c | 6 +-
> gdb/arch-utils.h | 8 +-
> gdb/arm-fbsd-tdep.c | 2 +-
> gdb/arm-linux-tdep.c | 14 +-
> gdb/arm-obsd-tdep.c | 2 +-
> gdb/arm-tdep.c | 64 ++--
> gdb/arm-tdep.h | 4 +-
> gdb/arm-wince-tdep.c | 2 +-
> gdb/avr-tdep.c | 14 +-
> gdb/ax-gdb.c | 2 +-
> gdb/bfin-linux-tdep.c | 2 +-
> gdb/bfin-tdep.c | 12 +-
> gdb/blockframe.c | 8 +-
> gdb/bpf-tdep.c | 8 +-
> gdb/break-catch-throw.c | 2 +-
> gdb/breakpoint.c | 20 +-
> gdb/c-lang.c | 2 +-
> gdb/cli/cli-cmds.c | 2 +-
> gdb/compile/compile-c-symbols.c | 2 +-
> gdb/compile/compile-cplus-symbols.c | 2 +-
> gdb/compile/compile-loc2c.c | 2 +-
> gdb/cp-abi.c | 2 +-
> gdb/cp-abi.h | 6 +-
> gdb/cris-tdep.c | 36 +-
> gdb/csky-linux-tdep.c | 2 +-
> gdb/csky-tdep.c | 22 +-
> gdb/defs.h | 2 +-
> gdb/dtrace-probe.c | 4 +-
> gdb/dummy-frame.c | 12 +-
> gdb/dummy-frame.h | 2 +-
> gdb/dwarf2/expr.c | 20 +-
> gdb/dwarf2/expr.h | 6 +-
> gdb/dwarf2/frame-tailcall.c | 41 +--
> gdb/dwarf2/frame-tailcall.h | 6 +-
> gdb/dwarf2/frame.c | 39 +--
> gdb/dwarf2/frame.h | 12 +-
> gdb/dwarf2/loc.c | 38 +--
> gdb/dwarf2/loc.h | 8 +-
> gdb/elfread.c | 4 +-
> gdb/eval.c | 2 +-
> gdb/extension-priv.h | 2 +-
> gdb/extension.c | 2 +-
> gdb/extension.h | 4 +-
> gdb/f-valprint.c | 2 +-
> gdb/findvar.c | 26 +-
> gdb/frame-base.c | 8 +-
> gdb/frame-base.h | 12 +-
> gdb/frame-id.h | 135 ++++++++
> gdb/frame-info.h | 206 +++++++++++
> gdb/frame-unwind.c | 26 +-
> gdb/frame-unwind.h | 36 +-
> gdb/frame.c | 323 +++++++++---------
> gdb/frame.h | 278 +++++----------
> gdb/frv-linux-tdep.c | 10 +-
> gdb/frv-tdep.c | 10 +-
> gdb/ft32-tdep.c | 8 +-
> gdb/gcore.c | 2 +-
> gdb/gdbarch-components.py | 30 +-
> gdb/gdbarch-gen.h | 60 ++--
> gdb/gdbarch-selftests.c | 2 +-
> gdb/gdbarch.c | 30 +-
> gdb/gdbtypes.h | 5 +-
> gdb/gnu-v3-abi.c | 2 +-
> gdb/h8300-tdep.c | 12 +-
> gdb/hppa-bsd-tdep.c | 2 +-
> gdb/hppa-linux-tdep.c | 8 +-
> gdb/hppa-netbsd-tdep.c | 4 +-
> gdb/hppa-tdep.c | 32 +-
> gdb/hppa-tdep.h | 8 +-
> gdb/i386-bsd-tdep.c | 2 +-
> gdb/i386-darwin-tdep.c | 4 +-
> gdb/i386-darwin-tdep.h | 2 +-
> gdb/i386-fbsd-tdep.c | 2 +-
> gdb/i386-gnu-tdep.c | 6 +-
> gdb/i386-linux-tdep.c | 10 +-
> gdb/i386-netbsd-tdep.c | 4 +-
> gdb/i386-nto-tdep.c | 4 +-
> gdb/i386-obsd-tdep.c | 10 +-
> gdb/i386-sol2-tdep.c | 2 +-
> gdb/i386-tdep.c | 54 +--
> gdb/i386-tdep.h | 10 +-
> gdb/i386-windows-tdep.c | 2 +-
> gdb/i387-tdep.c | 6 +-
> gdb/i387-tdep.h | 8 +-
> gdb/ia64-libunwind-tdep.c | 12 +-
> gdb/ia64-libunwind-tdep.h | 12 +-
> gdb/ia64-tdep.c | 54 +--
> gdb/ia64-tdep.h | 4 +-
> gdb/infcall.c | 4 +-
> gdb/infcmd.c | 30 +-
> gdb/inferior.h | 6 +-
> gdb/infrun.c | 78 +++--
> gdb/infrun.h | 4 +-
> gdb/inline-frame.c | 14 +-
> gdb/inline-frame.h | 4 +-
> gdb/iq2000-tdep.c | 10 +-
> gdb/jit.c | 12 +-
> gdb/language.c | 6 +-
> gdb/language.h | 8 +-
> gdb/lm32-tdep.c | 8 +-
> gdb/loongarch-linux-tdep.c | 4 +-
> gdb/loongarch-tdep.c | 8 +-
> gdb/loongarch-tdep.h | 2 +-
> gdb/m32c-tdep.c | 10 +-
> gdb/m32r-linux-tdep.c | 14 +-
> gdb/m32r-tdep.c | 8 +-
> gdb/m68hc11-tdep.c | 16 +-
> gdb/m68k-linux-tdep.c | 12 +-
> gdb/m68k-tdep.c | 18 +-
> gdb/m68k-tdep.h | 2 +-
> gdb/macroscope.c | 2 +-
> gdb/mep-tdep.c | 8 +-
> gdb/mi/mi-cmd-stack.c | 29 +-
> gdb/mi/mi-main.c | 12 +-
> gdb/microblaze-linux-tdep.c | 4 +-
> gdb/microblaze-tdep.c | 10 +-
> gdb/minsyms.c | 2 +-
> gdb/mips-fbsd-tdep.c | 4 +-
> gdb/mips-linux-tdep.c | 22 +-
> gdb/mips-netbsd-tdep.c | 2 +-
> gdb/mips-sde-tdep.c | 12 +-
> gdb/mips-tdep.c | 96 +++---
> gdb/mips-tdep.h | 2 +-
> gdb/mips64-obsd-tdep.c | 2 +-
> gdb/mn10300-linux-tdep.c | 4 +-
> gdb/mn10300-tdep.c | 8 +-
> gdb/moxie-tdep.c | 8 +-
> gdb/msp430-tdep.c | 10 +-
> gdb/nds32-tdep.c | 20 +-
> gdb/nios2-linux-tdep.c | 4 +-
> gdb/nios2-tdep.c | 22 +-
> gdb/nios2-tdep.h | 2 +-
> gdb/objc-lang.c | 10 +-
> gdb/observable.h | 2 +-
> gdb/or1k-linux-tdep.c | 4 +-
> gdb/or1k-tdep.c | 12 +-
> gdb/ppc-fbsd-tdep.c | 8 +-
> gdb/ppc-linux-tdep.c | 12 +-
> gdb/ppc-netbsd-tdep.c | 2 +-
> gdb/ppc-obsd-tdep.c | 8 +-
> gdb/ppc-tdep.h | 4 +-
> gdb/ppc64-tdep.c | 20 +-
> gdb/ppc64-tdep.h | 4 +-
> gdb/printcmd.c | 4 +-
> gdb/probe.c | 4 +-
> gdb/probe.h | 4 +-
> gdb/python/py-event.h | 2 +-
> gdb/python/py-finishbreakpoint.c | 6 +-
> gdb/python/py-frame.c | 44 +--
> gdb/python/py-framefilter.c | 22 +-
> gdb/python/py-inferior.c | 2 +-
> gdb/python/py-infevents.c | 4 +-
> gdb/python/py-symbol.c | 6 +-
> gdb/python/py-unwind.c | 12 +-
> gdb/python/python-internal.h | 6 +-
> gdb/record-btrace.c | 32 +-
> gdb/riscv-fbsd-tdep.c | 2 +-
> gdb/riscv-linux-tdep.c | 6 +-
> gdb/riscv-tdep.c | 12 +-
> gdb/riscv-tdep.h | 2 +-
> gdb/rl78-tdep.c | 12 +-
> gdb/rs6000-aix-tdep.c | 10 +-
> gdb/rs6000-tdep.c | 34 +-
> gdb/rx-tdep.c | 16 +-
> gdb/s12z-tdep.c | 10 +-
> gdb/s390-linux-tdep.c | 8 +-
> gdb/s390-tdep.c | 38 +--
> gdb/s390-tdep.h | 2 +-
> gdb/sentinel-frame.c | 6 +-
> gdb/sh-linux-tdep.c | 6 +-
> gdb/sh-tdep.c | 16 +-
> gdb/skip.c | 2 +-
> gdb/sol2-tdep.c | 2 +-
> gdb/sol2-tdep.h | 2 +-
> gdb/solib-svr4.c | 4 +-
> gdb/sparc-linux-tdep.c | 6 +-
> gdb/sparc-netbsd-tdep.c | 12 +-
> gdb/sparc-obsd-tdep.c | 8 +-
> gdb/sparc-sol2-tdep.c | 8 +-
> gdb/sparc-tdep.c | 20 +-
> gdb/sparc-tdep.h | 12 +-
> gdb/sparc64-fbsd-tdep.c | 8 +-
> gdb/sparc64-linux-tdep.c | 8 +-
> gdb/sparc64-netbsd-tdep.c | 10 +-
> gdb/sparc64-obsd-tdep.c | 16 +-
> gdb/sparc64-sol2-tdep.c | 8 +-
> gdb/sparc64-tdep.c | 10 +-
> gdb/sparc64-tdep.h | 4 +-
> gdb/stack.c | 119 ++++---
> gdb/stack.h | 4 +-
> gdb/stap-probe.c | 4 +-
> gdb/std-regs.c | 8 +-
> gdb/symfile.h | 2 +-
> gdb/symtab.h | 10 +-
> .../gdb.python/pretty-print-call-by-hand.c | 53 +++
> .../gdb.python/pretty-print-call-by-hand.exp | 136 ++++++++
> .../gdb.python/pretty-print-call-by-hand.py | 41 +++
> gdb/tic6x-linux-tdep.c | 4 +-
> gdb/tic6x-tdep.c | 22 +-
> gdb/tic6x-tdep.h | 2 +-
> gdb/tilegx-linux-tdep.c | 2 +-
> gdb/tilegx-tdep.c | 12 +-
> gdb/top.c | 2 +-
> gdb/tracepoint.c | 5 +-
> gdb/trad-frame.c | 10 +-
> gdb/trad-frame.h | 10 +-
> gdb/tramp-frame.c | 10 +-
> gdb/tramp-frame.h | 6 +-
> gdb/tui/tui-disasm.c | 2 +-
> gdb/tui/tui-disasm.h | 2 +-
> gdb/tui/tui-hooks.c | 6 +-
> gdb/tui/tui-regs.c | 8 +-
> gdb/tui/tui-regs.h | 4 +-
> gdb/tui/tui-source.c | 4 +-
> gdb/tui/tui-source.h | 2 +-
> gdb/tui/tui-stack.c | 4 +-
> gdb/tui/tui-stack.h | 4 +-
> gdb/tui/tui-winsource.c | 4 +-
> gdb/tui/tui-winsource.h | 2 +-
> gdb/user-regs.c | 4 +-
> gdb/user-regs.h | 6 +-
> gdb/v850-tdep.c | 10 +-
> gdb/valops.c | 10 +-
> gdb/value.c | 6 +-
> gdb/value.h | 16 +-
> gdb/varobj.c | 8 +-
> gdb/vax-tdep.c | 14 +-
> gdb/xstormy16-tdep.c | 12 +-
> gdb/xtensa-tdep.c | 22 +-
> gdb/z80-tdep.c | 6 +-
> 253 files changed, 2172 insertions(+), 1702 deletions(-)
> create mode 100644 gdb/frame-id.h
> create mode 100644 gdb/frame-info.h
> create mode 100644 gdb/testsuite/gdb.python/pretty-print-call-by-hand.c
> create mode 100644 gdb/testsuite/gdb.python/pretty-print-call-by-hand.exp
> create mode 100644 gdb/testsuite/gdb.python/pretty-print-call-by-hand.py
>
next prev parent reply other threads:[~2022-09-13 8:06 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-30 10:08 [PATCH " Bruno Larsen
2022-08-30 10:08 ` [PATCH v4 1/5] Remove frame_id_eq Bruno Larsen
2022-08-30 10:08 ` [PATCH v4 2/5] Introduce frame_info_ptr smart pointer class Bruno Larsen
2022-08-30 10:08 ` [PATCH v4 3/5] Change GDB to use frame_info_ptr Bruno Larsen
2022-08-30 10:08 ` [PATCH v4 4/5] Continue making GDB " Bruno Larsen
2022-08-30 10:08 ` [PATCH v4 5/5] gdb/frame: Add reinflation method for frame_info_ptr Bruno Larsen
2022-10-07 19:34 ` Tom Tromey
2022-10-10 7:54 ` Bruno Larsen
2022-10-11 7:58 ` Tom de Vries
2022-10-11 9:42 ` Bruno Larsen
2022-09-13 8:06 ` Bruno Larsen [this message]
2022-09-21 15:39 ` [PINGv2][PATCH v4 0/5] Smart pointer wrapper for frame_info Bruno Larsen
2022-09-29 7:01 ` [PINGv3][PATCH " Bruno Larsen
2022-10-05 9:58 ` [PINGv4][PATCH " Bruno Larsen
2022-10-07 19:35 ` Tom Tromey
2022-10-10 7:55 ` Bruno Larsen
2022-10-10 10:46 ` Tom de Vries
2022-10-10 12:04 ` Bruno Larsen
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=e6d98c53-b83c-ecd6-065a-2ca0502a5da1@redhat.com \
--to=blarsen@redhat.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).