* gdb.base/attach.exp (do_attach_tests): Don't forget to kill second
[deliverable/binutils-gdb.git] / gdb / dummy-frame.c
index 94413f4baef05b0c5d171a1525cedadb5de3c5a3..706307149143d179690917e882ae6a1b879f05dc 100644 (file)
@@ -1,8 +1,8 @@
 /* Code dealing with dummy stack frames, for GDB, the GNU debugger.
 
    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
-   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software
-   Foundation, Inc.
+   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free
+   Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -36,6 +36,8 @@ static void dummy_frame_this_id (struct frame_info *next_frame,
                                 void **this_prologue_cache,
                                 struct frame_id *this_id);
 
+static int pc_in_dummy_frame (CORE_ADDR pc);
+
 /* Dummy frame.  This saves the processor state just prior to setting
    up the inferior function call.  Older targets save the registers
    on the target stack (but that really slows down function calls).  */
@@ -99,7 +101,7 @@ find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp)
              FP against the saved SP and FP.  NOTE: If you're trying
              to fix a problem with GDB not correctly finding a dummy
              frame, check the comments that go with FRAME_ALIGN() and
-             SAVE_DUMMY_FRAME_TOS().  */
+             UNWIND_DUMMY_ID().  */
          if (fp != dummyframe->fp && fp != dummyframe->sp)
            continue;
        }
@@ -110,7 +112,7 @@ find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp)
   return NULL;
 }
 
-struct regcache *
+static struct regcache *
 deprecated_find_dummy_frame_regcache (CORE_ADDR pc, CORE_ADDR fp)
 {
   struct dummy_frame *dummy = find_dummy_frame (pc, fp);
@@ -129,7 +131,7 @@ deprecated_generic_find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp)
   return deprecated_grub_regcache_for_registers (regcache);
 }
 
-/* Function: pc_in_call_dummy (pc, sp, fp)
+/* Function: pc_in_call_dummy (pc)
 
    Return true if the PC falls in a dummy frame created by gdb for an
    inferior call.  The code below which allows DECR_PC_AFTER_BREAK is
@@ -137,7 +139,7 @@ deprecated_generic_find_dummy_frame (CORE_ADDR pc, CORE_ADDR fp)
    subtracted out.  */
 
 int
-generic_pc_in_call_dummy (CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR fp)
+deprecated_pc_in_call_dummy (CORE_ADDR pc)
 {
   return pc_in_dummy_frame (pc);
 }
@@ -149,13 +151,9 @@ generic_pc_in_call_dummy (CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR fp)
 
    FIXME: cagney/2002-11-23: This is silly.  Surely "infrun.c" can
    figure out what the real PC (as in the resume address) is BEFORE
-   calling this function (Oh, and I'm not even sure that this function
-   is called with an decremented PC, the call to pc_in_call_dummy() in
-   that file is conditional on
-   !DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET_P yet generic dummy
-   targets set DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET. True?).  */
+   calling this function.  */
 
-int
+static int
 pc_in_dummy_frame (CORE_ADDR pc)
 {
   struct dummy_frame *dummyframe;
@@ -254,21 +252,6 @@ generic_save_call_dummy_addr (CORE_ADDR lo, CORE_ADDR hi)
   dummy_frame_stack->call_hi = hi;
 }
 
-/* Restore the machine state from either the saved dummy stack or a
-   real stack frame. */
-
-void
-generic_pop_current_frame (void (*popper) (struct frame_info * frame))
-{
-  struct frame_info *frame = get_current_frame ();
-  if (get_frame_type (frame) == DUMMY_FRAME)
-    /* NOTE: cagney/2002-22-23: Does this ever occure?  Surely a dummy
-       frame will have already been poped by the "infrun.c" code.  */
-    generic_pop_dummy_frame ();
-  else
-    (*popper) (frame);
-}
-
 /* Discard the innermost dummy frame from the dummy frame stack
    (passed in as a parameter).  */
 
@@ -282,7 +265,7 @@ discard_innermost_dummy (struct dummy_frame **stack)
 }
 
 void
-generic_pop_dummy_frame (void)
+deprecated_pop_dummy_frame (void)
 {
   struct dummy_frame *dummy_frame = dummy_frame_stack;
 
@@ -360,17 +343,13 @@ dummy_frame_this_id (struct frame_info *next_frame,
      just asking for trouble.  */
   if (gdbarch_unwind_dummy_id_p (current_gdbarch))
     {
-      /* Assume call_function_by_hand(), via SAVE_DUMMY_FRAME_TOS,
-        previously saved the dummy frame's ID.  Things only work if
-        the two return the same value.  */
-      gdb_assert (SAVE_DUMMY_FRAME_TOS_P ());
       /* Use an architecture specific method to extract the prev's
         dummy ID from the next frame.  Note that this method uses
         frame_register_unwind to obtain the register values needed to
         determine the dummy frame's ID.  */
       (*this_id) = gdbarch_unwind_dummy_id (current_gdbarch, next_frame);
     }
-  else if (frame_relative_level (next_frame) < 0)
+  else if (get_frame_type (next_frame) == SENTINEL_FRAME)
     {
       /* We're unwinding a sentinel frame, the PC of which is pointing
         at a stack dummy.  Fake up the dummy frame's ID using the
@@ -391,7 +370,7 @@ dummy_frame_this_id (struct frame_info *next_frame,
     }
   else
     {
-      /* Outch!  We're not trying to find the innermost frame's ID yet
+      /* Ouch!  We're not trying to find the innermost frame's ID yet
         we're trying to unwind to a dummy.  The architecture must
         provide the unwind_dummy_id() method.  Abandon the unwind
         process but only after first warning the user.  */
@@ -412,11 +391,10 @@ static struct frame_unwind dummy_frame_unwind =
 };
 
 const struct frame_unwind *
-dummy_frame_p (CORE_ADDR pc)
+dummy_frame_sniffer (struct frame_info *next_frame)
 {
-  if (DEPRECATED_PC_IN_CALL_DUMMY_P ()
-      ? DEPRECATED_PC_IN_CALL_DUMMY (pc, 0, 0)
-      : pc_in_dummy_frame (pc))
+  CORE_ADDR pc = frame_pc_unwind (next_frame);
+  if (pc_in_dummy_frame (pc))
     return &dummy_frame_unwind;
   else
     return NULL;
This page took 0.025738 seconds and 4 git commands to generate.