@@ -107,6 +107,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.
+
* New remote packets
vFile:stat
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -1185,6 +1185,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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -42207,7 +42207,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
@@ -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,
@@ -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,
@@ -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,
@@ -30,6 +30,17 @@
#include "dwarf2/frame-tailcall.h"
#include "cli/cli-cmds.h"
#include "inferior.h"
+#include <map>
+
+/* Conversion list between the enum for frame_unwind_class and
+ string. */
+static std::map<enum frame_unwind_class, const char *> unwind_class_conversion =
+{
+ {FRAME_UNWIND_GDB, "GDB"},
+ {FRAME_UNWIND_ARCH, "ARCH"},
+ {FRAME_UNWIND_EXTENSION, "EXTENSION"},
+ {FRAME_UNWIND_DEBUGINFO, "DEBUGINFO"},
+};
/* Default sniffers, that must always be the first in the unwinder list,
no matter the architecture. */
@@ -75,6 +86,14 @@ get_frame_unwind_table (struct gdbarch *gdbarch)
return table;
}
+static const char *
+frame_unwinder_class_str (frame_unwind_class uclass)
+{
+ auto location = unwind_class_conversion.find (uclass);
+ gdb_assert (location != unwind_class_conversion.end ());
+ return location->second;
+}
+
void
frame_unwind_prepend_unwinder (struct gdbarch *gdbarch,
const struct frame_unwind *unwinder)
@@ -322,19 +341,22 @@ 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)
{
const char *name = unwinder->name;
const char *type = frame_type_str (unwinder->type);
+ const char *uclass = frame_unwinder_class_str (unwinder->unwinder_class);
ui_out_emit_list tuple_emitter (uiout, nullptr);
uiout->field_string ("name", name);
uiout->field_string ("type", type);
+ uiout->field_string ("class", uclass);
uiout->text ("\n");
}
}
@@ -156,12 +156,29 @@ 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,
+};
+
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;
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -1109,6 +1109,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,
@@ -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,
@@ -453,6 +453,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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -1981,6 +1981,7 @@ static const struct frame_unwind nios2_frame_unwind =
{
"nios2 prologue",
NORMAL_FRAME,
+ FRAME_UNWIND_ARCH,
default_frame_unwind_stop_reason,
nios2_frame_this_id,
nios2_frame_prev_register,
@@ -2082,6 +2083,7 @@ static const struct frame_unwind nios2_stub_frame_unwind =
{
"nios2 stub",
NORMAL_FRAME,
+ FRAME_UNWIND_ARCH,
default_frame_unwind_stop_reason,
nios2_stub_frame_this_id,
nios2_stub_frame_prev_register,
@@ -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,
@@ -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,
@@ -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,
@@ -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;
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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;
@@ -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,
@@ -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,
@@ -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,
@@ -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,
@@ -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,