This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[non-stop] 03/10 Add non-stop global


This add a non_stop global, and associated "set/show non-stop"
commands.  Split out or core non-stop, because the following
patch uses it.

-- 
Pedro Alves
2008-06-15  Pedro Alves  <pedro@codesourcery.com>

	* 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-12 01:20:06.000000000 +0100
+++ src/gdb/inferior.h	2008-06-12 02:30:58.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-12 01:29:42.000000000 +0100
+++ src/gdb/infrun.c	2008-06-12 02:30:59.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 *)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]