summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/frame.c9
-rw-r--r--gdb/frame.h9
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(). */