2004-05-14 Andrew Cagney <cagney@redhat.com>

* infrun.c (handle_inferior_event): Simplify
	STEP_OVER_UNDEBUGGABLE.
This commit is contained in:
Andrew Cagney 2004-05-14 18:45:42 +00:00
parent a99cf92b09
commit 06f32659ed
2 changed files with 10 additions and 64 deletions

View File

@ -1,5 +1,8 @@
2004-05-14 Andrew Cagney <cagney@redhat.com> 2004-05-14 Andrew Cagney <cagney@redhat.com>
* infrun.c (handle_inferior_event): Simplify
STEP_OVER_UNDEBUGGABLE.
* infrun.c (handle_step_into_function): Delete function. * infrun.c (handle_step_into_function): Delete function.
(handle_inferior_event): Inline calls to (handle_inferior_event): Inline calls to
handle_step_into_function. handle_step_into_function.

View File

@ -2353,82 +2353,25 @@ process_event_stop_test:
inferior stopped). Since we want to skip this kind of code, inferior stopped). Since we want to skip this kind of code,
we keep going until the inferior returns from this we keep going until the inferior returns from this
function. */ function. */
/* NOTE: cagney/2004-05-12: This test is performed after the if (step_stop_if_no_debug)
sigtramp test as often sigtramps, while recognized by GDB,
have no symbol information. */
CORE_ADDR real_stop_pc;
if ((step_over_calls == STEP_OVER_NONE)
|| ((step_range_end == 1)
&& in_prologue (prev_pc, ecs->stop_func_start)))
{ {
/* I presume that step_over_calls is only 0 when we're /* If we have no line number and the step-stop-if-no-debug
supposed to be stepping at the assembly language level is set, we stop the step so that the user has a chance to
("stepi"). Just stop. */ switch in assembly mode. */
/* Also, maybe we just did a "nexti" inside a prolog, so we
thought it was a subroutine call but it was not. Stop as
well. FENN */
stop_step = 1; stop_step = 1;
print_stop_reason (END_STEPPING_RANGE, 0); print_stop_reason (END_STEPPING_RANGE, 0);
stop_stepping (ecs); stop_stepping (ecs);
return; return;
} }
else
if (step_over_calls == STEP_OVER_ALL || IGNORE_HELPER_CALL (stop_pc))
{ {
/* We're doing a "next", set a breakpoint at callee's return /* Set a breakpoint at callee's return address (the address
address (the address at which the caller will at which the caller will resume). */
resume). */
insert_step_resume_breakpoint (get_prev_frame (get_current_frame ()), insert_step_resume_breakpoint (get_prev_frame (get_current_frame ()),
ecs); ecs);
keep_going (ecs); keep_going (ecs);
return; return;
} }
/* If we are in a function call trampoline (a stub between the
calling routine and the real function), locate the real
function. That's what tells us (a) whether we want to step
into it at all, and (b) what prologue we want to run to the
end of, if we do step into it. */
real_stop_pc = skip_language_trampoline (stop_pc);
if (real_stop_pc == 0)
real_stop_pc = SKIP_TRAMPOLINE_CODE (stop_pc);
if (real_stop_pc != 0)
ecs->stop_func_start = real_stop_pc;
/* If we have line number information for the function we are
thinking of stepping into, step into it.
If there are several symtabs at that PC (e.g. with include
files), just want to know whether *any* of them have line
numbers. find_pc_line handles this. */
{
struct symtab_and_line tmp_sal;
tmp_sal = find_pc_line (ecs->stop_func_start, 0);
if (tmp_sal.line != 0)
{
step_into_function (ecs);
return;
}
}
/* If we have no line number and the step-stop-if-no-debug is
set, we stop the step so that the user has a chance to switch
in assembly mode. */
if (step_over_calls == STEP_OVER_UNDEBUGGABLE && step_stop_if_no_debug)
{
stop_step = 1;
print_stop_reason (END_STEPPING_RANGE, 0);
stop_stepping (ecs);
return;
}
/* Set a breakpoint at callee's return address (the address at
which the caller will resume). */
insert_step_resume_breakpoint (get_prev_frame (get_current_frame ()), ecs);
keep_going (ecs);
return;
} }
if (frame_id_eq (frame_unwind_id (get_current_frame ()), if (frame_id_eq (frame_unwind_id (get_current_frame ()),