Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH v8 0/5] Modernize frame unwinders and add disable feature
@ 2024-12-10 19:51 Guinevere Larsen
  2024-12-10 19:51 ` [PATCH v8 1/5] gdb: make gdbarch store a vector of frame unwinders Guinevere Larsen
                   ` (6 more replies)
  0 siblings, 7 replies; 24+ messages in thread
From: Guinevere Larsen @ 2024-12-10 19:51 UTC (permalink / raw)
  To: gdb-patches; +Cc: Guinevere Larsen

This patch series started with me trying to make it easier to test GDB's
ability to unwind using CFI data, to improve a previous patch I sent to
the list.

The first patch is just a minor change, storing frame unwinders in a
vector instead of through an unwinder table accessible, still accessed
throught the registry subsystem. This isn't required (like I originally
thought it was), but it does make the whole system more readable in my
opinion.

Patch 2 adds a new field for frame unwinders, their "class", which
roughly correlates to which area of GDB adds that unwinder.  They were
chosen rather arbitrarily based on my understanding, where the unwinder
is added and its name. This class will be used to simplify bulk
disabling of unwinders introduced by patch 4.

Patch 3 has the real meat of the modernization, making GDB use
polymorphism to handle frame unwinders. This is slightly slower than
using function pointers, but much more readable in my opinion. Also, as
noted by Thiago Bauermann, no frame unwinders that use the legacy class
ever pass a frame_data pointer, so that field was removed from those
unwinders.

Patch 4 adds the possibility to disable unwinders based on their name or
class, and disable all unwinders at once if desired. It also reverts
commit 3c3bb0580be0 since that patch pointed out that if a more generic
system was implemented it could be reverted.

Patch 5 adds the test I was trying to upstream all along.

All the documentation has been approved by Eli already. Patches 2 and 3
were already approved by Simon.

Changes for v8:
* Simplified the loop printing the table for "maint info
  frame-unwinders".
* Used gdb::option to parse the options for "maint frame-unwinder
  disable" 
* Changed error message when no unwinder is found but some unwinders
  were disabled
* Cosmetic fixes.

Changes for v7:
* Moved the std::vector back to being accessed through the registry system
    Removed the approvals from patch 1 because I think this change is
    reasonably big, and needs another review.
* Several cosmetic changes to the code, following feedback from Simon
  and Thiago.
* Fixed the test from patch 4, following Thiago's suggestion
* Users can no longer specify the unwinder class with the
  FRAME_UNWINDER_ prefix

Changes for v6:
* Patches 1 and 2 were approved by Simon
* Several cosmetic changes to patch 3 and 4
* New dealloc_cache default implementation (noop), and frame_unwind_legacy
  defaults to it if no function pointer is given.
* New prev_arch default implementation (getting the current arch), and
  frame_unwind_legacy defaults to it if no pointer is given
* Renamed "sniffer" to "sniff", to make it more clear what the method
  does
* Fixed some problems with the testcase.

Changes for v5:
* Reverted commit 3c3bb0580be0, with patch 4 following the advice on
  that commit
* on patch 3, some of the original functions were converted into the
  classes' methods instead of just passing the call along.
* some methods of frame_unwind_legacy were switched to be purely
  virtual

Changes for v4:
* Rebase on current master (No changes needed)
* improved documentation of unwinder classes follow Eli feedback
* added KFAIL to new test on patch 5 if running on 32 bit arm

Changes for v3:
* Fixed Linaro CI issue in 32 bit arm
* Fixed the few comments from Eli.
* Documented addition of unwinder class in the patch that adds it.

Changes for v2:
* Added back the test that checks if GDB can handle a mix of CUs with
  and without debuginfo in a single backtrace.
* Fixed all the nitpicks for style.
* Removed FRAME_UNWIND_ prefix when talking about classes
* Thoroughly changed the documentation, to be more readable

Guinevere Larsen (5):
  gdb: make gdbarch store a vector of frame unwinders
  gdb: add "unwinder class" to frame unwinders
  gdb: Migrate frame unwinders to use C++ classes
  gdb: introduce ability to disable frame unwinders
  gdb/testsuite: Test for a backtrace through object without debuginfo

 gdb/NEWS                                      |  21 +
 gdb/aarch64-tdep.c                            |  12 +-
 gdb/alpha-mdebug-tdep.c                       |   6 +-
 gdb/alpha-tdep.c                              |  12 +-
 gdb/amd64-obsd-tdep.c                         |   6 +-
 gdb/amd64-tdep.c                              |  24 +-
 gdb/amd64-windows-tdep.c                      |   6 +-
 gdb/amdgpu-tdep.c                             |   7 +-
 gdb/arc-tdep.c                                |  10 +-
 gdb/arm-tdep.c                                |  29 +-
 gdb/avr-tdep.c                                |   5 +-
 gdb/bfin-tdep.c                               |   6 +-
 gdb/bpf-tdep.c                                |   6 +-
 gdb/cris-tdep.c                               |  12 +-
 gdb/csky-tdep.c                               |  10 +-
 gdb/doc/gdb.texinfo                           |  64 +--
 gdb/dummy-frame.c                             |   8 +-
 gdb/dummy-frame.h                             |   2 +-
 gdb/dwarf2/frame-tailcall.c                   |   9 +-
 gdb/dwarf2/frame-tailcall.h                   |   2 +-
 gdb/dwarf2/frame.c                            |  46 +-
 gdb/dwarf2/frame.h                            |   6 -
 gdb/frame-unwind.c                            | 420 ++++++++++++++----
 gdb/frame-unwind.h                            | 173 +++++++-
 gdb/frame.c                                   |  21 +-
 gdb/frv-linux-tdep.c                          |   6 +-
 gdb/frv-tdep.c                                |   5 +-
 gdb/ft32-tdep.c                               |   6 +-
 gdb/h8300-tdep.c                              |   5 +-
 gdb/hppa-linux-tdep.c                         |   5 +-
 gdb/hppa-tdep.c                               |  17 +-
 gdb/i386-obsd-tdep.c                          |   5 +-
 gdb/i386-tdep.c                               |  30 +-
 gdb/ia64-tdep.c                               |  24 +-
 gdb/inline-frame.c                            |   5 +-
 gdb/inline-frame.h                            |   2 +-
 gdb/iq2000-tdep.c                             |   5 +-
 gdb/jit.c                                     |   6 +-
 gdb/lm32-tdep.c                               |   5 +-
 gdb/loongarch-tdep.c                          |   7 +-
 gdb/m32c-tdep.c                               |   5 +-
 gdb/m32r-linux-tdep.c                         |   5 +-
 gdb/m32r-tdep.c                               |   5 +-
 gdb/m68hc11-tdep.c                            |   5 +-
 gdb/m68k-linux-tdep.c                         |   6 +-
 gdb/m68k-tdep.c                               |   6 +-
 gdb/mep-tdep.c                                |   5 +-
 gdb/microblaze-tdep.c                         |   6 +-
 gdb/mips-sde-tdep.c                           |   6 +-
 gdb/mips-tdep.c                               |  24 +-
 gdb/mn10300-tdep.c                            |   5 +-
 gdb/moxie-tdep.c                              |   5 +-
 gdb/msp430-tdep.c                             |   5 +-
 gdb/nds32-tdep.c                              |  14 +-
 gdb/or1k-tdep.c                               |   7 +-
 gdb/ppc-fbsd-tdep.c                           |   5 +-
 gdb/ppc-obsd-tdep.c                           |   5 +-
 gdb/python/py-unwind.c                        |  61 ++-
 gdb/record-btrace.c                           |  12 +-
 gdb/record.h                                  |   4 +-
 gdb/riscv-tdep.c                              |   8 +-
 gdb/rl78-tdep.c                               |   6 +-
 gdb/rs6000-aix-tdep.c                         |   5 +-
 gdb/rs6000-tdep.c                             |  12 +-
 gdb/rx-tdep.c                                 |  10 +-
 gdb/s12z-tdep.c                               |   7 +-
 gdb/s390-linux-tdep.c                         |   5 +-
 gdb/s390-tdep.c                               |  10 +-
 gdb/sentinel-frame.c                          |   8 +-
 gdb/sentinel-frame.h                          |   2 +-
 gdb/sh-tdep.c                                 |  11 +-
 gdb/sparc-netbsd-tdep.c                       |   6 +-
 gdb/sparc-obsd-tdep.c                         |   6 +-
 gdb/sparc-sol2-tdep.c                         |   6 +-
 gdb/sparc-tdep.c                              |   6 +-
 gdb/sparc64-fbsd-tdep.c                       |   6 +-
 gdb/sparc64-netbsd-tdep.c                     |   6 +-
 gdb/sparc64-obsd-tdep.c                       |  12 +-
 gdb/sparc64-sol2-tdep.c                       |   6 +-
 gdb/sparc64-tdep.c                            |   6 +-
 .../backtrace-through-cu-nodebug-caller.c     |  28 ++
 .../backtrace-through-cu-nodebug-main.c       |  32 ++
 .../gdb.base/backtrace-through-cu-nodebug.exp |  95 ++++
 .../gdb.base/frame-info-consistent.exp        |   8 +-
 gdb/testsuite/gdb.base/frame-unwind-disable.c |  22 +
 .../gdb.base/frame-unwind-disable.exp         | 137 ++++++
 gdb/testsuite/gdb.base/maint.exp              |   4 -
 gdb/tic6x-tdep.c                              |  12 +-
 gdb/tilegx-tdep.c                             |   5 +-
 gdb/tramp-frame.c                             |  70 ++-
 gdb/v850-tdep.c                               |   5 +-
 gdb/vax-tdep.c                                |   6 +-
 gdb/windows-tdep.c                            |  35 +-
 gdb/windows-tdep.h                            |  16 +-
 gdb/xstormy16-tdep.c                          |   5 +-
 gdb/xtensa-tdep.c                             |   7 +-
 gdb/z80-tdep.c                                |   7 +-
 97 files changed, 1339 insertions(+), 551 deletions(-)
 create mode 100644 gdb/testsuite/gdb.base/backtrace-through-cu-nodebug-caller.c
 create mode 100644 gdb/testsuite/gdb.base/backtrace-through-cu-nodebug-main.c
 create mode 100644 gdb/testsuite/gdb.base/backtrace-through-cu-nodebug.exp
 create mode 100644 gdb/testsuite/gdb.base/frame-unwind-disable.c
 create mode 100644 gdb/testsuite/gdb.base/frame-unwind-disable.exp

-- 
2.47.0


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

end of thread, other threads:[~2025-01-20 12:49 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-12-10 19:51 [PATCH v8 0/5] Modernize frame unwinders and add disable feature Guinevere Larsen
2024-12-10 19:51 ` [PATCH v8 1/5] gdb: make gdbarch store a vector of frame unwinders Guinevere Larsen
2025-01-14 14:28   ` Andrew Burgess
2025-01-14 20:34     ` Guinevere Larsen
2024-12-10 19:51 ` [PATCH v8 2/5] gdb: add "unwinder class" to " Guinevere Larsen
2025-01-14 15:28   ` Andrew Burgess
2024-12-10 19:51 ` [PATCH v8 3/5] gdb: Migrate frame unwinders to use C++ classes Guinevere Larsen
2025-01-14 17:13   ` Andrew Burgess
2024-12-10 19:51 ` [PATCH v8 4/5] gdb: introduce ability to disable frame unwinders Guinevere Larsen
2025-01-16 12:06   ` Andrew Burgess
2025-01-17 12:40     ` Guinevere Larsen
2025-01-17 13:55       ` Andrew Burgess
2025-01-17 14:47         ` Guinevere Larsen
2025-01-16 16:22   ` Andrew Burgess
2024-12-10 19:51 ` [PATCH v8 5/5] gdb/testsuite: Test for a backtrace through object without debuginfo Guinevere Larsen
2025-01-16 14:37   ` Andrew Burgess
2025-01-16 18:42     ` Guinevere Larsen
2025-01-17 13:58       ` Andrew Burgess
2025-01-18  8:07     ` Tom de Vries
2025-01-20 12:26       ` [PATCH] gdb/testsuite: Fix file location for gdb.base/backtrace-through-cu-nodebug Guinevere Larsen
2025-01-20 12:46         ` Tom de Vries
2025-01-20 12:48           ` Guinevere Larsen
2025-01-07 12:11 ` [PING][PATCH v8 0/5] Modernize frame unwinders and add disable feature Guinevere Larsen
2025-01-17 14:49 ` [PATCH " Guinevere Larsen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox