diff options
author | Andrew Cagney <cagney@redhat.com> | 2002-11-09 18:14:10 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2002-11-09 18:14:10 +0000 |
commit | 15220c65c0b9ebd38aebfc5d707040b7f37ed2db (patch) | |
tree | a849c0a63c294afde6a3c15551dd9d14efe93cff | |
parent | 95adb866d747a0c2c01a9369b55e4a26554e4597 (diff) | |
download | gdb-15220c65c0b9ebd38aebfc5d707040b7f37ed2db.zip gdb-15220c65c0b9ebd38aebfc5d707040b7f37ed2db.tar.gz gdb-15220c65c0b9ebd38aebfc5d707040b7f37ed2db.tar.bz2 |
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.
-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 2332d14..269a613 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 8631584..bfefc77 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 8fd9244..7b4cca7 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(). */ |