2003-04-05 Andrew Cagney <cagney@redhat.com>

* frame.c (legacy_get_prev_frame): Link prev to next at the
	function start.  Update comments.
This commit is contained in:
Andrew Cagney 2003-04-05 15:49:54 +00:00
parent 5e5592e692
commit a01dd7cc8d
2 changed files with 17 additions and 6 deletions

View File

@ -1,3 +1,8 @@
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> 2003-04-05 Andrew Cagney <cagney@redhat.com>
* frame.c (get_frame_id): Update comment. * frame.c (get_frame_id): Update comment.

View File

@ -1029,10 +1029,7 @@ legacy_get_prev_frame (struct frame_info *this_frame)
struct frame_info *prev; struct frame_info *prev;
int fromleaf; int fromleaf;
/* Allocate the new frame but do not wire it in to the frame chain. /* Allocate the new frame.
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.
There is no reason to worry about memory leaks, should the There is no reason to worry about memory leaks, should the
remainder of the function fail. The allocated memory will be 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 = FRAME_OBSTACK_ZALLOC (struct frame_info);
prev->level = this_frame->level + 1; 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 /* NOTE: cagney/2002-11-18: Should have been correctly setting the
frame's type here, before anything else, and not last, at the frame's type here, before anything else, and not last, at the
bottom of this function. The various bottom of this function. The various
@ -1155,7 +1163,6 @@ legacy_get_prev_frame (struct frame_info *this_frame)
/* Link it in. */ /* Link it in. */
this_frame->prev = prev; this_frame->prev = prev;
prev->next = this_frame;
/* FIXME: cagney/2002-01-19: This call will go away. Instead of /* FIXME: cagney/2002-01-19: This call will go away. Instead of
initializing extra info, all frames will use the frame_cache 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. */ /* Link in the already allocated prev frame. */
this_frame->prev = prev; this_frame->prev = prev;
prev->next = this_frame;
deprecated_update_frame_base_hack (prev, address); deprecated_update_frame_base_hack (prev, address);
/* This change should not be needed, FIXME! We should determine /* This change should not be needed, FIXME! We should determine