diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/config/pa/tm-hppa.h | 2 | ||||
-rw-r--r-- | gdb/inferior.h | 23 | ||||
-rw-r--r-- | gdb/stack.c | 12 |
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) |