diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index 2aff23e..518b0b9 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -1495,9 +1495,13 @@ dwarf2_frame_base_sniffer (struct frame_info *this_frame) CORE_ADDR dwarf2_frame_cfa (struct frame_info *this_frame) { + extern const struct frame_unwind record_btrace_frame_unwind; + extern const struct frame_unwind record_btrace_tailcall_frame_unwind; while (get_frame_type (this_frame) == INLINE_FRAME) this_frame = get_prev_frame (this_frame); - if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE) + if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE + || frame_unwinder_is (this_frame, &record_btrace_frame_unwind) + || frame_unwinder_is (this_frame, &record_btrace_tailcall_frame_unwind)) throw_error (NOT_AVAILABLE_ERROR, _("can't compute CFA for this frame: " "required registers or memory are unavailable")); diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index d634712..9a4287b 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -1217,7 +1217,7 @@ record_btrace_frame_dealloc_cache (struct frame_info *self, void *this_cache) Therefore this unwinder reports any possibly unwound registers as . */ -static const struct frame_unwind record_btrace_frame_unwind = +const struct frame_unwind record_btrace_frame_unwind = { BTRACE_FRAME, record_btrace_frame_unwind_stop_reason, @@ -1228,7 +1228,7 @@ static const struct frame_unwind record_btrace_frame_unwind = record_btrace_frame_dealloc_cache }; -static const struct frame_unwind record_btrace_tailcall_frame_unwind = +const struct frame_unwind record_btrace_tailcall_frame_unwind = { BTRACE_TAILCALL_FRAME, record_btrace_frame_unwind_stop_reason,