aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2002-12-13 16:26:02 +0000
committerAndrew Cagney <cagney@redhat.com>2002-12-13 16:26:02 +0000
commit18ea5ba4f05d572ec1513a37c22544c6037b21fa (patch)
treec1422f040ea448054f341e59df03abd1bed19526 /gdb
parent2c517d0eb4a66f872b052972e5a76990efb8cf3f (diff)
downloadfsf-binutils-gdb-18ea5ba4f05d572ec1513a37c22544c6037b21fa.zip
fsf-binutils-gdb-18ea5ba4f05d572ec1513a37c22544c6037b21fa.tar.gz
fsf-binutils-gdb-18ea5ba4f05d572ec1513a37c22544c6037b21fa.tar.bz2
2002-12-13 Andrew Cagney <ac131313@redhat.com>
* 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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/frame.c6
-rw-r--r--gdb/frame.h18
-rw-r--r--gdb/infcmd.c38
4 files changed, 28 insertions, 42 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index def947c..f789563 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2002-12-13 Andrew Cagney <ac131313@redhat.com>
+ * 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 <ac131313@redhat.com>
+
* frame.c (frame_extra_info_zalloc): New function.
* frame.h (frame_extra_info_zalloc): Declare.
diff --git a/gdb/frame.c b/gdb/frame.c
index 4ed66b3..29ebfbe 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 d42780d..5a45502 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 c8b5aa2..56bd75d 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