mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 01:07:52 +00:00
frame, cfa: check unwind stop reason first
Swap the unwind stop reason check and the unwinder check to allow non-dwarf2 frame types to fail with a recoverable error. gdb/ 2013-02-11 Jan Kratochvil <jan.kratochvil@redhat.com> * dwarf2-frame.c (dwarf2_frame_cfa): Move UNWIND_UNAVAILABLE check earlier.
This commit is contained in:
@@ -1512,16 +1512,16 @@ dwarf2_frame_cfa (struct frame_info *this_frame)
|
||||
{
|
||||
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)
|
||||
throw_error (NOT_AVAILABLE_ERROR,
|
||||
_("can't compute CFA for this frame: "
|
||||
"required registers or memory are unavailable"));
|
||||
/* This restriction could be lifted if other unwinders are known to
|
||||
compute the frame base in a way compatible with the DWARF
|
||||
unwinder. */
|
||||
if (!frame_unwinder_is (this_frame, &dwarf2_frame_unwind)
|
||||
&& !frame_unwinder_is (this_frame, &dwarf2_tailcall_frame_unwind))
|
||||
error (_("can't compute CFA for this frame"));
|
||||
if (get_frame_unwind_stop_reason (this_frame) == UNWIND_UNAVAILABLE)
|
||||
throw_error (NOT_AVAILABLE_ERROR,
|
||||
_("can't compute CFA for this frame: "
|
||||
"required registers or memory are unavailable"));
|
||||
return get_frame_base (this_frame);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user