* cli/cli-decode.h (CMD_ASYNC_OK): New define.
authorTom Tromey <tromey@redhat.com>
Thu, 17 Apr 2008 00:25:01 +0000 (00:25 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 17 Apr 2008 00:25:01 +0000 (00:25 +0000)
(set_cmd_async_ok, get_cmd_async_ok): Declare.
* cli/cli-decode.c (set_cmd_async_ok): New function.
(get_cmd_async_ok): New function.
* cli/cli-cmds.c (init_cli_cmds): Mark "pwd", "help", "info", and
"show" as async-ok.
* top.c (execute_command): Use get_cmd_async_ok.
* infcmd.c: Include cli/cli-decode.h.
(_initialize_infcmd): Mark "interrupt" as async-ok.
* Makefile.in (infcmd.o): Depend on cli_decode_h.

gdb/ChangeLog
gdb/Makefile.in
gdb/cli/cli-cmds.c
gdb/cli/cli-decode.c
gdb/cli/cli-decode.h
gdb/infcmd.c
gdb/top.c

index dbdf4e589a8dcfbaffbe7d8a948914d207d451fc..595f418846fc3a01ffb4f1cc6ecec3205595136d 100644 (file)
@@ -1,3 +1,16 @@
+2008-04-16  Tom Tromey  <tromey@redhat.com>
+
+       * cli/cli-decode.h (CMD_ASYNC_OK): New define.
+       (set_cmd_async_ok, get_cmd_async_ok): Declare.
+       * cli/cli-decode.c (set_cmd_async_ok): New function.
+       (get_cmd_async_ok): New function.
+       * cli/cli-cmds.c (init_cli_cmds): Mark "pwd", "help", "info", and
+       "show" as async-ok.
+       * top.c (execute_command): Use get_cmd_async_ok.
+       * infcmd.c: Include cli/cli-decode.h.
+       (_initialize_infcmd): Mark "interrupt" as async-ok.
+       * Makefile.in (infcmd.o): Depend on cli_decode_h.
+
 2008-04-16  Daniel Jacobowitz  <dan@codesourcery.com>
 
        PR gdb/2445
index 6cd77f1f95b3db0b5a6d0db4e5745c48033ca2f2..bdee30d49691155c28d30b10760a87b4286f453b 100644 (file)
@@ -2314,7 +2314,7 @@ infcmd.o: infcmd.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
        $(objfiles_h) $(completer_h) $(ui_out_h) $(event_top_h) \
        $(parser_defs_h) $(regcache_h) $(reggroups_h) $(block_h) \
        $(solib_h) $(gdb_assert_h) $(observer_h) $(target_descriptions_h) \
-       $(user_regs_h) $(exceptions_h)
+       $(user_regs_h) $(exceptions_h) $(cli_decode_h)
 inf-loop.o: inf-loop.c $(defs_h) $(inferior_h) $(target_h) $(event_loop_h) \
        $(event_top_h) $(inf_loop_h) $(remote_h) $(exceptions_h) \
        $(language_h)
index 96abe8ce710a841e7539d2a0938c7e4aa3235b36..ce7378e730de740c2abd20e396a684f3bf91c92f 100644 (file)
@@ -1202,8 +1202,9 @@ The commands below can be used to select other frames by number or address."),
 
   /* Define general commands. */
 
-  add_com ("pwd", class_files, pwd_command, _("\
+  c = add_com ("pwd", class_files, pwd_command, _("\
 Print working directory.  This is used for your program as well."));
+  set_cmd_async_ok (c);
   c = add_cmd ("cd", class_files, cd_command, _("\
 Set working directory to DIR for debugger and program being debugged.\n\
 The change does not take effect for the program being debugged\n\
@@ -1243,6 +1244,7 @@ when GDB is started."), gdbinit);
   c = add_com ("help", class_support, help_command,
               _("Print list of commands."));
   set_cmd_completer (c, command_completer);
+  set_cmd_async_ok (c);
   add_com_alias ("q", "quit", class_support, 1);
   add_com_alias ("h", "help", class_support, 1);
 
@@ -1268,17 +1270,19 @@ Without an argument, history expansion is enabled."),
                           show_history_expansion_p,
                           &sethistlist, &showhistlist);
 
-  add_prefix_cmd ("info", class_info, info_command, _("\
+  c = add_prefix_cmd ("info", class_info, info_command, _("\
 Generic command for showing things about the program being debugged."),
-                 &infolist, "info ", 0, &cmdlist);
+                     &infolist, "info ", 0, &cmdlist);
+  set_cmd_async_ok (c);
   add_com_alias ("i", "info", class_info, 1);
 
   add_com ("complete", class_obscure, complete_command,
           _("List the completions for the rest of the line as a command."));
 
-  add_prefix_cmd ("show", class_info, show_command,
-                 _("Generic command for showing things about the debugger."),
-                 &showlist, "show ", 0, &cmdlist);
+  c = add_prefix_cmd ("show", class_info, show_command, _("\
+Generic command for showing things about the debugger."),
+                     &showlist, "show ", 0, &cmdlist);
+  set_cmd_async_ok (c);
   /* Another way to get at the same thing.  */
   add_info ("set", show_command, _("Show all GDB settings."));
 
index 65fcdcc69237ec3e6f56b2cd7f9e041c7ac53d17..4e68f93db8f98dd2952ee0e1b348a58c8ad55508 100644 (file)
@@ -105,6 +105,18 @@ get_cmd_context (struct cmd_list_element *cmd)
   return cmd->context;
 }
 
+void
+set_cmd_async_ok (struct cmd_list_element *cmd)
+{
+  cmd->flags |= CMD_ASYNC_OK;
+}
+
+int
+get_cmd_async_ok (struct cmd_list_element *cmd)
+{
+  return cmd->flags & CMD_ASYNC_OK;
+}
+
 enum cmd_types
 cmd_type (struct cmd_list_element *cmd)
 {
index 59a8239c59a8d75edc973f3923a8d928f34db507..f133b3d8fe0129002f41782ba3f91b073b6c23da 100644 (file)
@@ -48,6 +48,9 @@ cmd_types;
 #define DEPRECATED_WARN_USER      0x2
 #define MALLOCED_REPLACEMENT      0x4
 
+/* This flag is set if the command is allowed during async execution.  */
+#define CMD_ASYNC_OK              0x8
+
 struct cmd_list_element
   {
     /* Points to next command in this list.  */
@@ -243,6 +246,13 @@ extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
 extern void set_cmd_context (struct cmd_list_element *cmd, void *context);
 extern void *get_cmd_context (struct cmd_list_element *cmd);
 
+/* Mark command as async-ready; there is no way to disable this once
+   set.  */
+extern void set_cmd_async_ok (struct cmd_list_element *);
+
+/* Return true if command is async-ok.  */
+extern int get_cmd_async_ok (struct cmd_list_element *);
+
 extern struct cmd_list_element *lookup_cmd (char **,
                                            struct cmd_list_element *, char *,
                                            int, int);
index f72cbf444c3fca6b2d20439b8e03fcaf8c2f39d9..2c30b7e3d59426a8bd905d42378bb4a96977c581 100644 (file)
@@ -49,6 +49,7 @@
 #include "target-descriptions.h"
 #include "user-regs.h"
 #include "exceptions.h"
+#include "cli/cli-decode.h"
 
 /* Functions exported for general use, in inferior.h: */
 
@@ -2326,8 +2327,9 @@ You may specify arguments to give to your program, just as with the\n\
 \"run\" command."));
   set_cmd_completer (c, filename_completer);
 
-  add_com ("interrupt", class_run, interrupt_target_command,
-          _("Interrupt the execution of the debugged program."));
+  c = add_com ("interrupt", class_run, interrupt_target_command,
+              _("Interrupt the execution of the debugged program."));
+  set_cmd_async_ok (c);
 
   add_info ("registers", nofp_registers_info, _("\
 List of integer registers and their contents, for selected stack frame.\n\
index 418ff8e95f07f7099fcc0a6faeb2e7fdbddce4e6..d9b5ce403ebb8b6c75cbd32c080afdf3adf6cfb6 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -458,13 +458,8 @@ execute_command (char *p, int from_tty)
 
       /* If the target is running, we allow only a limited set of
          commands. */
-      if (target_can_async_p () && target_executing)
-       if (strcmp (c->name, "help") != 0
-           && strcmp (c->name, "pwd") != 0
-           && strcmp (c->name, "show") != 0
-           && strcmp (c->name, "info") != 0
-           && strcmp (c->name, "interrupt") != 0)
-         error (_("Cannot execute this command while the target is running."));
+      if (target_can_async_p () && target_executing && !get_cmd_async_ok (c))
+       error (_("Cannot execute this command while the target is running."));
 
       /* Pass null arg rather than an empty one.  */
       arg = *p ? p : 0;