2002-12-13 Andrew Cagney <ac131313@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Fri, 13 Dec 2002 16:26:02 +0000 (16:26 +0000)
committerAndrew Cagney <cagney@redhat.com>
Fri, 13 Dec 2002 16:26:02 +0000 (16:26 +0000)
* infcmd.c (run_stack_dummy): Create a frame ID directly and then
pass that to set_momentary_breakpoint.  Move comments to where they
belong.
* frame.h (set_current_frame): Delete declaration.
* frame.c (set_current_frame): Delete function.

gdb/ChangeLog
gdb/frame.c
gdb/frame.h
gdb/infcmd.c

index def947ccdac6468881945b984d501f883964b6d0..f789563b2b2082c0406b794b4cae067b9442677c 100644 (file)
@@ -1,3 +1,11 @@
+2002-12-13  Andrew Cagney  <ac131313@redhat.com>
+
+       * infcmd.c (run_stack_dummy): Create a frame ID directly and then
+       pass that to set_momentary_breakpoint.  Move comments to where they
+       belong.
+       * frame.h (set_current_frame): Delete declaration.
+       * frame.c (set_current_frame): Delete function.
+
 2002-12-13  Andrew Cagney  <ac131313@redhat.com>
 
        * frame.c (frame_extra_info_zalloc): New function.
index 4ed66b3c410248498d4658fd9019185fa214aa4b..29ebfbee403da4b61981356c57b3c60ded410c81 100644 (file)
@@ -472,12 +472,6 @@ get_current_frame (void)
   return current_frame;
 }
 
-void
-set_current_frame (struct frame_info *frame)
-{
-  current_frame = frame;
-}
-
 /* The "selected" stack frame is used by default for local and arg
    access.  May be zero, for no selected frame.  */
 
index d42780de55c402be8b5670d1a923e921e4aeba74..5a45502982a821ccbf5bf1be3bcdc29391c5f845 100644 (file)
@@ -625,23 +625,9 @@ extern void return_command (char *, int);
 extern struct frame_info *deprecated_selected_frame;
 
 
-/* NOTE: cagney/2002-11-28:
+/* Create a frame using the specified BASE and PC.  */
 
-   These functions are used to explicitly create and set the inner
-   most (current) frame vis:
-
-   set_current_frame (create_new_frame (read_fp(), stop_pc)));
-
-   Such code should be removed.  Instead that task can be left to
-   get_current_frame() which will update things on-demand.
-
-   The only vague exception is found in "infcmd.c" (and a few
-   architectures specific files) as part of the code implementing the
-   command ``(gdb) frame FRAME PC''.  There, the frame should be
-   created/selected in a single shot.  */
-
-extern void set_current_frame (struct frame_info *);
-extern struct frame_info *create_new_frame (CORE_ADDR, CORE_ADDR);
+extern struct frame_info *create_new_frame (CORE_ADDR base, CORE_ADDR pc);
 
 
 /* Create/access the frame's `extra info'.  The extra info is used by
index c8b5aa28e82dd182347f45774d48a5b80c5dbaa9..56bd75d8484d434b77209441d205a6fe54e84581 100644 (file)
@@ -1001,30 +1001,28 @@ run_stack_dummy (CORE_ADDR addr, struct regcache *buffer)
        }
       else
        {
+         /* If defined, CALL_DUMMY_BREAKPOINT_OFFSET is where we need
+            to put a breakpoint instruction.  If not, the call dummy
+            already has the breakpoint instruction in it.
+
+            ADDR IS THE ADDRESS of the call dummy plus the
+            CALL_DUMMY_START_OFFSET, so we need to subtract the
+            CALL_DUMMY_START_OFFSET.  */
          sal.pc = addr - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET;
        }
       sal.section = find_pc_overlay (sal.pc);
 
-      /* Set up a FRAME for the dummy frame so we can pass it to
-         set_momentary_breakpoint.  We need to give the breakpoint a
-         frame in case there is only one copy of the dummy (e.g.
-         CALL_DUMMY_LOCATION == AFTER_TEXT_END).  */
-      flush_cached_frames ();
-      set_current_frame (create_new_frame (read_fp (), sal.pc));
-
-      /* If defined, CALL_DUMMY_BREAKPOINT_OFFSET is where we need to put
-         a breakpoint instruction.  If not, the call dummy already has the
-         breakpoint instruction in it.
-
-         addr is the address of the call dummy plus the CALL_DUMMY_START_OFFSET,
-         so we need to subtract the CALL_DUMMY_START_OFFSET.  */
-      /* FIXME: cagney/2002-12-01: Rather than pass in curent frame,
-         why not just create, and then pass in a frame ID.  This would
-         make it possible to eliminate set_current_frame().  */
-      bpt = set_momentary_breakpoint (sal,
-                                     get_frame_id (get_current_frame ()),
-                                     bp_call_dummy);
-      bpt->disposition = disp_del;
+      {
+       /* Set up a frame ID for the dummy frame so we can pass it to
+          set_momentary_breakpoint.  We need to give the breakpoint a
+          frame ID so that the breakpoint code can correctly
+          re-identify the dummy breakpoint.  */
+       struct frame_id frame = frame_id_build (read_fp (), sal.pc);
+       /* Create a momentary breakpoint at the return address of the
+           inferior.  That way it breaks when it returns.  */
+       bpt = set_momentary_breakpoint (sal, frame, bp_call_dummy);
+       bpt->disposition = disp_del;
+      }
 
       /* If all error()s out of proceed ended up calling normal_stop (and
          perhaps they should; it already does in the special case of error