aboutsummaryrefslogtreecommitdiff
path: root/gdb/infrun.c
diff options
context:
space:
mode:
authorJim Kingdon <jkingdon@engr.sgi.com>1993-09-18 19:15:36 +0000
committerJim Kingdon <jkingdon@engr.sgi.com>1993-09-18 19:15:36 +0000
commit84d598611e42de0248b0e7689e4ebe062e1699b6 (patch)
tree1c3a237117e6da4d05253598281ac94dab624a43 /gdb/infrun.c
parentfa79d853b89ca298ff6a6b256e610ccc917cd33b (diff)
downloadfsf-binutils-gdb-84d598611e42de0248b0e7689e4ebe062e1699b6.zip
fsf-binutils-gdb-84d598611e42de0248b0e7689e4ebe062e1699b6.tar.gz
fsf-binutils-gdb-84d598611e42de0248b0e7689e4ebe062e1699b6.tar.bz2
* defs.h (make_cleanup): Change PTR to void * when inside PARAMS.
Some of the following is in #ifdef CALL_DUMMY_BREAKPOINT_OFFSET. * breakpoint.h (enum bptype): Add bp_call_dummy. (struct bpstat_what): Add call_dummy field. * infrun.c (wait_for_inferior): Deal with it. * breakpoint.c (bpstat_what): Deal with call dummy breakpoint. * infcmd.c (run_stack_dummy): Set the call dummy breakpoint. * config/sparc/tm-sparc.h: Define CALL_DUMMY_BREAKPOINT_OFFSET.
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r--gdb/infrun.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/gdb/infrun.c b/gdb/infrun.c
index a9d8a64..3656c98 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -721,7 +721,9 @@ wait_for_inferior ()
random_signal
= !(bpstat_explains_signal (stop_bpstat)
|| trap_expected
+#ifndef CALL_DUMMY_BREAKPOINT_OFFSET
|| PC_IN_CALL_DUMMY (stop_pc, stop_sp, stop_frame_address)
+#endif /* No CALL_DUMMY_BREAKPOINT_OFFSET. */
|| (step_range_end && step_resume_breakpoint == NULL));
else
{
@@ -730,7 +732,9 @@ wait_for_inferior ()
/* End of a stack dummy. Some systems (e.g. Sony
news) give another signal besides SIGTRAP,
so check here as well as above. */
+#ifndef CALL_DUMMY_BREAKPOINT_OFFSET
|| PC_IN_CALL_DUMMY (stop_pc, stop_sp, stop_frame_address)
+#endif /* No CALL_DUMMY_BREAKPOINT_OFFSET. */
);
if (!random_signal)
stop_signal = SIGTRAP;
@@ -793,6 +797,14 @@ wait_for_inferior ()
what = bpstat_what (stop_bpstat);
+ if (what.call_dummy)
+ {
+ stop_stack_dummy = 1;
+#ifdef HP_OS_BUG
+ trap_expected_after_continue = 1;
+#endif
+ }
+
switch (what.main_action)
{
case BPSTAT_WHAT_SET_LONGJMP_RESUME:
@@ -887,6 +899,12 @@ wait_for_inferior ()
test for stepping. But, if not stepping,
do not stop. */
+#ifndef CALL_DUMMY_BREAKPOINT_OFFSET
+ /* This is the old way of detecting the end of the stack dummy.
+ An architecture which defines CALL_DUMMY_BREAKPOINT_OFFSET gets
+ handled above. As soon as we can test it on all of them, all
+ architectures should define it. */
+
/* If this is the breakpoint at the end of a stack dummy,
just stop silently, unless the user was doing an si/ni, in which
case she'd better know what she's doing. */
@@ -901,7 +919,8 @@ wait_for_inferior ()
#endif
break;
}
-
+#endif /* No CALL_DUMMY_BREAKPOINT_OFFSET. */
+
if (step_resume_breakpoint)
/* Having a step-resume breakpoint overrides anything
else having to do with stepping commands until
@@ -1081,8 +1100,7 @@ step_into_function:
since on some machines the prologue
is where the new fp value is established. */
step_resume_breakpoint =
- set_momentary_breakpoint (sr_sal, (CORE_ADDR)0,
- bp_step_resume);
+ set_momentary_breakpoint (sr_sal, NULL, bp_step_resume);
if (breakpoints_inserted)
insert_breakpoints ();