From 18ea5ba4f05d572ec1513a37c22544c6037b21fa Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Fri, 13 Dec 2002 16:26:02 +0000 Subject: [PATCH] 2002-12-13 Andrew Cagney * 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 | 8 ++++++++ gdb/frame.c | 6 ------ gdb/frame.h | 18 ++---------------- gdb/infcmd.c | 38 ++++++++++++++++++-------------------- 4 files changed, 28 insertions(+), 42 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index def947ccdac..f789563b2b2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2002-12-13 Andrew Cagney + + * 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 * frame.c (frame_extra_info_zalloc): New function. diff --git a/gdb/frame.c b/gdb/frame.c index 4ed66b3c410..29ebfbee403 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -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. */ diff --git a/gdb/frame.h b/gdb/frame.h index d42780de55c..5a45502982a 100644 --- a/gdb/frame.h +++ b/gdb/frame.h @@ -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 diff --git a/gdb/infcmd.c b/gdb/infcmd.c index c8b5aa28e82..56bd75d8484 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -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 -- 2.30.2