* frame.c (get_prev_frame): Don't try to unwind the PC. This

fixes PR backtrace/1476.
This commit is contained in:
Mark Kettenis 2004-01-05 20:33:35 +00:00
parent 5439edaaea
commit dbc22fa117
2 changed files with 5 additions and 31 deletions

View File

@ -1,3 +1,8 @@
2004-01-05 Mark Kettenis <kettenis@gnu.org>
* frame.c (get_prev_frame): Don't try to unwind the PC. This
fixes PR backtrace/1476.
2004-01-05 Andrew Cagney <cagney@redhat.com>
* libunwind-frame.h (struct frame_id): Add opaque declaration,

View File

@ -1943,37 +1943,6 @@ get_prev_frame (struct frame_info *this_frame)
prev_frame = FRAME_OBSTACK_ZALLOC (struct frame_info);
prev_frame->level = this_frame->level + 1;
/* Try to unwind the PC. If that doesn't work, assume we've reached
the oldest frame and simply return. Is there a better sentinal
value? The unwound PC value is then used to initialize the new
previous frame's type.
Note that the pc-unwind is intentionally performed before the
frame chain. This is ok since, for old targets, both
frame_pc_unwind (nee, FRAME_SAVED_PC) and
DEPRECATED_FRAME_CHAIN()) assume THIS_FRAME's data structures
have already been initialized (using
DEPRECATED_INIT_EXTRA_FRAME_INFO) and hence the call order
doesn't matter.
By unwinding the PC first, it becomes possible to, in the case of
a dummy frame, avoid also unwinding the frame ID. This is
because (well ignoring the PPC) a dummy frame can be located
using THIS_FRAME's frame ID. */
if (frame_pc_unwind (this_frame) == 0)
{
/* The allocated PREV_FRAME will be reclaimed when the frame
obstack is next purged. */
if (frame_debug)
{
fprintf_unfiltered (gdb_stdlog, "-> ");
fprint_frame (gdb_stdlog, NULL);
fprintf_unfiltered (gdb_stdlog, " // unwound PC zero }\n");
}
return NULL;
}
/* Don't yet compute ->unwind (and hence ->type). It is computed
on-demand in get_frame_type, frame_register_unwind, and
get_frame_id. */