infrun.c:handle_inferior_event: Make process_event_stop_test label a function.

Now that all ecs->random_signal handing is always done before the
'process_event_stop_test' label, we can easily make that a real
function and actually give it a describing comment that somewhat makes
sense.

Reindenting the new function will be handled in a follow up patch.

2013-10-28  Pedro Alves  <palves@redhat.com>

	* infrun.c (process_event_stop_test): New function, factored out
	from handle_inferior_event.
	(handle_inferior_event): 'process_event_stop_test' is now a
	function instead of a goto label -- adjust.
This commit is contained in:
Pedro Alves 2013-10-28 16:39:06 +00:00
parent fcf3daefe6
commit 94c57d6a62
2 changed files with 37 additions and 15 deletions

View File

@ -1,3 +1,10 @@
2013-10-28 Pedro Alves <palves@redhat.com>
* infrun.c (process_event_stop_test): New function, factored out
from handle_inferior_event.
(handle_inferior_event): 'process_event_stop_test' is now a
function instead of a goto label -- adjust.
2013-10-28 Pedro Alves <palves@redhat.com> 2013-10-28 Pedro Alves <palves@redhat.com>
* infrun.c (handle_inferior_event): Move process_event_stop_test * infrun.c (handle_inferior_event): Move process_event_stop_test

View File

@ -2439,6 +2439,7 @@ static void check_exception_resume (struct execution_control_state *,
static void stop_stepping (struct execution_control_state *ecs); static void stop_stepping (struct execution_control_state *ecs);
static void prepare_to_wait (struct execution_control_state *ecs); static void prepare_to_wait (struct execution_control_state *ecs);
static void keep_going (struct execution_control_state *ecs); static void keep_going (struct execution_control_state *ecs);
static void process_event_stop_test (struct execution_control_state *ecs);
static int switch_back_to_stepped_thread (struct execution_control_state *ecs); static int switch_back_to_stepped_thread (struct execution_control_state *ecs);
/* Callback for iterate over threads. If the thread is stopped, but /* Callback for iterate over threads. If the thread is stopped, but
@ -3151,7 +3152,6 @@ handle_inferior_event (struct execution_control_state *ecs)
struct gdbarch *gdbarch; struct gdbarch *gdbarch;
int stopped_by_watchpoint; int stopped_by_watchpoint;
int stepped_after_stopped_by_watchpoint = 0; int stepped_after_stopped_by_watchpoint = 0;
struct symtab_and_line stop_pc_sal;
enum stop_kind stop_soon; enum stop_kind stop_soon;
if (ecs->ws.kind == TARGET_WAITKIND_IGNORE) if (ecs->ws.kind == TARGET_WAITKIND_IGNORE)
@ -3351,7 +3351,8 @@ handle_inferior_event (struct execution_control_state *ecs)
{ {
/* A catchpoint triggered. */ /* A catchpoint triggered. */
ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP; ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP;
goto process_event_stop_test; process_event_stop_test (ecs);
return;
} }
/* If requested, stop when the dynamic linker notifies /* If requested, stop when the dynamic linker notifies
@ -3629,7 +3630,8 @@ Cannot fill $_exitsignal with the correct signal number.\n"));
return; return;
} }
ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP; ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP;
goto process_event_stop_test; process_event_stop_test (ecs);
return;
case TARGET_WAITKIND_VFORK_DONE: case TARGET_WAITKIND_VFORK_DONE:
/* Done with the shared memory region. Re-insert breakpoints in /* Done with the shared memory region. Re-insert breakpoints in
@ -3690,7 +3692,8 @@ Cannot fill $_exitsignal with the correct signal number.\n"));
return; return;
} }
ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP; ecs->event_thread->suspend.stop_signal = GDB_SIGNAL_TRAP;
goto process_event_stop_test; process_event_stop_test (ecs);
return;
/* Be careful not to try to gather much state about a thread /* Be careful not to try to gather much state about a thread
that's in a syscall. It's frequently a losing proposition. */ that's in a syscall. It's frequently a losing proposition. */
@ -3699,9 +3702,9 @@ Cannot fill $_exitsignal with the correct signal number.\n"));
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"infrun: TARGET_WAITKIND_SYSCALL_ENTRY\n"); "infrun: TARGET_WAITKIND_SYSCALL_ENTRY\n");
/* Getting the current syscall number. */ /* Getting the current syscall number. */
if (handle_syscall_event (ecs) != 0) if (handle_syscall_event (ecs) == 0)
process_event_stop_test (ecs);
return; return;
goto process_event_stop_test;
/* Before examining the threads further, step this thread to /* Before examining the threads further, step this thread to
get it entirely out of the syscall. (We get notice of the get it entirely out of the syscall. (We get notice of the
@ -3712,9 +3715,9 @@ Cannot fill $_exitsignal with the correct signal number.\n"));
if (debug_infrun) if (debug_infrun)
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
"infrun: TARGET_WAITKIND_SYSCALL_RETURN\n"); "infrun: TARGET_WAITKIND_SYSCALL_RETURN\n");
if (handle_syscall_event (ecs) != 0) if (handle_syscall_event (ecs) == 0)
process_event_stop_test (ecs);
return; return;
goto process_event_stop_test;
case TARGET_WAITKIND_STOPPED: case TARGET_WAITKIND_STOPPED:
if (debug_infrun) if (debug_infrun)
@ -4403,17 +4406,29 @@ Cannot fill $_exitsignal with the correct signal number.\n"));
} }
return; return;
} }
else
process_event_stop_test (ecs);
}
/* Come here when we've got some debug event / signal we can explain
(IOW, not a random signal), and test whether it should cause a
stop, or whether we should resume the inferior (transparently).
E.g., could be a breakpoint whose condition evaluates false; we
could be still stepping within the line; etc. */
static void
process_event_stop_test (struct execution_control_state *ecs)
{
struct symtab_and_line stop_pc_sal;
struct frame_info *frame;
struct gdbarch *gdbarch;
{ {
/* Handle cases caused by hitting a breakpoint. */ /* Handle cases caused by hitting a breakpoint. */
CORE_ADDR jmp_buf_pc; CORE_ADDR jmp_buf_pc;
struct bpstat_what what; struct bpstat_what what;
process_event_stop_test:
/* Re-fetch current thread's frame in case we did a
"goto process_event_stop_test" above. */
frame = get_current_frame (); frame = get_current_frame ();
gdbarch = get_frame_arch (frame); gdbarch = get_frame_arch (frame);