Add non_stop global.

* inferior.h (non_stop): Declare.
	* infrun.c (non_stop, non_stop_1): New.
	(set_non_stop, show_non_stop): New.
	(_initialize_infrun): Add "set/show non-stop" command.
This commit is contained in:
Pedro Alves 2008-07-09 22:27:13 +00:00
parent 3a3e9ee36f
commit ad52ddc6a4
3 changed files with 62 additions and 0 deletions

View file

@ -1,3 +1,12 @@
2008-07-09 Pedro Alves <pedro@codesourcery.com>
Add non_stop global.
* inferior.h (non_stop): Declare.
* infrun.c (non_stop, non_stop_1): New.
(set_non_stop, show_non_stop): New.
(_initialize_infrun): Add "set/show non-stop" command.
2008-07-09 Pedro Alves <pedro@codesourcery.com> 2008-07-09 Pedro Alves <pedro@codesourcery.com>
Adjust fork/vfork/exec to pass ptids around. Adjust fork/vfork/exec to pass ptids around.

View file

@ -137,6 +137,13 @@ extern void proceed (CORE_ADDR, enum target_signal, int);
over such function. */ over such function. */
extern int step_stop_if_no_debug; extern int step_stop_if_no_debug;
/* If set, the inferior should be controlled in non-stop mode. In
this mode, each thread is controlled independently. Execution
commands apply only to the the selected thread by default, and stop
events stop only the thread that had the event -- the other threads
are kept running freely. */
extern int non_stop;
extern void generic_mourn_inferior (void); extern void generic_mourn_inferior (void);
extern void terminal_save_ours (void); extern void terminal_save_ours (void);

View file

@ -4465,6 +4465,32 @@ save_inferior_ptid (void)
} }
int non_stop = 0;
static int non_stop_1 = 0;
static void
set_non_stop (char *args, int from_tty,
struct cmd_list_element *c)
{
if (target_has_execution)
{
non_stop_1 = non_stop;
error (_("Cannot change this setting while the inferior is running."));
}
non_stop = non_stop_1;
}
static void
show_non_stop (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
fprintf_filtered (file,
_("Controlling the inferior in non-stop mode is %s.\n"),
value);
}
void void
_initialize_infrun (void) _initialize_infrun (void)
{ {
@ -4538,6 +4564,26 @@ When non-zero, displaced stepping specific debugging is enabled."),
show_debug_displaced, show_debug_displaced,
&setdebuglist, &showdebuglist); &setdebuglist, &showdebuglist);
add_setshow_boolean_cmd ("non-stop", no_class,
&non_stop_1, _("\
Set whether gdb controls the inferior in non-stop mode."), _("\
Show whether gdb controls the inferior in non-stop mode."), _("\
When debugging a multi-threaded program and this setting is\n\
off (the default, also called all-stop mode), when one thread stops\n\
(for a breakpoint, watchpoint, exception, or similar events), GDB stops\n\
all other threads in the program while you interact with the thread of\n\
interest. When you continue or step a thread, you can allow the other\n\
threads to run, or have them remain stopped, but while you inspect any\n\
thread's state, all threads stop.\n\
\n\
In non-stop mode, when one thread stops, other threads can continue\n\
to run freely. You'll be able to step each thread independently,\n\
leave it stopped or free to run as needed."),
set_non_stop,
show_non_stop,
&setlist,
&showlist);
numsigs = (int) TARGET_SIGNAL_LAST; numsigs = (int) TARGET_SIGNAL_LAST;
signal_stop = (unsigned char *) xmalloc (sizeof (signal_stop[0]) * numsigs); signal_stop = (unsigned char *) xmalloc (sizeof (signal_stop[0]) * numsigs);
signal_print = (unsigned char *) signal_print = (unsigned char *)