Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: Guinevere Larsen <guinevere@redhat.com>, gdb-patches@sourceware.org
Cc: Guinevere Larsen <guinevere@redhat.com>,
	Eli Zaretskii <eliz@gnu.org>,
	Thiago Jung Bauermann <thiago.bauermann@linaro.org>,
	Simon Marchi <simon.marchi@efficios.com>
Subject: Re: [PATCH v8 2/5] gdb: add "unwinder class" to frame unwinders
Date: Tue, 14 Jan 2025 15:28:56 +0000	[thread overview]
Message-ID: <878qrdqurr.fsf@redhat.com> (raw)
In-Reply-To: <20241210195115.3046370-3-guinevere@redhat.com>

Guinevere Larsen <guinevere@redhat.com> writes:

> A future patch will add a way to disable certain unwinders based on
> different characteristics. This patch aims to make it more convenient
> to disable related unwinders in bulk, such as architecture specific
> ones, by identifying all unwinders by which part of the code adds it.
> The classes, and explanations, are as follows:
>
> * GDB: An internal unwinder, added by GDB core, such as the unwinder
>   for dummy frames;
> * EXTENSION: Unwinders added by extension languages;
> * DEBUGINFO: Unwinders installed by the debug info reader;
> * ARCH: Unwinders installed by the architecture specific code.
>
> Reviewed-By: Eli Zaretskii <eliz@gnu.org>
> Reviewed-by: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
> Approved-By: Simon Marchi <simon.marchi@efficios.com>

Approved-By: Andrew Burgess <aburgess@redhat.com>

Thanks,
Andrew


> ---
>  gdb/NEWS                    |  4 ++++
>  gdb/aarch64-tdep.c          |  2 ++
>  gdb/alpha-mdebug-tdep.c     |  1 +
>  gdb/alpha-tdep.c            |  2 ++
>  gdb/amd64-obsd-tdep.c       |  1 +
>  gdb/amd64-tdep.c            |  4 ++++
>  gdb/amd64-windows-tdep.c    |  1 +
>  gdb/amdgpu-tdep.c           |  1 +
>  gdb/arc-tdep.c              |  2 ++
>  gdb/arm-tdep.c              |  5 +++++
>  gdb/avr-tdep.c              |  1 +
>  gdb/bfin-tdep.c             |  1 +
>  gdb/bpf-tdep.c              |  1 +
>  gdb/cris-tdep.c             |  2 ++
>  gdb/csky-tdep.c             |  2 ++
>  gdb/doc/gdb.texinfo         | 15 ++++++++++++++-
>  gdb/dummy-frame.c           |  1 +
>  gdb/dwarf2/frame-tailcall.c |  1 +
>  gdb/dwarf2/frame.c          |  2 ++
>  gdb/frame-unwind.c          | 22 +++++++++++++++++++++-
>  gdb/frame-unwind.h          | 19 +++++++++++++++++++
>  gdb/frv-linux-tdep.c        |  1 +
>  gdb/frv-tdep.c              |  1 +
>  gdb/ft32-tdep.c             |  1 +
>  gdb/h8300-tdep.c            |  1 +
>  gdb/hppa-linux-tdep.c       |  1 +
>  gdb/hppa-tdep.c             |  3 +++
>  gdb/i386-obsd-tdep.c        |  1 +
>  gdb/i386-tdep.c             |  5 +++++
>  gdb/ia64-tdep.c             |  4 ++++
>  gdb/inline-frame.c          |  1 +
>  gdb/iq2000-tdep.c           |  1 +
>  gdb/jit.c                   |  1 +
>  gdb/lm32-tdep.c             |  1 +
>  gdb/loongarch-tdep.c        |  1 +
>  gdb/m32c-tdep.c             |  1 +
>  gdb/m32r-linux-tdep.c       |  1 +
>  gdb/m32r-tdep.c             |  1 +
>  gdb/m68hc11-tdep.c          |  1 +
>  gdb/m68k-linux-tdep.c       |  1 +
>  gdb/m68k-tdep.c             |  1 +
>  gdb/mep-tdep.c              |  1 +
>  gdb/microblaze-tdep.c       |  1 +
>  gdb/mips-sde-tdep.c         |  1 +
>  gdb/mips-tdep.c             |  4 ++++
>  gdb/mn10300-tdep.c          |  1 +
>  gdb/moxie-tdep.c            |  1 +
>  gdb/msp430-tdep.c           |  1 +
>  gdb/nds32-tdep.c            |  2 ++
>  gdb/or1k-tdep.c             |  1 +
>  gdb/ppc-fbsd-tdep.c         |  1 +
>  gdb/ppc-obsd-tdep.c         |  1 +
>  gdb/python/py-unwind.c      |  1 +
>  gdb/record-btrace.c         |  2 ++
>  gdb/riscv-tdep.c            |  1 +
>  gdb/rl78-tdep.c             |  1 +
>  gdb/rs6000-aix-tdep.c       |  1 +
>  gdb/rs6000-tdep.c           |  2 ++
>  gdb/rx-tdep.c               |  2 ++
>  gdb/s12z-tdep.c             |  1 +
>  gdb/s390-linux-tdep.c       |  1 +
>  gdb/s390-tdep.c             |  2 ++
>  gdb/sentinel-frame.c        |  1 +
>  gdb/sh-tdep.c               |  2 ++
>  gdb/sparc-netbsd-tdep.c     |  1 +
>  gdb/sparc-obsd-tdep.c       |  1 +
>  gdb/sparc-sol2-tdep.c       |  1 +
>  gdb/sparc-tdep.c            |  1 +
>  gdb/sparc64-fbsd-tdep.c     |  1 +
>  gdb/sparc64-netbsd-tdep.c   |  1 +
>  gdb/sparc64-obsd-tdep.c     |  2 ++
>  gdb/sparc64-sol2-tdep.c     |  1 +
>  gdb/sparc64-tdep.c          |  1 +
>  gdb/tic6x-tdep.c            |  2 ++
>  gdb/tilegx-tdep.c           |  1 +
>  gdb/tramp-frame.c           |  1 +
>  gdb/v850-tdep.c             |  1 +
>  gdb/vax-tdep.c              |  1 +
>  gdb/xstormy16-tdep.c        |  1 +
>  gdb/xtensa-tdep.c           |  1 +
>  gdb/z80-tdep.c              |  1 +
>  81 files changed, 168 insertions(+), 2 deletions(-)
>
> diff --git a/gdb/NEWS b/gdb/NEWS
> index 361d7726ba0..245b355669a 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -164,6 +164,10 @@ maintenance print remote-registers
>    which registers were included in the last stop reply packet received by
>    GDB.
>  
> +mainenance info frame-unwinders
> +  Add a CLASS column to the output.  This class is a somewhat arbitrary
> +  grouping of unwinders, based on which area of GDB adds the unwinder.
> +
>  show configuration
>    Now includes the version of GNU Readline library that GDB is using.
>  
> diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
> index bc8746e27f0..e5498089ca9 100644
> --- a/gdb/aarch64-tdep.c
> +++ b/gdb/aarch64-tdep.c
> @@ -1209,6 +1209,7 @@ static frame_unwind aarch64_prologue_unwind =
>  {
>    "aarch64 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    aarch64_prologue_frame_unwind_stop_reason,
>    aarch64_prologue_this_id,
>    aarch64_prologue_prev_register,
> @@ -1304,6 +1305,7 @@ static frame_unwind aarch64_stub_unwind =
>  {
>    "aarch64 stub",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    aarch64_stub_frame_unwind_stop_reason,
>    aarch64_stub_this_id,
>    aarch64_prologue_prev_register,
> diff --git a/gdb/alpha-mdebug-tdep.c b/gdb/alpha-mdebug-tdep.c
> index abded2ac192..b087afabae7 100644
> --- a/gdb/alpha-mdebug-tdep.c
> +++ b/gdb/alpha-mdebug-tdep.c
> @@ -334,6 +334,7 @@ static const struct frame_unwind alpha_mdebug_frame_unwind =
>  {
>    "alpha mdebug",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    alpha_mdebug_frame_this_id,
>    alpha_mdebug_frame_prev_register,
> diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
> index 301ab5cd01d..4ce45d29ade 100644
> --- a/gdb/alpha-tdep.c
> +++ b/gdb/alpha-tdep.c
> @@ -1011,6 +1011,7 @@ static const struct frame_unwind alpha_sigtramp_frame_unwind =
>  {
>    "alpha sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    alpha_sigtramp_frame_this_id,
>    alpha_sigtramp_frame_prev_register,
> @@ -1430,6 +1431,7 @@ static const struct frame_unwind alpha_heuristic_frame_unwind =
>  {
>    "alpha prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    alpha_heuristic_frame_this_id,
>    alpha_heuristic_frame_prev_register,
> diff --git a/gdb/amd64-obsd-tdep.c b/gdb/amd64-obsd-tdep.c
> index 5b1e77b3e86..5359959e3bb 100644
> --- a/gdb/amd64-obsd-tdep.c
> +++ b/gdb/amd64-obsd-tdep.c
> @@ -409,6 +409,7 @@ static const struct frame_unwind amd64obsd_trapframe_unwind =
>       which really is not what we want here.  */
>    "amd64 openbsd trap",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    amd64obsd_trapframe_this_id,
>    amd64obsd_trapframe_prev_register,
> diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
> index e03180b08af..f1cd1fdef09 100644
> --- a/gdb/amd64-tdep.c
> +++ b/gdb/amd64-tdep.c
> @@ -2670,6 +2670,7 @@ static const struct frame_unwind amd64_frame_unwind =
>  {
>    "amd64 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    amd64_frame_unwind_stop_reason,
>    amd64_frame_this_id,
>    amd64_frame_prev_register,
> @@ -2816,6 +2817,7 @@ static const struct frame_unwind amd64_sigtramp_frame_unwind =
>  {
>    "amd64 sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    amd64_sigtramp_frame_unwind_stop_reason,
>    amd64_sigtramp_frame_this_id,
>    amd64_sigtramp_frame_prev_register,
> @@ -3008,6 +3010,7 @@ static const struct frame_unwind amd64_epilogue_override_frame_unwind =
>  {
>    "amd64 epilogue override",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    amd64_epilogue_frame_unwind_stop_reason,
>    amd64_epilogue_frame_this_id,
>    amd64_frame_prev_register,
> @@ -3019,6 +3022,7 @@ static const struct frame_unwind amd64_epilogue_frame_unwind =
>  {
>    "amd64 epilogue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    amd64_epilogue_frame_unwind_stop_reason,
>    amd64_epilogue_frame_this_id,
>    amd64_frame_prev_register,
> diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
> index e3e815e1123..ec32a57d7ea 100644
> --- a/gdb/amd64-windows-tdep.c
> +++ b/gdb/amd64-windows-tdep.c
> @@ -1188,6 +1188,7 @@ static const struct frame_unwind amd64_windows_frame_unwind =
>  {
>    "amd64 windows",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    &amd64_windows_frame_this_id,
>    &amd64_windows_frame_prev_register,
> diff --git a/gdb/amdgpu-tdep.c b/gdb/amdgpu-tdep.c
> index 6fe79732158..b8a5fd80fa0 100644
> --- a/gdb/amdgpu-tdep.c
> +++ b/gdb/amdgpu-tdep.c
> @@ -892,6 +892,7 @@ amdgpu_frame_prev_register (const frame_info_ptr &this_frame, void **this_cache,
>  static const frame_unwind amdgpu_frame_unwind = {
>    "amdgpu",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    amdgpu_frame_this_id,
>    amdgpu_frame_prev_register,
> diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c
> index 9adf2959cf3..a4ab78d8ade 100644
> --- a/gdb/arc-tdep.c
> +++ b/gdb/arc-tdep.c
> @@ -1913,6 +1913,7 @@ arc_sigtramp_frame_sniffer (const struct frame_unwind *self,
>  static const struct frame_unwind arc_frame_unwind = {
>    "arc prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    arc_frame_this_id,
>    arc_frame_prev_register,
> @@ -1929,6 +1930,7 @@ static const struct frame_unwind arc_frame_unwind = {
>  static const struct frame_unwind arc_sigtramp_frame_unwind = {
>    "arc sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    arc_sigtramp_frame_this_id,
>    arc_sigtramp_frame_prev_register,
> diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
> index c27b2a2e1af..657ecd57098 100644
> --- a/gdb/arm-tdep.c
> +++ b/gdb/arm-tdep.c
> @@ -2469,6 +2469,7 @@ arm_prologue_prev_register (const frame_info_ptr &this_frame,
>  static frame_unwind arm_prologue_unwind = {
>    "arm prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    arm_prologue_unwind_stop_reason,
>    arm_prologue_this_id,
>    arm_prologue_prev_register,
> @@ -3188,6 +3189,7 @@ arm_exidx_unwind_sniffer (const struct frame_unwind *self,
>  struct frame_unwind arm_exidx_unwind = {
>    "arm exidx",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    arm_prologue_this_id,
>    arm_prologue_prev_register,
> @@ -3298,6 +3300,7 @@ static const struct frame_unwind arm_epilogue_frame_unwind =
>  {
>    "arm epilogue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    arm_epilogue_frame_this_id,
>    arm_epilogue_frame_prev_register,
> @@ -3427,6 +3430,7 @@ arm_stub_unwind_sniffer (const struct frame_unwind *self,
>  struct frame_unwind arm_stub_unwind = {
>    "arm stub",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    arm_stub_this_id,
>    arm_prologue_prev_register,
> @@ -3953,6 +3957,7 @@ struct frame_unwind arm_m_exception_unwind =
>  {
>    "arm m exception lockup sec_fnc",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    arm_m_exception_frame_unwind_stop_reason,
>    arm_m_exception_this_id,
>    arm_m_exception_prev_register,
> diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
> index 9c97d3cf1c7..08b3cb146f4 100644
> --- a/gdb/avr-tdep.c
> +++ b/gdb/avr-tdep.c
> @@ -1158,6 +1158,7 @@ avr_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind avr_frame_unwind = {
>    "avr prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    avr_frame_this_id,
>    avr_frame_prev_register,
> diff --git a/gdb/bfin-tdep.c b/gdb/bfin-tdep.c
> index 1fa7a66d043..60838f0548e 100644
> --- a/gdb/bfin-tdep.c
> +++ b/gdb/bfin-tdep.c
> @@ -376,6 +376,7 @@ static const struct frame_unwind bfin_frame_unwind =
>  {
>    "bfin prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    bfin_frame_this_id,
>    bfin_frame_prev_register,
> diff --git a/gdb/bpf-tdep.c b/gdb/bpf-tdep.c
> index 79a442068b5..1f53d63c982 100644
> --- a/gdb/bpf-tdep.c
> +++ b/gdb/bpf-tdep.c
> @@ -185,6 +185,7 @@ static const struct frame_unwind bpf_frame_unwind =
>  {
>    "bpf prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    bpf_frame_unwind_stop_reason,
>    bpf_frame_this_id,
>    bpf_frame_prev_register,
> diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
> index 8562def71a6..4db2a234819 100644
> --- a/gdb/cris-tdep.c
> +++ b/gdb/cris-tdep.c
> @@ -439,6 +439,7 @@ static const struct frame_unwind cris_sigtramp_frame_unwind =
>  {
>    "cris sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    cris_sigtramp_frame_this_id,
>    cris_sigtramp_frame_prev_register,
> @@ -904,6 +905,7 @@ static const struct frame_unwind cris_frame_unwind =
>  {
>    "cris prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    cris_frame_this_id,
>    cris_frame_prev_register,
> diff --git a/gdb/csky-tdep.c b/gdb/csky-tdep.c
> index d69b8e5a2ca..6e8426fe2d8 100644
> --- a/gdb/csky-tdep.c
> +++ b/gdb/csky-tdep.c
> @@ -2162,6 +2162,7 @@ csky_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind csky_unwind_cache = {
>    "cski prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    csky_frame_this_id,
>    csky_frame_prev_register,
> @@ -2296,6 +2297,7 @@ csky_stub_prev_register (const frame_info_ptr &this_frame,
>  static frame_unwind csky_stub_unwind = {
>    "csky stub",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    csky_stub_this_id,
>    csky_stub_prev_register,
> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index 85ac3d9aab6..115c1f46b7f 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -42237,7 +42237,20 @@ architecture, then enabling this flag does not cause them to be used.
>  
>  @kindex maint info frame-unwinders
>  @item maint info frame-unwinders
> -List the frame unwinders currently in effect, starting with the highest priority.
> +List the frame unwinders currently in effect, starting with the highest
> +priority.  This also lists the unwinder class, which is mostly defined by
> +which area of @value{GDBN} uses it.  The currently available classes are:
> +
> +@table @samp
> +@item GDB
> +Internal unwinders, added by @value{GDBN} core.
> +@item EXTENSION
> +Unwinders added by extension languages.
> +@item DEBUGINFO
> +Unwinders installed by debug information readers.
> +@item ARCH
> +Unwinders installed by the architecture specific code.
> +@end table
>  
>  @kindex maint set worker-threads
>  @kindex maint show worker-threads
> diff --git a/gdb/dummy-frame.c b/gdb/dummy-frame.c
> index 9f540d02f1a..e7de15b5c4d 100644
> --- a/gdb/dummy-frame.c
> +++ b/gdb/dummy-frame.c
> @@ -379,6 +379,7 @@ const struct frame_unwind dummy_frame_unwind =
>  {
>    "dummy",
>    DUMMY_FRAME,
> +  FRAME_UNWIND_GDB,
>    default_frame_unwind_stop_reason,
>    dummy_frame_this_id,
>    dummy_frame_prev_register,
> diff --git a/gdb/dwarf2/frame-tailcall.c b/gdb/dwarf2/frame-tailcall.c
> index 6ecf8a0b15d..50efd4eb5ff 100644
> --- a/gdb/dwarf2/frame-tailcall.c
> +++ b/gdb/dwarf2/frame-tailcall.c
> @@ -472,6 +472,7 @@ const struct frame_unwind dwarf2_tailcall_frame_unwind =
>  {
>    "dwarf2 tailcall",
>    TAILCALL_FRAME,
> +  FRAME_UNWIND_DEBUGINFO,
>    default_frame_unwind_stop_reason,
>    tailcall_frame_this_id,
>    tailcall_frame_prev_register,
> diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c
> index 6d8a4fb5a9e..492b6928c62 100644
> --- a/gdb/dwarf2/frame.c
> +++ b/gdb/dwarf2/frame.c
> @@ -1341,6 +1341,7 @@ static const struct frame_unwind dwarf2_frame_unwind =
>  {
>    "dwarf2",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_DEBUGINFO,
>    dwarf2_frame_unwind_stop_reason,
>    dwarf2_frame_this_id,
>    dwarf2_frame_prev_register,
> @@ -1353,6 +1354,7 @@ static const struct frame_unwind dwarf2_signal_frame_unwind =
>  {
>    "dwarf2 signal",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_DEBUGINFO,
>    dwarf2_frame_unwind_stop_reason,
>    dwarf2_frame_this_id,
>    dwarf2_frame_prev_register,
> diff --git a/gdb/frame-unwind.c b/gdb/frame-unwind.c
> index e61f6244913..d61f06d3305 100644
> --- a/gdb/frame-unwind.c
> +++ b/gdb/frame-unwind.c
> @@ -31,6 +31,16 @@
>  #include "cli/cli-cmds.h"
>  #include "inferior.h"
>  
> +/* Conversion list between the enum for frame_unwind_class and
> +   string.  */
> +static const char * unwind_class_conversion[] =
> +{
> +  "GDB",
> +  "EXTENSION",
> +  "DEBUGINFO",
> +  "ARCH",
> +};
> +
>  /* Default sniffers, that must always be the first in the unwinder list,
>     no matter the architecture.  */
>  static constexpr auto standard_unwinders =
> @@ -72,6 +82,13 @@ get_frame_unwind_table (struct gdbarch *gdbarch)
>    return table;
>  }
>  
> +static const char *
> +frame_unwinder_class_str (frame_unwind_class uclass)
> +{
> +  gdb_assert (uclass < UNWIND_CLASS_NUMBER);
> +  return unwind_class_conversion[uclass];
> +}
> +
>  void
>  frame_unwind_prepend_unwinder (struct gdbarch *gdbarch,
>  				const struct frame_unwind *unwinder)
> @@ -319,9 +336,10 @@ maintenance_info_frame_unwinders (const char *args, int from_tty)
>    std::vector<const frame_unwind *> *table = get_frame_unwind_table (gdbarch);
>  
>    ui_out *uiout = current_uiout;
> -  ui_out_emit_table table_emitter (uiout, 2, -1, "FrameUnwinders");
> +  ui_out_emit_table table_emitter (uiout, 3, -1, "FrameUnwinders");
>    uiout->table_header (27, ui_left, "name", "Name");
>    uiout->table_header (25, ui_left, "type", "Type");
> +  uiout->table_header (9, ui_left, "class", "Class");
>    uiout->table_body ();
>  
>    for (auto unwinder : *table)
> @@ -329,6 +347,8 @@ maintenance_info_frame_unwinders (const char *args, int from_tty)
>        ui_out_emit_list tuple_emitter (uiout, nullptr);
>        uiout->field_string ("name", unwinder->name);
>        uiout->field_string ("type", frame_type_str (unwinder->type));
> +      uiout->field_string ("class", frame_unwinder_class_str (
> +					unwinder->unwinder_class));
>        uiout->text ("\n");
>      }
>  }
> diff --git a/gdb/frame-unwind.h b/gdb/frame-unwind.h
> index 53fcd6869e9..ef8bbe091b5 100644
> --- a/gdb/frame-unwind.h
> +++ b/gdb/frame-unwind.h
> @@ -156,12 +156,31 @@ typedef void (frame_dealloc_cache_ftype) (frame_info *self,
>  typedef gdbarch *(frame_prev_arch_ftype) (const frame_info_ptr &this_frame,
>  					  void **this_prologue_cache);
>  
> +/* Unwinders are classified by what part of GDB code created it.  */
> +enum frame_unwind_class
> +{
> +  /* This is mostly handled by core GDB code.  */
> +  FRAME_UNWIND_GDB,
> +  /* This unwinder was added by one of GDB's extension languages.  */
> +  FRAME_UNWIND_EXTENSION,
> +  /* The unwinder was created and mostly handles debug information.  */
> +  FRAME_UNWIND_DEBUGINFO,
> +  /* The unwinder was created and handles target dependent things.  */
> +  FRAME_UNWIND_ARCH,
> +  /* Meta enum value, to ensure we're always sent a valid unwinder class.  */
> +  UNWIND_CLASS_NUMBER,
> +};
> +
>  struct frame_unwind
>  {
>    const char *name;
>    /* The frame's type.  Should this instead be a collection of
>       predicates that test the frame for various attributes?  */
>    enum frame_type type;
> +  /* What kind of unwinder is this.  It generally follows from where
> +     the unwinder was added or where it looks for information to do the
> +     unwinding.  */
> +  enum frame_unwind_class unwinder_class;
>    /* Should an attribute indicating the frame's address-in-block go
>       here?  */
>    frame_unwind_stop_reason_ftype *stop_reason;
> diff --git a/gdb/frv-linux-tdep.c b/gdb/frv-linux-tdep.c
> index 46424453ef0..7a7c4904475 100644
> --- a/gdb/frv-linux-tdep.c
> +++ b/gdb/frv-linux-tdep.c
> @@ -336,6 +336,7 @@ static const struct frame_unwind frv_linux_sigtramp_frame_unwind =
>  {
>    "frv linux sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    frv_linux_sigtramp_frame_this_id,
>    frv_linux_sigtramp_frame_prev_register,
> diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c
> index 6ae3f0d0f55..a1845a25750 100644
> --- a/gdb/frv-tdep.c
> +++ b/gdb/frv-tdep.c
> @@ -1407,6 +1407,7 @@ frv_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind frv_frame_unwind = {
>    "frv prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    frv_frame_this_id,
>    frv_frame_prev_register,
> diff --git a/gdb/ft32-tdep.c b/gdb/ft32-tdep.c
> index 15a585a356e..e3827ad96e7 100644
> --- a/gdb/ft32-tdep.c
> +++ b/gdb/ft32-tdep.c
> @@ -529,6 +529,7 @@ static const struct frame_unwind ft32_frame_unwind =
>  {
>    "ft32 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    ft32_frame_this_id,
>    ft32_frame_prev_register,
> diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c
> index e91d664ffa3..5b4466ed316 100644
> --- a/gdb/h8300-tdep.c
> +++ b/gdb/h8300-tdep.c
> @@ -503,6 +503,7 @@ h8300_frame_prev_register (const frame_info_ptr &this_frame, void **this_cache,
>  static const struct frame_unwind h8300_frame_unwind = {
>    "h8300 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    h8300_frame_this_id,
>    h8300_frame_prev_register,
> diff --git a/gdb/hppa-linux-tdep.c b/gdb/hppa-linux-tdep.c
> index 8f73f8d2374..2619b60655a 100644
> --- a/gdb/hppa-linux-tdep.c
> +++ b/gdb/hppa-linux-tdep.c
> @@ -311,6 +311,7 @@ hppa_linux_sigtramp_frame_sniffer (const struct frame_unwind *self,
>  static const struct frame_unwind hppa_linux_sigtramp_frame_unwind = {
>    "hppa linux sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    hppa_linux_sigtramp_frame_this_id,
>    hppa_linux_sigtramp_frame_prev_register,
> diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
> index ad93c2b2048..2447b87ebae 100644
> --- a/gdb/hppa-tdep.c
> +++ b/gdb/hppa-tdep.c
> @@ -2286,6 +2286,7 @@ static const struct frame_unwind hppa_frame_unwind =
>  {
>    "hppa unwind table",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    hppa_frame_this_id,
>    hppa_frame_prev_register,
> @@ -2399,6 +2400,7 @@ static const struct frame_unwind hppa_fallback_frame_unwind =
>  {
>    "hppa prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    hppa_fallback_frame_this_id,
>    hppa_fallback_frame_prev_register,
> @@ -2480,6 +2482,7 @@ hppa_stub_unwind_sniffer (const struct frame_unwind *self,
>  static const struct frame_unwind hppa_stub_frame_unwind = {
>    "hppa stub",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    hppa_stub_frame_this_id,
>    hppa_stub_frame_prev_register,
> diff --git a/gdb/i386-obsd-tdep.c b/gdb/i386-obsd-tdep.c
> index 3539c6599a0..1d2b1a09d16 100644
> --- a/gdb/i386-obsd-tdep.c
> +++ b/gdb/i386-obsd-tdep.c
> @@ -396,6 +396,7 @@ static const struct frame_unwind i386obsd_trapframe_unwind = {
>       frame, but SIGTRAMP_FRAME would print <signal handler called>,
>       which really is not what we want here.  */
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    i386obsd_trapframe_this_id,
>    i386obsd_trapframe_prev_register,
> diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
> index a552a2bee8f..6defd225bdb 100644
> --- a/gdb/i386-tdep.c
> +++ b/gdb/i386-tdep.c
> @@ -2143,6 +2143,7 @@ static const struct frame_unwind i386_frame_unwind =
>  {
>    "i386 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    i386_frame_unwind_stop_reason,
>    i386_frame_this_id,
>    i386_frame_prev_register,
> @@ -2298,6 +2299,7 @@ static const struct frame_unwind i386_epilogue_override_frame_unwind =
>  {
>    "i386 epilogue override",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    i386_epilogue_frame_unwind_stop_reason,
>    i386_epilogue_frame_this_id,
>    i386_epilogue_frame_prev_register,
> @@ -2309,6 +2311,7 @@ static const struct frame_unwind i386_epilogue_frame_unwind =
>  {
>    "i386 epilogue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    i386_epilogue_frame_unwind_stop_reason,
>    i386_epilogue_frame_this_id,
>    i386_epilogue_frame_prev_register,
> @@ -2391,6 +2394,7 @@ static const struct frame_unwind i386_stack_tramp_frame_unwind =
>  {
>    "i386 stack tramp",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    i386_epilogue_frame_unwind_stop_reason,
>    i386_epilogue_frame_this_id,
>    i386_epilogue_frame_prev_register,
> @@ -2540,6 +2544,7 @@ static const struct frame_unwind i386_sigtramp_frame_unwind =
>  {
>    "i386 sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    i386_sigtramp_frame_unwind_stop_reason,
>    i386_sigtramp_frame_this_id,
>    i386_sigtramp_frame_prev_register,
> diff --git a/gdb/ia64-tdep.c b/gdb/ia64-tdep.c
> index b0c1ad3d0ab..b10cc251bf1 100644
> --- a/gdb/ia64-tdep.c
> +++ b/gdb/ia64-tdep.c
> @@ -2166,6 +2166,7 @@ static const struct frame_unwind ia64_frame_unwind =
>  {
>    "ia64 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    &ia64_frame_this_id,
>    &ia64_frame_prev_register,
> @@ -2355,6 +2356,7 @@ static const struct frame_unwind ia64_sigtramp_frame_unwind =
>  {
>    "ia64 sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    ia64_sigtramp_frame_this_id,
>    ia64_sigtramp_frame_prev_register,
> @@ -3015,6 +3017,7 @@ static const struct frame_unwind ia64_libunwind_frame_unwind =
>  {
>    "ia64 libunwind",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    ia64_libunwind_frame_this_id,
>    ia64_libunwind_frame_prev_register,
> @@ -3104,6 +3107,7 @@ static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind =
>  {
>    "ia64 libunwind sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    ia64_libunwind_sigtramp_frame_this_id,
>    ia64_libunwind_sigtramp_frame_prev_register,
> diff --git a/gdb/inline-frame.c b/gdb/inline-frame.c
> index 759c526a7c2..8b3057159dc 100644
> --- a/gdb/inline-frame.c
> +++ b/gdb/inline-frame.c
> @@ -272,6 +272,7 @@ inline_frame_sniffer (const struct frame_unwind *self,
>  const struct frame_unwind inline_frame_unwind = {
>    "inline",
>    INLINE_FRAME,
> +  FRAME_UNWIND_GDB,
>    default_frame_unwind_stop_reason,
>    inline_frame_this_id,
>    inline_frame_prev_register,
> diff --git a/gdb/iq2000-tdep.c b/gdb/iq2000-tdep.c
> index 5776c66f78a..e0db1b0de4e 100644
> --- a/gdb/iq2000-tdep.c
> +++ b/gdb/iq2000-tdep.c
> @@ -427,6 +427,7 @@ iq2000_frame_this_id (const frame_info_ptr &this_frame, void **this_cache,
>  static const struct frame_unwind iq2000_frame_unwind = {
>    "iq2000 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    iq2000_frame_this_id,
>    iq2000_frame_prev_register,
> diff --git a/gdb/jit.c b/gdb/jit.c
> index 77d41bf86ba..33a19d2ba4d 100644
> --- a/gdb/jit.c
> +++ b/gdb/jit.c
> @@ -1112,6 +1112,7 @@ static const struct frame_unwind jit_frame_unwind =
>  {
>    "jit",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_EXTENSION,
>    default_frame_unwind_stop_reason,
>    jit_frame_this_id,
>    jit_frame_prev_register,
> diff --git a/gdb/lm32-tdep.c b/gdb/lm32-tdep.c
> index 98a07281051..4eb5f2ad426 100644
> --- a/gdb/lm32-tdep.c
> +++ b/gdb/lm32-tdep.c
> @@ -450,6 +450,7 @@ lm32_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind lm32_frame_unwind = {
>    "lm32 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    lm32_frame_this_id,
>    lm32_frame_prev_register,
> diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c
> index e91a69b73b9..4f00deb677e 100644
> --- a/gdb/loongarch-tdep.c
> +++ b/gdb/loongarch-tdep.c
> @@ -457,6 +457,7 @@ loongarch_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind loongarch_frame_unwind = {
>    "loongarch prologue",
>    /*.type	   =*/NORMAL_FRAME,
> +  /*.unwinder_class=*/FRAME_UNWIND_ARCH,
>    /*.stop_reason   =*/default_frame_unwind_stop_reason,
>    /*.this_id	   =*/loongarch_frame_this_id,
>    /*.prev_register =*/loongarch_frame_prev_register,
> diff --git a/gdb/m32c-tdep.c b/gdb/m32c-tdep.c
> index 28dfb2fb7c6..bce12c5fae7 100644
> --- a/gdb/m32c-tdep.c
> +++ b/gdb/m32c-tdep.c
> @@ -1958,6 +1958,7 @@ m32c_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind m32c_unwind = {
>    "m32c prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    m32c_this_id,
>    m32c_prev_register,
> diff --git a/gdb/m32r-linux-tdep.c b/gdb/m32r-linux-tdep.c
> index 8eea6620df9..11a150a92b8 100644
> --- a/gdb/m32r-linux-tdep.c
> +++ b/gdb/m32r-linux-tdep.c
> @@ -304,6 +304,7 @@ m32r_linux_sigtramp_frame_sniffer (const struct frame_unwind *self,
>  static const struct frame_unwind m32r_linux_sigtramp_frame_unwind = {
>    "m32r linux sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    m32r_linux_sigtramp_frame_this_id,
>    m32r_linux_sigtramp_frame_prev_register,
> diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c
> index c6428f6db6f..aadb8c00d86 100644
> --- a/gdb/m32r-tdep.c
> +++ b/gdb/m32r-tdep.c
> @@ -834,6 +834,7 @@ m32r_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind m32r_frame_unwind = {
>    "m32r prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    m32r_frame_this_id,
>    m32r_frame_prev_register,
> diff --git a/gdb/m68hc11-tdep.c b/gdb/m68hc11-tdep.c
> index 12cd0efbbe7..e14ac622fda 100644
> --- a/gdb/m68hc11-tdep.c
> +++ b/gdb/m68hc11-tdep.c
> @@ -936,6 +936,7 @@ m68hc11_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind m68hc11_frame_unwind = {
>    "m68hc11 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    m68hc11_frame_this_id,
>    m68hc11_frame_prev_register,
> diff --git a/gdb/m68k-linux-tdep.c b/gdb/m68k-linux-tdep.c
> index 7250ce09826..7cca4f86394 100644
> --- a/gdb/m68k-linux-tdep.c
> +++ b/gdb/m68k-linux-tdep.c
> @@ -318,6 +318,7 @@ static const struct frame_unwind m68k_linux_sigtramp_frame_unwind =
>  {
>    "m68k linux sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    m68k_linux_sigtramp_frame_this_id,
>    m68k_linux_sigtramp_frame_prev_register,
> diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c
> index 375d5e6e54c..2ff507e7816 100644
> --- a/gdb/m68k-tdep.c
> +++ b/gdb/m68k-tdep.c
> @@ -1011,6 +1011,7 @@ static const struct frame_unwind m68k_frame_unwind =
>  {
>    "m68k prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    m68k_frame_this_id,
>    m68k_frame_prev_register,
> diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c
> index a4ef343f9dc..7dd6371f995 100644
> --- a/gdb/mep-tdep.c
> +++ b/gdb/mep-tdep.c
> @@ -2064,6 +2064,7 @@ mep_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind mep_frame_unwind = {
>    "mep prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    mep_frame_this_id,
>    mep_frame_prev_register,
> diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
> index 609c665f2af..7a56471a4dd 100644
> --- a/gdb/microblaze-tdep.c
> +++ b/gdb/microblaze-tdep.c
> @@ -482,6 +482,7 @@ static const struct frame_unwind microblaze_frame_unwind =
>  {
>    "microblaze prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    microblaze_frame_this_id,
>    microblaze_frame_prev_register,
> diff --git a/gdb/mips-sde-tdep.c b/gdb/mips-sde-tdep.c
> index 90988cdfdac..18cb9485639 100644
> --- a/gdb/mips-sde-tdep.c
> +++ b/gdb/mips-sde-tdep.c
> @@ -164,6 +164,7 @@ static const struct frame_unwind mips_sde_frame_unwind =
>  {
>    "mips sde sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    mips_sde_frame_this_id,
>    mips_sde_frame_prev_register,
> diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
> index c00efbd02ad..f5eb2093c8b 100644
> --- a/gdb/mips-tdep.c
> +++ b/gdb/mips-tdep.c
> @@ -2929,6 +2929,7 @@ static const struct frame_unwind mips_insn16_frame_unwind =
>  {
>    "mips insn16 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    mips_insn16_frame_this_id,
>    mips_insn16_frame_prev_register,
> @@ -3365,6 +3366,7 @@ static const struct frame_unwind mips_micro_frame_unwind =
>  {
>    "mips micro prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    mips_micro_frame_this_id,
>    mips_micro_frame_prev_register,
> @@ -3744,6 +3746,7 @@ static const struct frame_unwind mips_insn32_frame_unwind =
>  {
>    "mips insn32 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    mips_insn32_frame_this_id,
>    mips_insn32_frame_prev_register,
> @@ -3860,6 +3863,7 @@ static const struct frame_unwind mips_stub_frame_unwind =
>  {
>    "mips stub",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    mips_stub_frame_this_id,
>    mips_stub_frame_prev_register,
> diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c
> index d44eebfcb17..565300afd3c 100644
> --- a/gdb/mn10300-tdep.c
> +++ b/gdb/mn10300-tdep.c
> @@ -1130,6 +1130,7 @@ mn10300_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind mn10300_frame_unwind = {
>    "mn10300 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    mn10300_frame_this_id, 
>    mn10300_frame_prev_register,
> diff --git a/gdb/moxie-tdep.c b/gdb/moxie-tdep.c
> index 29ad1f2bb2e..82d3478ed68 100644
> --- a/gdb/moxie-tdep.c
> +++ b/gdb/moxie-tdep.c
> @@ -588,6 +588,7 @@ moxie_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind moxie_frame_unwind = {
>    "moxie prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    moxie_frame_this_id,
>    moxie_frame_prev_register,
> diff --git a/gdb/msp430-tdep.c b/gdb/msp430-tdep.c
> index 41a8f990a16..6d7fee230c1 100644
> --- a/gdb/msp430-tdep.c
> +++ b/gdb/msp430-tdep.c
> @@ -545,6 +545,7 @@ msp430_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind msp430_unwind = {
>    "msp430 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    msp430_this_id,
>    msp430_prev_register,
> diff --git a/gdb/nds32-tdep.c b/gdb/nds32-tdep.c
> index 8ad51d0798b..910a6f7a1d0 100644
> --- a/gdb/nds32-tdep.c
> +++ b/gdb/nds32-tdep.c
> @@ -992,6 +992,7 @@ static const struct frame_unwind nds32_frame_unwind =
>  {
>    "nds32 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    nds32_frame_this_id,
>    nds32_frame_prev_register,
> @@ -1376,6 +1377,7 @@ static const struct frame_unwind nds32_epilogue_frame_unwind =
>  {
>    "nds32 epilogue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    nds32_epilogue_frame_this_id,
>    nds32_epilogue_frame_prev_register,
> diff --git a/gdb/or1k-tdep.c b/gdb/or1k-tdep.c
> index 290f748cc56..6e0466c3408 100644
> --- a/gdb/or1k-tdep.c
> +++ b/gdb/or1k-tdep.c
> @@ -1128,6 +1128,7 @@ or1k_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind or1k_frame_unwind = {
>    "or1k prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    or1k_frame_this_id,
>    or1k_frame_prev_register,
> diff --git a/gdb/ppc-fbsd-tdep.c b/gdb/ppc-fbsd-tdep.c
> index 3f0f93f1ac0..12eb396a0e3 100644
> --- a/gdb/ppc-fbsd-tdep.c
> +++ b/gdb/ppc-fbsd-tdep.c
> @@ -265,6 +265,7 @@ ppcfbsd_sigtramp_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind ppcfbsd_sigtramp_frame_unwind = {
>    "ppc freebsd sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    ppcfbsd_sigtramp_frame_this_id,
>    ppcfbsd_sigtramp_frame_prev_register,
> diff --git a/gdb/ppc-obsd-tdep.c b/gdb/ppc-obsd-tdep.c
> index 1bd79b3b3e1..ceb8b5d85db 100644
> --- a/gdb/ppc-obsd-tdep.c
> +++ b/gdb/ppc-obsd-tdep.c
> @@ -234,6 +234,7 @@ ppcobsd_sigtramp_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind ppcobsd_sigtramp_frame_unwind = {
>    "ppc openbsd sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    ppcobsd_sigtramp_frame_this_id,
>    ppcobsd_sigtramp_frame_prev_register,
> diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c
> index 68deaf98d81..ab32f5057f9 100644
> --- a/gdb/python/py-unwind.c
> +++ b/gdb/python/py-unwind.c
> @@ -984,6 +984,7 @@ pyuw_on_new_gdbarch (gdbarch *newarch)
>  
>        unwinder->name = "python";
>        unwinder->type = NORMAL_FRAME;
> +      unwinder->unwinder_class = FRAME_UNWIND_EXTENSION;
>        unwinder->stop_reason = default_frame_unwind_stop_reason;
>        unwinder->this_id = pyuw_this_id;
>        unwinder->prev_register = pyuw_prev_register;
> diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
> index bf4a368f4fe..47f2a7f6510 100644
> --- a/gdb/record-btrace.c
> +++ b/gdb/record-btrace.c
> @@ -1944,6 +1944,7 @@ const struct frame_unwind record_btrace_frame_unwind =
>  {
>    "record-btrace",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_GDB,
>    record_btrace_frame_unwind_stop_reason,
>    record_btrace_frame_this_id,
>    record_btrace_frame_prev_register,
> @@ -1956,6 +1957,7 @@ const struct frame_unwind record_btrace_tailcall_frame_unwind =
>  {
>    "record-btrace tailcall",
>    TAILCALL_FRAME,
> +  FRAME_UNWIND_GDB,
>    record_btrace_frame_unwind_stop_reason,
>    record_btrace_frame_this_id,
>    record_btrace_frame_prev_register,
> diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
> index 932708ca4e9..2a292cc4ff8 100644
> --- a/gdb/riscv-tdep.c
> +++ b/gdb/riscv-tdep.c
> @@ -3904,6 +3904,7 @@ static const struct frame_unwind riscv_frame_unwind =
>  {
>    /*.name          =*/ "riscv prologue",
>    /*.type          =*/ NORMAL_FRAME,
> +  /*.unwinder_class=*/FRAME_UNWIND_ARCH,
>    /*.stop_reason   =*/ default_frame_unwind_stop_reason,
>    /*.this_id       =*/ riscv_frame_this_id,
>    /*.prev_register =*/ riscv_frame_prev_register,
> diff --git a/gdb/rl78-tdep.c b/gdb/rl78-tdep.c
> index 46a7ee9c3d4..0fcd5f9f1f3 100644
> --- a/gdb/rl78-tdep.c
> +++ b/gdb/rl78-tdep.c
> @@ -1187,6 +1187,7 @@ static const struct frame_unwind rl78_unwind =
>  {
>    "rl78 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    rl78_this_id,
>    rl78_prev_register,
> diff --git a/gdb/rs6000-aix-tdep.c b/gdb/rs6000-aix-tdep.c
> index 3cc0232a691..f1c31ae27ea 100644
> --- a/gdb/rs6000-aix-tdep.c
> +++ b/gdb/rs6000-aix-tdep.c
> @@ -331,6 +331,7 @@ aix_sighandle_frame_sniffer (const struct frame_unwind *self,
>  static const struct frame_unwind aix_sighandle_frame_unwind = {
>    "rs6000 aix sighandle",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    aix_sighandle_frame_this_id,
>    aix_sighandle_frame_prev_register,
> diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
> index a36c337c625..e3bffa8f33d 100644
> --- a/gdb/rs6000-tdep.c
> +++ b/gdb/rs6000-tdep.c
> @@ -3841,6 +3841,7 @@ static const struct frame_unwind rs6000_frame_unwind =
>  {
>    "rs6000 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    rs6000_frame_this_id,
>    rs6000_frame_prev_register,
> @@ -3982,6 +3983,7 @@ static const struct frame_unwind rs6000_epilogue_frame_unwind =
>  {
>    "rs6000 epilogue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    rs6000_epilogue_frame_this_id, rs6000_epilogue_frame_prev_register,
>    NULL,
> diff --git a/gdb/rx-tdep.c b/gdb/rx-tdep.c
> index 6b12fe0a314..6cb74c23a3c 100644
> --- a/gdb/rx-tdep.c
> +++ b/gdb/rx-tdep.c
> @@ -634,6 +634,7 @@ rx_exception_sniffer (const struct frame_unwind *self,
>  static const struct frame_unwind rx_frame_unwind = {
>    "rx prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    rx_frame_this_id,
>    rx_frame_prev_register,
> @@ -648,6 +649,7 @@ static const struct frame_unwind rx_exception_unwind = {
>    "rx exception",
>    /* SIGTRAMP_FRAME could be used here, but backtraces are less informative.  */
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    rx_frame_this_id,
>    rx_frame_prev_register,
> diff --git a/gdb/s12z-tdep.c b/gdb/s12z-tdep.c
> index c24c75665ed..7fa73cf6b8c 100644
> --- a/gdb/s12z-tdep.c
> +++ b/gdb/s12z-tdep.c
> @@ -444,6 +444,7 @@ s12z_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind s12z_frame_unwind = {
>    "s12z prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    s12z_frame_this_id,
>    s12z_frame_prev_register,
> diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c
> index bc1db550d2e..556fad64926 100644
> --- a/gdb/s390-linux-tdep.c
> +++ b/gdb/s390-linux-tdep.c
> @@ -544,6 +544,7 @@ s390_sigtramp_frame_sniffer (const struct frame_unwind *self,
>  static const struct frame_unwind s390_sigtramp_frame_unwind = {
>    "s390 linux sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    s390_sigtramp_frame_this_id,
>    s390_sigtramp_frame_prev_register,
> diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
> index be176f07c6f..f0af9a8796d 100644
> --- a/gdb/s390-tdep.c
> +++ b/gdb/s390-tdep.c
> @@ -2649,6 +2649,7 @@ s390_frame_prev_register (const frame_info_ptr &this_frame,
>  static const struct frame_unwind s390_frame_unwind = {
>    "s390 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    s390_frame_this_id,
>    s390_frame_prev_register,
> @@ -2743,6 +2744,7 @@ s390_stub_frame_sniffer (const struct frame_unwind *self,
>  static const struct frame_unwind s390_stub_frame_unwind = {
>    "s390 stub",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    s390_stub_frame_this_id,
>    s390_stub_frame_prev_register,
> diff --git a/gdb/sentinel-frame.c b/gdb/sentinel-frame.c
> index 4eaeae0d254..9fe4036dbbe 100644
> --- a/gdb/sentinel-frame.c
> +++ b/gdb/sentinel-frame.c
> @@ -82,6 +82,7 @@ const struct frame_unwind sentinel_frame_unwind =
>  {
>    "sentinel",
>    SENTINEL_FRAME,
> +  FRAME_UNWIND_GDB,
>    default_frame_unwind_stop_reason,
>    sentinel_frame_this_id,
>    sentinel_frame_prev_register,
> diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
> index d211265c15f..c8809e3018e 100644
> --- a/gdb/sh-tdep.c
> +++ b/gdb/sh-tdep.c
> @@ -1953,6 +1953,7 @@ sh_frame_this_id (const frame_info_ptr &this_frame, void **this_cache,
>  static const struct frame_unwind sh_frame_unwind = {
>    "sh prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sh_frame_this_id,
>    sh_frame_prev_register,
> @@ -2020,6 +2021,7 @@ static const struct frame_unwind sh_stub_unwind =
>  {
>    "sh stub",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sh_stub_this_id,
>    sh_frame_prev_register,
> diff --git a/gdb/sparc-netbsd-tdep.c b/gdb/sparc-netbsd-tdep.c
> index fc22e66826f..5b3dd067375 100644
> --- a/gdb/sparc-netbsd-tdep.c
> +++ b/gdb/sparc-netbsd-tdep.c
> @@ -252,6 +252,7 @@ static const struct frame_unwind sparc32nbsd_sigcontext_frame_unwind =
>  {
>    "sparc32 netbsd sigcontext",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc32nbsd_sigcontext_frame_this_id,
>    sparc32nbsd_sigcontext_frame_prev_register,
> diff --git a/gdb/sparc-obsd-tdep.c b/gdb/sparc-obsd-tdep.c
> index 3182a7778d3..049c315fa14 100644
> --- a/gdb/sparc-obsd-tdep.c
> +++ b/gdb/sparc-obsd-tdep.c
> @@ -138,6 +138,7 @@ static const struct frame_unwind sparc32obsd_sigtramp_frame_unwind =
>  {
>    "sparc32 openbsd sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc32obsd_sigtramp_frame_this_id,
>    sparc32obsd_sigtramp_frame_prev_register,
> diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c
> index aea3766d9b5..bb9c8a549b1 100644
> --- a/gdb/sparc-sol2-tdep.c
> +++ b/gdb/sparc-sol2-tdep.c
> @@ -183,6 +183,7 @@ static const struct frame_unwind sparc32_sol2_sigtramp_frame_unwind =
>  {
>    "sparc32 solaris sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc32_sol2_sigtramp_frame_this_id,
>    sparc32_sol2_sigtramp_frame_prev_register,
> diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
> index b48b130c0c5..d69ab87be09 100644
> --- a/gdb/sparc-tdep.c
> +++ b/gdb/sparc-tdep.c
> @@ -1350,6 +1350,7 @@ static const struct frame_unwind sparc32_frame_unwind =
>  {
>    "sparc32 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc32_frame_this_id,
>    sparc32_frame_prev_register,
> diff --git a/gdb/sparc64-fbsd-tdep.c b/gdb/sparc64-fbsd-tdep.c
> index a30c7c448e5..1d4c075a961 100644
> --- a/gdb/sparc64-fbsd-tdep.c
> +++ b/gdb/sparc64-fbsd-tdep.c
> @@ -200,6 +200,7 @@ static const struct frame_unwind sparc64fbsd_sigtramp_frame_unwind =
>  {
>    "sparc64 freebsd sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc64fbsd_sigtramp_frame_this_id,
>    sparc64fbsd_sigtramp_frame_prev_register,
> diff --git a/gdb/sparc64-netbsd-tdep.c b/gdb/sparc64-netbsd-tdep.c
> index b101f4970d9..82eb99f57c1 100644
> --- a/gdb/sparc64-netbsd-tdep.c
> +++ b/gdb/sparc64-netbsd-tdep.c
> @@ -226,6 +226,7 @@ static const struct frame_unwind sparc64nbsd_sigcontext_frame_unwind =
>  {
>    "sparc64 netbsd sigcontext",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc64nbsd_sigcontext_frame_this_id,
>    sparc64nbsd_sigcontext_frame_prev_register,
> diff --git a/gdb/sparc64-obsd-tdep.c b/gdb/sparc64-obsd-tdep.c
> index cef6efd3379..e81afa604e7 100644
> --- a/gdb/sparc64-obsd-tdep.c
> +++ b/gdb/sparc64-obsd-tdep.c
> @@ -224,6 +224,7 @@ static const struct frame_unwind sparc64obsd_frame_unwind =
>  {
>    "sparc64 openbsd sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc64obsd_frame_this_id,
>    sparc64obsd_frame_prev_register,
> @@ -308,6 +309,7 @@ static const struct frame_unwind sparc64obsd_trapframe_unwind =
>  {
>    "sparc64 openbsd trap",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc64obsd_trapframe_this_id,
>    sparc64obsd_trapframe_prev_register,
> diff --git a/gdb/sparc64-sol2-tdep.c b/gdb/sparc64-sol2-tdep.c
> index b7ca4ca1f5b..e8d09e2516e 100644
> --- a/gdb/sparc64-sol2-tdep.c
> +++ b/gdb/sparc64-sol2-tdep.c
> @@ -186,6 +186,7 @@ static const struct frame_unwind sparc64_sol2_sigtramp_frame_unwind =
>  {
>    "sparc64 solaris sigtramp",
>    SIGTRAMP_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc64_sol2_sigtramp_frame_this_id,
>    sparc64_sol2_sigtramp_frame_prev_register,
> diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
> index dc8032f2969..90b04fc0ff1 100644
> --- a/gdb/sparc64-tdep.c
> +++ b/gdb/sparc64-tdep.c
> @@ -1139,6 +1139,7 @@ static const struct frame_unwind sparc64_frame_unwind =
>  {
>    "sparc64 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    sparc64_frame_this_id,
>    sparc64_frame_prev_register,
> diff --git a/gdb/tic6x-tdep.c b/gdb/tic6x-tdep.c
> index 6732478eb09..bac8ba84ed0 100644
> --- a/gdb/tic6x-tdep.c
> +++ b/gdb/tic6x-tdep.c
> @@ -456,6 +456,7 @@ static const struct frame_unwind tic6x_frame_unwind =
>  {
>    "tic6x prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    tic6x_frame_this_id,
>    tic6x_frame_prev_register,
> @@ -519,6 +520,7 @@ static const struct frame_unwind tic6x_stub_unwind =
>  {
>    "tic6x stub",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    tic6x_stub_this_id,
>    tic6x_frame_prev_register,
> diff --git a/gdb/tilegx-tdep.c b/gdb/tilegx-tdep.c
> index 92f2be0b208..16cd25f4635 100644
> --- a/gdb/tilegx-tdep.c
> +++ b/gdb/tilegx-tdep.c
> @@ -903,6 +903,7 @@ tilegx_frame_base_address (const frame_info_ptr &this_frame, void **this_cache)
>  static const struct frame_unwind tilegx_frame_unwind = {
>    "tilegx prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    tilegx_frame_this_id,
>    tilegx_frame_prev_register,
> diff --git a/gdb/tramp-frame.c b/gdb/tramp-frame.c
> index 4f7c62d11fa..6368f67a2e7 100644
> --- a/gdb/tramp-frame.c
> +++ b/gdb/tramp-frame.c
> @@ -166,6 +166,7 @@ tramp_frame_prepend_unwinder (struct gdbarch *gdbarch,
>    data->tramp_frame = tramp_frame;
>    unwinder->type = tramp_frame->frame_type;
>    unwinder->unwind_data = data;
> +  unwinder->unwinder_class = FRAME_UNWIND_GDB;
>    unwinder->sniffer = tramp_frame_sniffer;
>    unwinder->stop_reason = default_frame_unwind_stop_reason;
>    unwinder->this_id = tramp_frame_this_id;
> diff --git a/gdb/v850-tdep.c b/gdb/v850-tdep.c
> index de1cc6c47bd..d3f1af75417 100644
> --- a/gdb/v850-tdep.c
> +++ b/gdb/v850-tdep.c
> @@ -1323,6 +1323,7 @@ v850_frame_this_id (const frame_info_ptr &this_frame, void **this_cache,
>  static const struct frame_unwind v850_frame_unwind = {
>    "v850 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    v850_frame_this_id,
>    v850_frame_prev_register,
> diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c
> index a42c872feff..25d07c59376 100644
> --- a/gdb/vax-tdep.c
> +++ b/gdb/vax-tdep.c
> @@ -390,6 +390,7 @@ static const struct frame_unwind vax_frame_unwind =
>  {
>    "vax prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    vax_frame_this_id,
>    vax_frame_prev_register,
> diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c
> index 766d1d144be..e01da4ecab4 100644
> --- a/gdb/xstormy16-tdep.c
> +++ b/gdb/xstormy16-tdep.c
> @@ -731,6 +731,7 @@ xstormy16_frame_base_address (const frame_info_ptr &this_frame, void **this_cach
>  static const struct frame_unwind xstormy16_frame_unwind = {
>    "xstormy16 prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    xstormy16_frame_this_id,
>    xstormy16_frame_prev_register,
> diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
> index d7a56ccc33c..d12dfdc7347 100644
> --- a/gdb/xtensa-tdep.c
> +++ b/gdb/xtensa-tdep.c
> @@ -1501,6 +1501,7 @@ xtensa_unwind =
>  {
>    "xtensa prologue",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    xtensa_frame_this_id,
>    xtensa_frame_prev_register,
> diff --git a/gdb/z80-tdep.c b/gdb/z80-tdep.c
> index c442b60623b..66a12cd3be7 100644
> --- a/gdb/z80-tdep.c
> +++ b/gdb/z80-tdep.c
> @@ -1068,6 +1068,7 @@ z80_frame_unwind =
>  {
>    "z80",
>    NORMAL_FRAME,
> +  FRAME_UNWIND_ARCH,
>    default_frame_unwind_stop_reason,
>    z80_frame_this_id,
>    z80_frame_prev_register,
> -- 
> 2.47.0


  reply	other threads:[~2025-01-14 15:30 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

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=878qrdqurr.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=guinevere@redhat.com \
    --cc=simon.marchi@efficios.com \
    --cc=thiago.bauermann@linaro.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