* infrun.c (wait_for_inferior): fix stepi/nexti that was broken

by my last edit to this routine.
This commit is contained in:
Stu Grossman 1991-10-22 00:50:58 +00:00
parent 30ff2d72e0
commit b3b39c0c76

View file

@ -508,6 +508,13 @@ child_create_inferior (exec_file, allargs, env)
new_tty_prefork (inferior_io_terminal);
/* It is generally good practice to flush any possible pending stdio
output prior to doing a fork, to avoid the possibility of both the
parent and child flushing the same data after the fork. */
fflush (stdout);
fflush (stderr);
#if defined(USG) && !defined(HAVE_VFORK)
pid = fork ();
#else
@ -762,6 +769,7 @@ wait_for_inferior ()
#ifdef TDESC
extern dc_handle_t tdesc_handle;
#endif
int current_line;
#if 0
/* This no longer works now that read_register is lazy;
@ -773,6 +781,9 @@ wait_for_inferior ()
prev_sp = read_register (SP_REGNUM);
#endif /* 0 */
sal = find_pc_line(prev_pc, 0);
current_line = sal.line;
while (1)
{
/* Clean up saved state that will become invalid. */
@ -1222,11 +1233,29 @@ wait_for_inferior ()
break;
}
}
/* No subroutince call; stop now. */
/* No subroutine call; stop now. */
else
{
stop_step = 1;
break;
if (step_range_end == 1) break; /* Don't do this for stepi/nexti */
/* We've wandered out of the step range (but we haven't done a
subroutine call or return (that's handled elsewhere)). We
don't really want to stop until we encounter the start of a
new statement. If so, we stop. Otherwise, we reset
step_range_start and step_range_end, and just continue. */
sal = find_pc_line(stop_pc, 0);
if (current_line != sal.line
&& stop_pc == sal.pc) {
stop_step = 1;
break;
} else {
/* This is probably not necessary, but it probably makes
stepping more efficient, as we avoid calling find_pc_line()
for each instruction we step over. */
step_range_start = sal.pc;
step_range_end = sal.end;
}
}
}