diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/frame.c | 9 | ||||
-rw-r--r-- | gdb/frame.h | 9 |
3 files changed, 15 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2332d14d660..269a613735e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 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 for a NULL NEXT_FRAME. Simplify fromleaf initialization. Add more comments. Zap dead code. diff --git a/gdb/frame.c b/gdb/frame.c index 86315841ba8..bfefc776934 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -742,13 +742,10 @@ get_prev_frame (struct frame_info *next_frame) 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 diff --git a/gdb/frame.h b/gdb/frame.h index 8fd92444586..7b4cca7a1a4 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -140,10 +140,11 @@ struct frame_info 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(). */ |