diff options
author | Pedro Alves <palves@redhat.com> | 2009-03-25 21:42:35 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2009-03-25 21:42:35 +0000 |
commit | d729566a19c83c452f3a962182d1c6d349562159 (patch) | |
tree | 6e824d4e47df13380876593dfc42b6eb34752612 /gdb/infcmd.c | |
parent | f04c6d38e2d725d7a813af49883eda0b07a91ad7 (diff) | |
download | gdb-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.c | 17 |
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 |