This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [non-stop] 03/10 Add non-stop global
- From: Pedro Alves <pedro at codesourcery dot com>
- To: gdb-patches at sourceware dot org
- Date: Wed, 2 Jul 2008 04:30:14 +0100
- Subject: Re: [non-stop] 03/10 Add non-stop global
- References: <200806152204.09250.pedro@codesourcery.com> <20080623011259.GC23201@caradoc.them.org>
A Monday 23 June 2008 02:12:59, Daniel Jacobowitz wrote:
> OK.
Same patch, refreshed against current HEAD.
--
Pedro Alves
2008-07-02 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.
---
gdb/inferior.h | 7 +++++++
gdb/infrun.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+)
Index: src/gdb/inferior.h
===================================================================
--- src.orig/gdb/inferior.h 2008-06-29 22:33:27.000000000 +0100
+++ src/gdb/inferior.h 2008-06-29 22:37:32.000000000 +0100
@@ -137,6 +137,13 @@ extern void proceed (CORE_ADDR, enum tar
over such function. */
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 terminal_save_ours (void);
Index: src/gdb/infrun.c
===================================================================
--- src.orig/gdb/infrun.c 2008-06-29 22:37:24.000000000 +0100
+++ src/gdb/infrun.c 2008-06-29 22:37:32.000000000 +0100
@@ -4461,6 +4461,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
_initialize_infrun (void)
{
@@ -4534,6 +4560,26 @@ When non-zero, displaced stepping specif
show_debug_displaced,
&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;
signal_stop = (unsigned char *) xmalloc (sizeof (signal_stop[0]) * numsigs);
signal_print = (unsigned char *)