aboutsummaryrefslogtreecommitdiff
path: root/gdb/infcmd.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2009-03-25 21:42:35 +0000
committerPedro Alves <palves@redhat.com>2009-03-25 21:42:35 +0000
commitd729566a19c83c452f3a962182d1c6d349562159 (patch)
tree6e824d4e47df13380876593dfc42b6eb34752612 /gdb/infcmd.c
parentf04c6d38e2d725d7a813af49883eda0b07a91ad7 (diff)
downloadgdb-d729566a19c83c452f3a962182d1c6d349562159.zip
gdb-d729566a19c83c452f3a962182d1c6d349562159.tar.gz
gdb-d729566a19c83c452f3a962182d1c6d349562159.tar.bz2
* infrun.c (normal_stop): Use has_stack_frames instead of
target_has_stack. * mi/mi-main.c (mi_execute_command): Avoid calling inferior_thread when there is no thread selected. (mi_cmd_execute): Don't special case commands that can run without a valid selected thread. * top.c (execute_command): Don't special case commands that can run without a valid selected thread. Use has_stack_frames. * infcmd.c (ensure_valid_thread): New. (continue_1, step_1, jump_command, signal_command): Use it. (detach_command): Error out if there's no selected thread/inferior. * thread.c (print_thread_info): Allow having no thread selected. (switch_to_thread): Don't read the PC if there is no current thread. (do_restore_current_thread_cleanup): Don't record the current frame if there is no current thread. (make_cleanup_restore_current_thread): Don't read frame info if there is no selected thread. (_initialize_thread): Don't mark commands as "no_selected_thread_ok". * frame.c (get_current_frame): Error out if there is no valid selected thread. (has_stack_frames): Return false if there is no valid selected thread. * cli/cli-cmds.c (init_cli_cmds): Don't mark commands as "no_selected_thread_ok". * cli/cli-decode.c (set_cmd_no_selected_thread_ok) (get_cmd_no_selected_thread_ok): Delete. * cli/cli-decode.h (CMD_NO_SELECTED_THREAD_OK): Delete. (set_cmd_no_selected_thread_ok, get_cmd_no_selected_thread_ok): Delete declaration. * stack.c (get_selected_block): Use has_stack_frames.
Diffstat (limited to 'gdb/infcmd.c')
-rw-r--r--gdb/infcmd.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index fcabd3a..9cad3cb 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -617,6 +617,15 @@ proceed_thread_callback (struct thread_info *thread, void *arg)
}
void
+ensure_valid_thread (void)
+{
+ if (ptid_equal (inferior_ptid, null_ptid)
+ || is_exited (inferior_ptid))
+ error (_("\
+Cannot execute this command without a live selected thread."));
+}
+
+void
continue_1 (int all_threads)
{
ERROR_NO_INFERIOR;
@@ -637,6 +646,7 @@ continue_1 (int all_threads)
}
else
{
+ ensure_valid_thread ();
ensure_not_running ();
clear_proceed_status ();
proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
@@ -781,6 +791,7 @@ step_1 (int skip_subroutines, int single_inst, char *count_string)
int thread = -1;
ERROR_NO_INFERIOR;
+ ensure_valid_thread ();
ensure_not_running ();
if (count_string)
@@ -991,6 +1002,7 @@ jump_command (char *arg, int from_tty)
int async_exec = 0;
ERROR_NO_INFERIOR;
+ ensure_valid_thread ();
ensure_not_running ();
/* Find out whether we must run in the background. */
@@ -1092,6 +1104,7 @@ signal_command (char *signum_exp, int from_tty)
dont_repeat (); /* Too dangerous. */
ERROR_NO_INFERIOR;
+ ensure_valid_thread ();
ensure_not_running ();
/* Find out whether we must run in the background. */
@@ -2383,6 +2396,10 @@ void
detach_command (char *args, int from_tty)
{
dont_repeat (); /* Not for the faint of heart. */
+
+ if (ptid_equal (inferior_ptid, null_ptid))
+ error (_("The program is not being run."));
+
target_detach (args, from_tty);
/* If the solist is global across inferiors, don't clear it when we