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:
parent
ea001bdce2
commit
32261e5234
2 changed files with 9 additions and 4 deletions
|
@ -1,3 +1,8 @@
|
|||
2014-01-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* dwarf2-frame.c (dwarf2_frame_cfa): Move UNWIND_UNAVAILABLE check
|
||||
earlier.
|
||||
|
||||
2014-01-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* frame-unwind.c: Include target.h.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue