2003-04-05 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Sat, 5 Apr 2003 15:49:54 +0000 (15:49 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sat, 5 Apr 2003 15:49:54 +0000 (15:49 +0000)
* frame.c (legacy_get_prev_frame): Link prev to next at the
function start.  Update comments.

gdb/ChangeLog
gdb/frame.c

index 81918aa082ec9125db224296b6b15b6b0590201c..8bb0240ff4f79f8188580c65d3bce24c5cd7e94e 100644 (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>
 
        * frame.c (get_frame_id): Update comment.
 2003-04-05  Andrew Cagney  <cagney@redhat.com>
 
        * frame.c (get_frame_id): Update comment.
index 1c6533988420423c8f8e45872223eaf4c5b93d20..161ff6085e849997e40fa7ec36bb3fa561841da1 100644 (file)
@@ -1029,10 +1029,7 @@ legacy_get_prev_frame (struct frame_info *this_frame)
   struct frame_info *prev;
   int fromleaf;
 
   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
 
      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;
 
   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
   /* 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;
 
       /* 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
 
       /* 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;
 
   /* 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
   deprecated_update_frame_base_hack (prev, address);
 
   /* This change should not be needed, FIXME!  We should determine
This page took 0.032947 seconds and 4 git commands to generate.