diff options
author | Pedro Alves <pedro@codesourcery.com> | 2008-07-09 22:42:43 +0000 |
---|---|---|
committer | Pedro Alves <pedro@codesourcery.com> | 2008-07-09 22:42:43 +0000 |
commit | d3003b46346126387a2682f686be592ce6aea9aa (patch) | |
tree | 4c553bc2af0302853f8d8a2d6de729b20facf53c /gdb/infcmd.c | |
parent | 37ea67e612e9f286ca331ce1ef796b6bcd3b2916 (diff) | |
download | gdb-d3003b46346126387a2682f686be592ce6aea9aa.tar.gz |
Non-stop inferior control.
* infrun.c (resume): In non-stop mode, always resume just one
thread.
(proceed): Don't call prepare_to_proceed in non-stop mode.
(fetch_inferior_event): In non-stop mode, switch context before
handling the event.
(error_is_running, ensure_not_running): New.
(handle_inferior_event): In non-stop mode: Mark only the event
thread as stopped. Require that the target module manages adding
threads to the thread list. Assert that there isn't a
deferred_step_ptid set. Don't switch to infwait_thread_hop_state.
(normal_stop): Only mark not-running if inferior hasn't exited.
In non-stop mode, only mark the event thread.
* thread.c:Include "cli/cli-decode.h".
(print_thread_info): Don't read from a running thread.
Output "(running)" if thread is running.
(switch_to_thread): Don't read stop_pc if thread is executing.
(do_restore_current_thread_cleanup): Don't write to a running
thread.
(thread_apply_all_command): Don't read from a running thread. In
non-stop mode, do a full context-switch instead of just switching
threads.
(thread_apply_command): In non-stop mode, do a full context-switch
instead of just switching threads.
(do_captured_thread_select): Likewise. Inform user if selected
thread is running.
(_initialize_thread): Mark "info threads" and "thread" and
async_ok.
* inf-loop.c (inferior_event_handler): In non-stop mode, don't
unregister the target from the event loop.
* infcmd.c (continue_command, step_1, jump_command)
(signal_command): Ensure the selected thread isn't running.
(interrupt_target_command): In non-stop mode, interrupt only the
selected thread.
* inferior.h (error_is_running, ensure_not_running): Declare.
* target.h (struct target_ops): Add ptid argument to the to_stop
member.
(target_stop): Add ptid_t argument.
* target.c (update_current_target): Add ptid argument to to_stop's
type.
(debug_to_stop): Add ptid_t argument.
(debug_to_rcmd): Set to_stop_ptid.
* remote.c (remote_stop): Add ptid_t argument.
(async_remote_interrupt): Add inferior_ptid to target_stop.
* inf-ptrace.c (inf_ptrace_stop): Add ptid argument.
* Makefile.in (thread.o): Depend on $(cli_decode_h).
Diffstat (limited to 'gdb/infcmd.c')
-rw-r--r-- | gdb/infcmd.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gdb/infcmd.c b/gdb/infcmd.c index fead6d16a7a..db03cf27938 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -613,6 +613,7 @@ continue_command (char *proc_count_exp, int from_tty) { int async_exec = 0; ERROR_NO_INFERIOR; + ensure_not_running (); /* Find out whether we must run in the background. */ if (proc_count_exp != NULL) @@ -714,6 +715,7 @@ step_1 (int skip_subroutines, int single_inst, char *count_string) int thread = -1; ERROR_NO_INFERIOR; + ensure_not_running (); if (count_string) async_exec = strip_bg_char (&count_string); @@ -936,6 +938,7 @@ jump_command (char *arg, int from_tty) int async_exec = 0; ERROR_NO_INFERIOR; + ensure_not_running (); /* Find out whether we must run in the background. */ if (arg != NULL) @@ -1036,6 +1039,7 @@ signal_command (char *signum_exp, int from_tty) dont_repeat (); /* Too dangerous. */ ERROR_NO_INFERIOR; + ensure_not_running (); /* Find out whether we must run in the background. */ if (signum_exp != NULL) @@ -2102,7 +2106,8 @@ interrupt_target_command (char *args, int from_tty) if (target_can_async_p ()) { dont_repeat (); /* Not for the faint of heart */ - target_stop (); + + target_stop (inferior_ptid); } } |