diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-04-05 15:49:54 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-04-05 15:49:54 +0000 |
commit | a01dd7cc8d585aa836a74523790343e52fcad23d (patch) | |
tree | 670ba7c49cb4d742b44d6a5295beb26f831cb427 | |
parent | 5e5592e692fedaf8b1e6c5371e72007ee39cf93d (diff) | |
download | gdb-a01dd7cc8d585aa836a74523790343e52fcad23d.zip gdb-a01dd7cc8d585aa836a74523790343e52fcad23d.tar.gz gdb-a01dd7cc8d585aa836a74523790343e52fcad23d.tar.bz2 |
2003-04-05 Andrew Cagney <cagney@redhat.com>
* frame.c (legacy_get_prev_frame): Link prev to next at the
function start. Update comments.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/frame.c | 18 |
2 files changed, 17 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 81918aa..8bb0240 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2003-04-05 Andrew Cagney <cagney@redhat.com> + * frame.c (legacy_get_prev_frame): Link prev to next at the + function start. Update comments. + +2003-04-05 Andrew Cagney <cagney@redhat.com> + * frame.c (get_frame_id): Update comment. (legacy_get_prev_frame): Update comment. * gdbarch.sh: Delete check for EXTRA_FRAME_INFO. diff --git a/gdb/frame.c b/gdb/frame.c index 1c65339..161ff60 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1029,10 +1029,7 @@ legacy_get_prev_frame (struct frame_info *this_frame) struct frame_info *prev; int fromleaf; - /* Allocate the new frame but do not wire it in to the frame chain. - Some (bad) code in INIT_FRAME_EXTRA_INFO tries to look along - frame->next to pull some fancy tricks (of course such code is, by - definition, recursive). Try to prevent it. + /* Allocate the new frame. There is no reason to worry about memory leaks, should the remainder of the function fail. The allocated memory will be @@ -1042,6 +1039,17 @@ legacy_get_prev_frame (struct frame_info *this_frame) prev = FRAME_OBSTACK_ZALLOC (struct frame_info); prev->level = this_frame->level + 1; + /* Do not completly wire it in to the frame chain. Some (bad) code + in INIT_FRAME_EXTRA_INFO tries to look along frame->prev to pull + some fancy tricks (of course such code is, by definition, + recursive). + + On the other hand, methods, such as get_frame_pc() and + get_frame_base() rely on being able to walk along the frame + chain. Make certain that at least they work by providing that + link. Of course things manipulating prev can't go back. */ + prev->next = this_frame; + /* NOTE: cagney/2002-11-18: Should have been correctly setting the frame's type here, before anything else, and not last, at the bottom of this function. The various @@ -1155,7 +1163,6 @@ legacy_get_prev_frame (struct frame_info *this_frame) /* Link it in. */ this_frame->prev = prev; - prev->next = this_frame; /* FIXME: cagney/2002-01-19: This call will go away. Instead of initializing extra info, all frames will use the frame_cache @@ -1230,7 +1237,6 @@ legacy_get_prev_frame (struct frame_info *this_frame) /* Link in the already allocated prev frame. */ this_frame->prev = prev; - prev->next = this_frame; deprecated_update_frame_base_hack (prev, address); /* This change should not be needed, FIXME! We should determine |