* infrun.c (wait_for_inferior): fix stepi/nexti that was broken
by my last edit to this routine.
This commit is contained in:
parent
30ff2d72e0
commit
b3b39c0c76
1 changed files with 32 additions and 3 deletions
35
gdb/infrun.c
35
gdb/infrun.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue