2003-10-31 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Fri, 31 Oct 2003 22:38:22 +0000 (22:38 +0000)
committerAndrew Cagney <cagney@redhat.com>
Fri, 31 Oct 2003 22:38:22 +0000 (22:38 +0000)
* stack.c (return_command): Use get_frame_type, instead of
CALL_DUMMY_HAS_COMPLETED.
* inferior.h (CALL_DUMMY_HAS_COMPLETED): Delete definition.
* config/pa/tm-hppa.h (CALL_DUMMY_HAS_COMPLETED): Delete macro.

gdb/ChangeLog
gdb/config/pa/tm-hppa.h
gdb/inferior.h
gdb/stack.c

index da46584107e9945ff6cdfff6694ca914bf1ddb53..c97c0dd50ae18e590521db92f36a3a22ebff3c10 100644 (file)
@@ -1,3 +1,10 @@
+2003-10-31  Andrew Cagney  <cagney@redhat.com>
+
+       * stack.c (return_command): Use get_frame_type, instead of
+       CALL_DUMMY_HAS_COMPLETED.
+       * inferior.h (CALL_DUMMY_HAS_COMPLETED): Delete definition.
+       * config/pa/tm-hppa.h (CALL_DUMMY_HAS_COMPLETED): Delete macro.
+
 2003-10-31  Mark Kettenis  <kettenis@gnu.org>
 
        * x86-64-linux-tdep.c (x86_64_linux_sc_reg_offset): Don't
index c6504abf3471c35e0d7a1452c756fe36b1dd8724..9d4b1346ccb5854636eff8a117996983e48bacb0 100644 (file)
@@ -208,7 +208,7 @@ extern void hppa_frame_init_saved_regs (struct frame_info *);
 /* If we've reached a trap instruction within the call dummy, then
    we'll consider that to mean that we've reached the call dummy's
    end after its successful completion. */
-#define CALL_DUMMY_HAS_COMPLETED(pc, sp, frame_address) \
+#define DEPRECATED_CALL_DUMMY_HAS_COMPLETED(pc, sp, frame_address) \
   (DEPRECATED_PC_IN_CALL_DUMMY((pc), (sp), (frame_address)) && \
    (read_memory_integer((pc), 4) == BREAKPOINT32))
 
index 60191f2b98ff9378838802c4817448c151b147bd..b36dcd45b1d80d7b345a3421c7cbfc905d965680 100644 (file)
@@ -472,29 +472,6 @@ extern int deprecated_pc_in_call_dummy_at_entry_point (CORE_ADDR pc,
                                                       CORE_ADDR sp,
                                                       CORE_ADDR frame_address);
 
-/* It's often not enough for our clients to know whether the PC is merely
-   somewhere within the call dummy.  They may need to know whether the
-   call dummy has actually completed.  (For example, wait_for_inferior
-   wants to know when it should truly stop because the call dummy has
-   completed.  If we're single-stepping because of slow watchpoints,
-   then we may find ourselves stopped at the entry of the call dummy,
-   and want to continue stepping until we reach the end.)
-
-   Note that this macro is intended for targets (like HP-UX) which
-   require more than a single breakpoint in their call dummies, and
-   therefore cannot use the DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET
-   mechanism.
-
-   If a target does define DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET,
-   then this default implementation of CALL_DUMMY_HAS_COMPLETED is
-   sufficient.  Else, a target may wish to supply an implementation
-   that works in the presense of multiple breakpoints in its call
-   dummy.  */
-#if !defined(CALL_DUMMY_HAS_COMPLETED)
-#define CALL_DUMMY_HAS_COMPLETED(pc, sp, frame_address) \
-  DEPRECATED_PC_IN_CALL_DUMMY((pc), (sp), (frame_address))
-#endif
-
 /* If STARTUP_WITH_SHELL is set, GDB's "run"
    will attempts to start up the debugee under a shell.
    This is in order for argument-expansion to occur. E.g.,
index 144f778582768eeb327d64b2c52c6a3fdfb1b6d1..74941f9401d858accb2d3568f609a21acd5a5dbf 100644 (file)
@@ -1945,9 +1945,17 @@ The location at which to store the function's return value is unknown.\n";
   /* NOTE: cagney/2003-01-18: Is this silly?  Instead of popping all
      the frames in sequence, should this code just pop the dummy frame
      directly?  */
-  if (CALL_DUMMY_HAS_COMPLETED (read_pc(), read_sp (),
-                               get_frame_base (get_current_frame ())))
+#ifdef DEPRECATED_CALL_DUMMY_HAS_COMPLETED
+  /* Since all up-to-date architectures return direct to the dummy
+     breakpoint address, a dummy frame has, by definition, always
+     completed.  Hence this method is no longer needed.  */
+  if (DEPRECATED_CALL_DUMMY_HAS_COMPLETED (read_pc(), read_sp (),
+                                          get_frame_base (get_current_frame ())))
     frame_pop (get_current_frame ());
+#else
+  if (get_frame_type (get_current_frame ()) == DUMMY_FRAME)
+    frame_pop (get_current_frame ());
+#endif
 
   /* If interactive, print the frame that is now current.  */
   if (from_tty)