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.
This commit is contained in:
Andrew Cagney 2002-11-09 18:14:10 +00:00
parent 95adb866d7
commit 15220c65c0
3 changed files with 15 additions and 10 deletions

View File

@ -1,3 +1,10 @@
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> 2002-11-09 Andrew Cagney <ac131313@redhat.com>
* frame.c (get_prev_frame): Cleanups. Eliminate redundant tests * frame.c (get_prev_frame): Cleanups. Eliminate redundant tests

View File

@ -742,13 +742,10 @@ get_prev_frame (struct frame_info *next_frame)
return current_frame; return current_frame;
} }
/* If we have the prev one, return it. */ /* Only try to do the unwind once. */
if (next_frame->prev) if (next_frame->prev_p)
/* 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. */
return next_frame->prev; return next_frame->prev;
next_frame->prev_p = 1;
/* On some machines it is possible to call a function without /* On some machines it is possible to call a function without
setting up a stack frame for it. On these machines, we setting up a stack frame for it. On these machines, we

View File

@ -140,10 +140,11 @@ struct frame_info
frame_register_unwind_ftype *register_unwind; frame_register_unwind_ftype *register_unwind;
void *register_unwind_cache; void *register_unwind_cache;
/* Pointers to the next (down, inner) and previous (up, outer) /* Pointers to the next (down, inner, younger) and previous (up,
frame_info's in the frame cache. */ outer, older) frame_info's in the frame cache. */
struct frame_info *next; /* down, inner */ struct frame_info *next; /* down, inner, younger */
struct frame_info *prev; /* up, outer */ int prev_p;
struct frame_info *prev; /* up, outer, older */
}; };
/* Values for the source flag to be used in print_frame_info_base(). */ /* Values for the source flag to be used in print_frame_info_base(). */