aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2003-10-31 22:38:22 +0000
committerAndrew Cagney <cagney@redhat.com>2003-10-31 22:38:22 +0000
commite8bcf01f1b65ef438a40698ce2e2a116d9fc3767 (patch)
tree1c350f7df2ba7ec9c4f5ab1c3d994cf26e69e6ff
parent4c05fe5325cd1dc599999f503214fede4875e368 (diff)
downloadgdb-e8bcf01f1b65ef438a40698ce2e2a116d9fc3767.zip
gdb-e8bcf01f1b65ef438a40698ce2e2a116d9fc3767.tar.gz
gdb-e8bcf01f1b65ef438a40698ce2e2a116d9fc3767.tar.bz2
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.
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/config/pa/tm-hppa.h2
-rw-r--r--gdb/inferior.h23
-rw-r--r--gdb/stack.c12
4 files changed, 18 insertions, 26 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index da46584..c97c0dd 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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
diff --git a/gdb/config/pa/tm-hppa.h b/gdb/config/pa/tm-hppa.h
index c6504ab..9d4b134 100644
--- a/gdb/config/pa/tm-hppa.h
+++ b/gdb/config/pa/tm-hppa.h
@@ -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))
diff --git a/gdb/inferior.h b/gdb/inferior.h
index 60191f2..b36dcd4 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -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.,
diff --git a/gdb/stack.c b/gdb/stack.c
index 144f778..74941f9 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -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)