aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuinevere Larsen <guinevere@redhat.com>2024-03-14 16:14:26 +0100
committerGuinevere Larsen <guinevere@redhat.com>2025-01-17 11:49:16 -0300
commitce36ef63aa74c30016334db0f6a4638d1ffe7256 (patch)
tree930ede1f932d2cb6b5408d295994abde127efb8d
parent3919cf8a704138e4f2dd79c66e33a62087180f1f (diff)
downloadbinutils-ce36ef63aa74c30016334db0f6a4638d1ffe7256.zip
binutils-ce36ef63aa74c30016334db0f6a4638d1ffe7256.tar.gz
binutils-ce36ef63aa74c30016334db0f6a4638d1ffe7256.tar.bz2
gdb: add "unwinder class" to frame unwinders
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>
-rw-r--r--gdb/NEWS4
-rw-r--r--gdb/aarch64-tdep.c2
-rw-r--r--gdb/alpha-mdebug-tdep.c1
-rw-r--r--gdb/alpha-tdep.c2
-rw-r--r--gdb/amd64-obsd-tdep.c1
-rw-r--r--gdb/amd64-tdep.c4
-rw-r--r--gdb/amd64-windows-tdep.c1
-rw-r--r--gdb/amdgpu-tdep.c1
-rw-r--r--gdb/arc-tdep.c2
-rw-r--r--gdb/arm-tdep.c5
-rw-r--r--gdb/avr-tdep.c1
-rw-r--r--gdb/bfin-tdep.c1
-rw-r--r--gdb/bpf-tdep.c1
-rw-r--r--gdb/cris-tdep.c2
-rw-r--r--gdb/csky-tdep.c2
-rw-r--r--gdb/doc/gdb.texinfo15
-rw-r--r--gdb/dummy-frame.c1
-rw-r--r--gdb/dwarf2/frame-tailcall.c1
-rw-r--r--gdb/dwarf2/frame.c2
-rw-r--r--gdb/frame-unwind.c22
-rw-r--r--gdb/frame-unwind.h19
-rw-r--r--gdb/frv-linux-tdep.c1
-rw-r--r--gdb/frv-tdep.c1
-rw-r--r--gdb/ft32-tdep.c1
-rw-r--r--gdb/h8300-tdep.c1
-rw-r--r--gdb/hppa-linux-tdep.c1
-rw-r--r--gdb/hppa-tdep.c3
-rw-r--r--gdb/i386-obsd-tdep.c1
-rw-r--r--gdb/i386-tdep.c5
-rw-r--r--gdb/ia64-tdep.c4
-rw-r--r--gdb/inline-frame.c1
-rw-r--r--gdb/iq2000-tdep.c1
-rw-r--r--gdb/jit.c1
-rw-r--r--gdb/lm32-tdep.c1
-rw-r--r--gdb/loongarch-tdep.c1
-rw-r--r--gdb/m32c-tdep.c1
-rw-r--r--gdb/m32r-linux-tdep.c1
-rw-r--r--gdb/m32r-tdep.c1
-rw-r--r--gdb/m68hc11-tdep.c1
-rw-r--r--gdb/m68k-linux-tdep.c1
-rw-r--r--gdb/m68k-tdep.c1
-rw-r--r--gdb/mep-tdep.c1
-rw-r--r--gdb/microblaze-tdep.c1
-rw-r--r--gdb/mips-sde-tdep.c1
-rw-r--r--gdb/mips-tdep.c4
-rw-r--r--gdb/mn10300-tdep.c1
-rw-r--r--gdb/moxie-tdep.c1
-rw-r--r--gdb/msp430-tdep.c1
-rw-r--r--gdb/nds32-tdep.c2
-rw-r--r--gdb/or1k-tdep.c1
-rw-r--r--gdb/ppc-fbsd-tdep.c1
-rw-r--r--gdb/ppc-obsd-tdep.c1
-rw-r--r--gdb/python/py-unwind.c1
-rw-r--r--gdb/record-btrace.c2
-rw-r--r--gdb/riscv-tdep.c1
-rw-r--r--gdb/rl78-tdep.c1
-rw-r--r--gdb/rs6000-aix-tdep.c1
-rw-r--r--gdb/rs6000-tdep.c2
-rw-r--r--gdb/rx-tdep.c2
-rw-r--r--gdb/s12z-tdep.c1
-rw-r--r--gdb/s390-linux-tdep.c1
-rw-r--r--gdb/s390-tdep.c2
-rw-r--r--gdb/sentinel-frame.c1
-rw-r--r--gdb/sh-tdep.c2
-rw-r--r--gdb/sparc-netbsd-tdep.c1
-rw-r--r--gdb/sparc-obsd-tdep.c1
-rw-r--r--gdb/sparc-sol2-tdep.c1
-rw-r--r--gdb/sparc-tdep.c1
-rw-r--r--gdb/sparc64-fbsd-tdep.c1
-rw-r--r--gdb/sparc64-netbsd-tdep.c1
-rw-r--r--gdb/sparc64-obsd-tdep.c2
-rw-r--r--gdb/sparc64-sol2-tdep.c1
-rw-r--r--gdb/sparc64-tdep.c1
-rw-r--r--gdb/tic6x-tdep.c2
-rw-r--r--gdb/tilegx-tdep.c1
-rw-r--r--gdb/tramp-frame.c1
-rw-r--r--gdb/v850-tdep.c1
-rw-r--r--gdb/vax-tdep.c1
-rw-r--r--gdb/xstormy16-tdep.c1
-rw-r--r--gdb/xtensa-tdep.c1
-rw-r--r--gdb/z80-tdep.c1
81 files changed, 168 insertions, 2 deletions
diff --git a/gdb/NEWS b/gdb/NEWS
index 8683112..abc6716 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -233,6 +233,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 bc8746e..e549808 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 abded2a..b087afa 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 301ab5c..4ce45d2 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 5b1e77b..5359959 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 e03180b..f1cd1fd 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 ca7b7d9..535cf41 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 6fe7973..b8a5fd8 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 9adf295..a4ab78d 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 c27b2a2..657ecd5 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 9c97d3c..08b3cb1 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 1fa7a66..60838f0 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 79a4420..1f53d63 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 8562def..4db2a23 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 d69b8e5..6e8426f 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 f519812..2a1c3d0 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -42292,7 +42292,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 9f540d0..e7de15b 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 6ecf8a0..50efd4e 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 6d8a4fb..492b692 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 9415cd1..658c9840 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 std::initializer_list<const frame_unwind *>
@@ -73,6 +83,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)
@@ -332,9 +349,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 (const auto &unwinder : table)
@@ -342,6 +360,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 480c9c8..d5990c8 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 4642445..7a7c490 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 6ae3f0d..a1845a2 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 15a585a..e3827ad 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 e91d664..5b4466e 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 8f73f8d..2619b60 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 ad93c2b..2447b87 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 3539c65..1d2b1a0 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 5f585b2..b76e8db 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 b0c1ad3..b10cc25 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 bfb8916..40d0e4c 100644
--- a/gdb/inline-frame.c
+++ b/gdb/inline-frame.c
@@ -273,6 +273,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 5776c66..e0db1b0 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 9736f84..61bc569 100644
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -1116,6 +1116,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 98a0728..4eb5f2a 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 e91a69b..4f00deb 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 28dfb2f..bce12c5 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 8eea662..11a150a 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 c6428f6..aadb8c0 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 12cd0ef..e14ac62 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 7250ce0..7cca4f8 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 375d5e6..2ff507e 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 a4ef343..7dd6371 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 609c665..7a56471 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 90988cd..18cb948 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 d217f23..13d1c1b 100644
--- a/gdb/mips-tdep.c
+++ b/gdb/mips-tdep.c
@@ -2932,6 +2932,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,
@@ -3368,6 +3369,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,
@@ -3747,6 +3749,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,
@@ -3863,6 +3866,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 d44eebf..565300a 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 29ad1f2..82d3478 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 41a8f99..6d7fee2 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 8ad51d0..910a6f7 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 290f748..6e0466c 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 3f0f93f..12eb396 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 1bd79b3..ceb8b5d 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 c1a01bf..9d9b048 100644
--- a/gdb/python/py-unwind.c
+++ b/gdb/python/py-unwind.c
@@ -985,6 +985,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 4b4248f..809b901 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -1945,6 +1945,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,
@@ -1957,6 +1958,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 200a20a..9b1f404 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -3908,6 +3908,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 46a7ee9..0fcd5f9 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 3cc0232..f1c31ae 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 fa4fb50..434049d 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 6b12fe0..6cb74c2 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 c24c756..7fa73cf 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 bc1db55..556fad6 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 6dc825b..2f218c8 100644
--- a/gdb/s390-tdep.c
+++ b/gdb/s390-tdep.c
@@ -2767,6 +2767,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,
@@ -2861,6 +2862,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 4eaeae0..9fe4036 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 d211265..c8809e3 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 fc22e66..5b3dd06 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 3182a77..049c315 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 aea3766..bb9c8a5 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 b48b130..d69ab87 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 a30c7c4..1d4c075 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 b101f49..82eb99f 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 cef6efd..e81afa6 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 b7ca4ca..e8d09e2 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 dc8032f..90b04fc 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 6732478..bac8ba8 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 92f2be0..16cd25f 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 4f7c62d..6368f67 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 de1cc6c..d3f1af7 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 a42c872..25d07c5 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 766d1d1..e01da4e 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 d7a56cc..d12dfdc 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 c442b60..66a12cd 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,