+2002-11-09 Andrew Cagney <ac131313@redhat.com>
+
+ * frame.c (get_prev_frame): Test prev_p to identify a previously
+ unwound frame. Initialize prev_p.
+ * frame.h (struct frame_info): Add field prev_p. Expand prev/next
+ comment.
+
2002-11-09 Andrew Cagney <ac131313@redhat.com>
* frame.c (get_prev_frame): Cleanups. Eliminate redundant tests
return current_frame;
}
- /* If we have the prev one, return it. */
- if (next_frame->prev)
- /* FIXME: cagney/2002-11-09: Rather than relying on ->PREV being
- non-NULL, there should be a predicate (->prev_p?). That would
- stop this function constantly trying to chain beyond the
- outermost frame. */
+ /* Only try to do the unwind once. */
+ if (next_frame->prev_p)
return next_frame->prev;
+ next_frame->prev_p = 1;
/* On some machines it is possible to call a function without
setting up a stack frame for it. On these machines, we
frame_register_unwind_ftype *register_unwind;
void *register_unwind_cache;
- /* Pointers to the next (down, inner) and previous (up, outer)
- frame_info's in the frame cache. */
- struct frame_info *next; /* down, inner */
- struct frame_info *prev; /* up, outer */
+ /* Pointers to the next (down, inner, younger) and previous (up,
+ outer, older) frame_info's in the frame cache. */
+ struct frame_info *next; /* down, inner, younger */
+ int prev_p;
+ struct frame_info *prev; /* up, outer, older */
};
/* Values for the source flag to be used in print_frame_info_base(). */