Change how DWARF index writer finds address map
[deliverable/binutils-gdb.git] / gdb / command.h
index 71ad71d953819a103362c5852316beb0445d9e01..79e5017ff7aaee1b3e0fe2366e6a8915b1489437 100644 (file)
@@ -1,6 +1,6 @@
 /* Header file for command creation.
 
-   Copyright (C) 1986-2017 Free Software Foundation, Inc.
+   Copyright (C) 1986-2021 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -18,8 +18,8 @@
 #if !defined (COMMAND_H)
 #define COMMAND_H 1
 
-#include "gdb_vecs.h"
-#include "common/scoped_restore.h"
+#include "gdbsupport/gdb_vecs.h"
+#include "gdbsupport/scoped_restore.h"
 
 struct completion_tracker;
 
@@ -29,41 +29,53 @@ struct completion_tracker;
 /* Command classes are top-level categories into which commands are
    broken down for "help" purposes.
 
-   Notes on classes: class_alias is for alias commands which are not
-   abbreviations of the original command.  class-pseudo is for
-   commands which are not really commands nor help topics ("stop").  */
+   The class_alias is used for the user-defined aliases, defined
+   using the "alias" command.
+
+   Aliases pre-defined by GDB (e.g. the alias "bt" of the "backtrace" command)
+   are not using the class_alias.
+   Different pre-defined aliases of the same command do not necessarily
+   have the same classes.  For example, class_stack is used for the
+   "backtrace" and its "bt" alias", while "info stack" (also an alias
+   of "backtrace" uses class_info.  */
 
 enum command_class
 {
-  /* Special args to help_list */
-  class_deprecated = -3, all_classes = -2, all_commands = -1,
+  /* Classes of commands followed by a comment giving the name
+     to use in "help <classname>".
+     Note that help accepts unambiguous abbreviated class names.  */
+
+  /* Special classes to help_list */
+  class_deprecated = -3,
+  all_classes = -2,  /* help without <classname> */
+  all_commands = -1, /* all */
+
   /* Classes of commands */
-  no_class = -1, class_run = 0, class_vars, class_stack, class_files,
-  class_support, class_info, class_breakpoint, class_trace,
-  class_alias, class_bookmark, class_obscure, class_maintenance,
-  class_pseudo, class_tui, class_user, class_xdb,
-  no_set_class /* Used for "show" commands that have no corresponding
-                  "set" command.  */
+  no_class = -1,
+  class_run = 0,     /* running */
+  class_vars,        /* data */
+  class_stack,       /* stack */
+  class_files,       /* files */
+  class_support,     /* support */
+  class_info,        /* status */
+  class_breakpoint,  /* breakpoints */
+  class_trace,       /* tracepoints */
+  class_alias,       /* aliases */
+  class_bookmark,
+  class_obscure,     /* obscure */
+  class_maintenance, /* internals */
+  class_tui,         /* text-user-interface */
+  class_user,        /* user-defined */
+
+  /* Used for "show" commands that have no corresponding "set" command.  */
+  no_set_class
 };
 
-/* FIXME: cagney/2002-03-17: Once cmd_type() has been removed, ``enum
-   cmd_types'' can be moved from "command.h" to "cli-decode.h".  */
-/* Not a set/show command.  Note that some commands which begin with
-   "set" or "show" might be in this category, if their syntax does
-   not fall into one of the following categories.  */
-typedef enum cmd_types
-  {
-    not_set_cmd,
-    set_cmd,
-    show_cmd
-  }
-cmd_types;
-
 /* Types of "set" or "show" command.  */
 typedef enum var_types
   {
-    /* "on" or "off".  *VAR is an integer which is nonzero for on,
-       zero for off.  */
+    /* "on" or "off".  *VAR is a bool which is true for on,
+       false for off.  */
     var_boolean,
 
     /* "on" / "true" / "enable" or "off" / "false" / "disable" or
@@ -116,7 +128,6 @@ var_types;
 /* This structure records one command'd definition.  */
 struct cmd_list_element;
 
-typedef void cmd_cfunc_ftype (char *args, int from_tty);
 typedef void cmd_const_cfunc_ftype (const char *args, int from_tty);
 
 /* This structure specifies notifications to be suppressed by a cli
@@ -134,12 +145,15 @@ extern struct cli_suppress_notification cli_suppress_notification;
 
 /* API to the manipulation of command lists.  */
 
-extern int valid_user_defined_cmd_name_p (const char *name);
+/* Return TRUE if NAME is a valid user-defined command name.
+   This is a stricter subset of all gdb commands,
+   see find_command_name_length.  */
 
-extern struct cmd_list_element *add_cmd (const char *, enum command_class,
-                                        cmd_cfunc_ftype *fun,
-                                        const char *,
-                                        struct cmd_list_element **);
+extern bool valid_user_defined_cmd_name_p (const char *name);
+
+/* Return TRUE if C is a valid command character.  */
+
+extern bool valid_cmd_char_p (int c);
 
 /* Const-correct variant of the above.  */
 
@@ -154,6 +168,12 @@ extern struct cmd_list_element *add_cmd (const char *, enum command_class,
                                         const char *,
                                         struct cmd_list_element **);
 
+extern struct cmd_list_element *add_cmd_suppress_notification
+                       (const char *name, enum command_class theclass,
+                        cmd_const_cfunc_ftype *fun, const char *doc,
+                        struct cmd_list_element **list,
+                        int *suppress_notification);
+
 extern struct cmd_list_element *add_alias_cmd (const char *, const char *,
                                               enum command_class, int,
                                               struct cmd_list_element **);
@@ -171,6 +191,28 @@ extern struct cmd_list_element *add_prefix_cmd (const char *, enum command_class
                                                const char *, int,
                                                struct cmd_list_element **);
 
+/* Like add_prefix_cmd, but sets the callback to a function that
+   simply calls help_list.  */
+
+extern struct cmd_list_element *add_basic_prefix_cmd
+  (const char *, enum command_class, const char *, struct cmd_list_element **,
+   const char *, int, struct cmd_list_element **);
+
+/* Like add_prefix_cmd, but useful for "show" prefixes.  This sets the
+   callback to a function that simply calls cmd_show_list.  */
+
+extern struct cmd_list_element *add_show_prefix_cmd
+  (const char *, enum command_class, const char *, struct cmd_list_element **,
+   const char *, int, struct cmd_list_element **);
+
+extern struct cmd_list_element *add_prefix_cmd_suppress_notification
+                       (const char *name, enum command_class theclass,
+                        cmd_const_cfunc_ftype *fun,
+                        const char *doc, struct cmd_list_element **prefixlist,
+                        const char *prefixname, int allow_unknown,
+                        struct cmd_list_element **list,
+                        int *suppress_notification);
+
 extern struct cmd_list_element *add_abbrev_prefix_cmd (const char *,
                                                       enum command_class,
                                                       cmd_const_cfunc_ftype *fun,
@@ -180,20 +222,10 @@ extern struct cmd_list_element *add_abbrev_prefix_cmd (const char *,
                                                       struct cmd_list_element
                                                       **);
 
-/* Set the commands corresponding callback.  */
-
-extern void set_cmd_cfunc (struct cmd_list_element *cmd,
-                          cmd_cfunc_ftype *cfunc);
-
-/* Const-correct variant of the above.  */
-
-extern void set_cmd_cfunc (struct cmd_list_element *cmd,
-                          cmd_const_cfunc_ftype *cfunc);
-
-typedef void cmd_sfunc_ftype (char *args, int from_tty,
-                             struct cmd_list_element *c);
+typedef void cmd_const_sfunc_ftype (const char *args, int from_tty,
+                                   struct cmd_list_element *c);
 extern void set_cmd_sfunc (struct cmd_list_element *cmd,
-                          cmd_sfunc_ftype *sfunc);
+                          cmd_const_sfunc_ftype *sfunc);
 
 /* A completion routine.  Add possible completions to tracker.
 
@@ -222,8 +254,6 @@ extern void set_cmd_completer_handle_brkchars (struct cmd_list_element *,
 
 /* HACK: cagney/2002-02-23: Code, mostly in tracepoints.c, grubs
    around in cmd objects to test the value of the commands sfunc().  */
-extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
-                        cmd_cfunc_ftype *cfun);
 extern int cmd_cfunc_eq (struct cmd_list_element *cmd,
                         cmd_const_cfunc_ftype *cfun);
 
@@ -239,26 +269,67 @@ extern void *get_cmd_context (struct cmd_list_element *cmd);
 extern void execute_cmd_pre_hook (struct cmd_list_element *cmd);
 extern void execute_cmd_post_hook (struct cmd_list_element *cmd);
 
-/* Return the type of the command.  */
-extern enum cmd_types cmd_type (struct cmd_list_element *cmd);
-
 /* Flag for an ambiguous cmd_list result.  */
 #define CMD_LIST_AMBIGUOUS ((struct cmd_list_element *) -1)
 
 extern struct cmd_list_element *lookup_cmd (const char **,
                                            struct cmd_list_element *,
                                            const char *,
+                                           std::string *,
                                            int, int);
 
-extern struct cmd_list_element *lookup_cmd_1 (const char **,
-                                             struct cmd_list_element *,
-                                             struct cmd_list_element **,
-                                             int);
+/* This routine takes a line of TEXT and a CLIST in which to start the
+   lookup.  When it returns it will have incremented the text pointer past
+   the section of text it matched, set *RESULT_LIST to point to the list in
+   which the last word was matched, and will return a pointer to the cmd
+   list element which the text matches.  It will return NULL if no match at
+   all was possible.  It will return -1 (cast appropriately, ick) if ambigous
+   matches are possible; in this case *RESULT_LIST will be set to point to
+   the list in which there are ambiguous choices (and *TEXT will be set to
+   the ambiguous text string).
+
+   if DEFAULT_ARGS is not null, *DEFAULT_ARGS is set to the found command
+   default args (possibly empty).
+
+   If the located command was an abbreviation, this routine returns the base
+   command of the abbreviation.  Note that *DEFAULT_ARGS will contain the
+   default args defined for the alias.
+
+   It does no error reporting whatsoever; control will always return
+   to the superior routine.
+
+   In the case of an ambiguous return (-1), *RESULT_LIST will be set to point
+   at the prefix_command (ie. the best match) *or* (special case) will be NULL
+   if no prefix command was ever found.  For example, in the case of "info a",
+   "info" matches without ambiguity, but "a" could be "args" or "address", so
+   *RESULT_LIST is set to the cmd_list_element for "info".  So in this case
+   RESULT_LIST should not be interpreted as a pointer to the beginning of a
+   list; it simply points to a specific command.  In the case of an ambiguous
+   return *TEXT is advanced past the last non-ambiguous prefix (e.g.
+   "info t" can be "info types" or "info target"; upon return *TEXT has been
+   advanced past "info ").
+
+   If RESULT_LIST is NULL, don't set *RESULT_LIST (but don't otherwise
+   affect the operation).
+
+   This routine does *not* modify the text pointed to by TEXT.
+
+   If IGNORE_HELP_CLASSES is nonzero, ignore any command list elements which
+   are actually help classes rather than commands (i.e. the function field of
+   the struct cmd_list_element is NULL).
+
+   When LOOKUP_FOR_COMPLETION_P is true the completion is being requested
+   for the completion engine, no warnings should be printed.  */
+
+extern struct cmd_list_element *lookup_cmd_1
+       (const char **text, struct cmd_list_element *clist,
+        struct cmd_list_element **result_list, std::string *default_args,
+        int ignore_help_classes, bool lookup_for_completion_p = false);
 
 extern struct cmd_list_element *deprecate_cmd (struct cmd_list_element *,
                                               const char * );
 
-extern void deprecated_cmd_warning (const char *);
+extern void deprecated_cmd_warning (const char *, struct cmd_list_element *);
 
 extern int lookup_cmd_composition (const char *text,
                                   struct cmd_list_element **alias,
@@ -266,7 +337,7 @@ extern int lookup_cmd_composition (const char *text,
                                   struct cmd_list_element **cmd);
 
 extern struct cmd_list_element *add_com (const char *, enum command_class,
-                                        cmd_cfunc_ftype *fun,
+                                        cmd_const_cfunc_ftype *fun,
                                         const char *);
 
 extern struct cmd_list_element *add_com_alias (const char *, const char *,
@@ -274,11 +345,11 @@ extern struct cmd_list_element *add_com_alias (const char *, const char *,
 
 extern struct cmd_list_element *add_com_suppress_notification
                       (const char *name, enum command_class theclass,
-                       cmd_cfunc_ftype *fun, const char *doc,
+                       cmd_const_cfunc_ftype *fun, const char *doc,
                        int *supress_notification);
 
 extern struct cmd_list_element *add_info (const char *,
-                                         cmd_cfunc_ftype *fun,
+                                         cmd_const_cfunc_ftype *fun,
                                          const char *);
 
 extern struct cmd_list_element *add_info_alias (const char *, const char *,
@@ -315,10 +386,11 @@ extern void add_setshow_enum_cmd (const char *name,
                                  const char *set_doc,
                                  const char *show_doc,
                                  const char *help_doc,
-                                 cmd_sfunc_ftype *set_func,
+                                 cmd_const_sfunc_ftype *set_func,
                                  show_value_ftype *show_func,
                                  struct cmd_list_element **set_list,
-                                 struct cmd_list_element **show_list);
+                                 struct cmd_list_element **show_list,
+                                 void *context = nullptr);
 
 extern void add_setshow_auto_boolean_cmd (const char *name,
                                          enum command_class theclass,
@@ -326,20 +398,21 @@ extern void add_setshow_auto_boolean_cmd (const char *name,
                                          const char *set_doc,
                                          const char *show_doc,
                                          const char *help_doc,
-                                         cmd_sfunc_ftype *set_func,
+                                         cmd_const_sfunc_ftype *set_func,
                                          show_value_ftype *show_func,
                                          struct cmd_list_element **set_list,
                                          struct cmd_list_element **show_list);
 
-extern void add_setshow_boolean_cmd (const char *name,
-                                    enum command_class theclass,
-                                    int *var,
-                                    const char *set_doc, const char *show_doc,
-                                    const char *help_doc,
-                                    cmd_sfunc_ftype *set_func,
-                                    show_value_ftype *show_func,
-                                    struct cmd_list_element **set_list,
-                                    struct cmd_list_element **show_list);
+extern cmd_list_element *
+  add_setshow_boolean_cmd (const char *name,
+                          enum command_class theclass,
+                          bool *var,
+                          const char *set_doc, const char *show_doc,
+                          const char *help_doc,
+                          cmd_const_sfunc_ftype *set_func,
+                          show_value_ftype *show_func,
+                          struct cmd_list_element **set_list,
+                          struct cmd_list_element **show_list);
 
 extern void add_setshow_filename_cmd (const char *name,
                                      enum command_class theclass,
@@ -347,7 +420,7 @@ extern void add_setshow_filename_cmd (const char *name,
                                      const char *set_doc,
                                      const char *show_doc,
                                      const char *help_doc,
-                                     cmd_sfunc_ftype *set_func,
+                                     cmd_const_sfunc_ftype *set_func,
                                      show_value_ftype *show_func,
                                      struct cmd_list_element **set_list,
                                      struct cmd_list_element **show_list);
@@ -358,7 +431,7 @@ extern void add_setshow_string_cmd (const char *name,
                                    const char *set_doc,
                                    const char *show_doc,
                                    const char *help_doc,
-                                   cmd_sfunc_ftype *set_func,
+                                   cmd_const_sfunc_ftype *set_func,
                                    show_value_ftype *show_func,
                                    struct cmd_list_element **set_list,
                                    struct cmd_list_element **show_list);
@@ -370,7 +443,7 @@ extern struct cmd_list_element *add_setshow_string_noescape_cmd
                       const char *set_doc,
                       const char *show_doc,
                       const char *help_doc,
-                      cmd_sfunc_ftype *set_func,
+                      cmd_const_sfunc_ftype *set_func,
                       show_value_ftype *show_func,
                       struct cmd_list_element **set_list,
                       struct cmd_list_element **show_list);
@@ -381,7 +454,7 @@ extern void add_setshow_optional_filename_cmd (const char *name,
                                               const char *set_doc,
                                               const char *show_doc,
                                               const char *help_doc,
-                                              cmd_sfunc_ftype *set_func,
+                                              cmd_const_sfunc_ftype *set_func,
                                               show_value_ftype *show_func,
                                               struct cmd_list_element **set_list,
                                               struct cmd_list_element **show_list);
@@ -392,7 +465,7 @@ extern void add_setshow_integer_cmd (const char *name,
                                     const char *set_doc,
                                     const char *show_doc,
                                     const char *help_doc,
-                                    cmd_sfunc_ftype *set_func,
+                                    cmd_const_sfunc_ftype *set_func,
                                     show_value_ftype *show_func,
                                     struct cmd_list_element **set_list,
                                     struct cmd_list_element **show_list);
@@ -403,7 +476,7 @@ extern void add_setshow_uinteger_cmd (const char *name,
                                      const char *set_doc,
                                      const char *show_doc,
                                      const char *help_doc,
-                                     cmd_sfunc_ftype *set_func,
+                                     cmd_const_sfunc_ftype *set_func,
                                      show_value_ftype *show_func,
                                      struct cmd_list_element **set_list,
                                      struct cmd_list_element **show_list);
@@ -414,7 +487,7 @@ extern void add_setshow_zinteger_cmd (const char *name,
                                      const char *set_doc,
                                      const char *show_doc,
                                      const char *help_doc,
-                                     cmd_sfunc_ftype *set_func,
+                                     cmd_const_sfunc_ftype *set_func,
                                      show_value_ftype *show_func,
                                      struct cmd_list_element **set_list,
                                      struct cmd_list_element **show_list);
@@ -425,7 +498,7 @@ extern void add_setshow_zuinteger_cmd (const char *name,
                                       const char *set_doc,
                                       const char *show_doc,
                                       const char *help_doc,
-                                      cmd_sfunc_ftype *set_func,
+                                      cmd_const_sfunc_ftype *set_func,
                                       show_value_ftype *show_func,
                                       struct cmd_list_element **set_list,
                                       struct cmd_list_element **show_list);
@@ -437,24 +510,66 @@ extern void
                                       const char *set_doc,
                                       const char *show_doc,
                                       const char *help_doc,
-                                      cmd_sfunc_ftype *set_func,
+                                      cmd_const_sfunc_ftype *set_func,
                                       show_value_ftype *show_func,
                                       struct cmd_list_element **set_list,
                                       struct cmd_list_element **show_list);
 
 /* Do a "show" command for each thing on a command list.  */
 
-extern void cmd_show_list (struct cmd_list_element *, int, const char *);
+extern void cmd_show_list (struct cmd_list_element *, int);
 
 /* Used everywhere whenever at least one parameter is required and
    none is specified.  */
 
 extern void error_no_arg (const char *) ATTRIBUTE_NORETURN;
 
-extern void dont_repeat (void);
+
+/* Command line saving and repetition.
+   Each input line executed is saved to possibly be repeated either
+   when the user types an empty line, or be repeated by a command
+   that wants to repeat the previously executed command.  The below
+   functions control command repetition.  */
+
+/* Commands call dont_repeat if they do not want to be repeated by null
+   lines or by repeat_previous ().  */
+
+extern void dont_repeat ();
+
+/* Commands call repeat_previous if they want to repeat the previous
+   command.  Such commands that repeat the previous command must
+   indicate to not repeat themselves, to avoid recursive repeat.
+   repeat_previous marks the current command as not repeating, and
+   ensures get_saved_command_line returns the previous command, so
+   that the currently executing command can repeat it.  If there's no
+   previous command, throws an error.  Otherwise, returns the result
+   of get_saved_command_line, which now points at the command to
+   repeat.  */
+
+extern const char *repeat_previous ();
+
+/* Prevent dont_repeat from working, and return a cleanup that
+   restores the previous state.  */
 
 extern scoped_restore_tmpl<int> prevent_dont_repeat (void);
 
+/* Set the arguments that will be passed if the current command is
+   repeated.  Note that the passed-in string must be a constant.  */
+
+extern void set_repeat_arguments (const char *args);
+
+/* Returns the saved command line to repeat.
+   When a command is being executed, this is the currently executing
+   command line, unless the currently executing command has called
+   repeat_previous (): in this case, get_saved_command_line returns
+   the previously saved command line.  */
+
+extern char *get_saved_command_line ();
+
+/* Takes a copy of CMD, for possible repetition.  */
+
+extern void save_command_line (const char *cmd);
+
 /* Used to mark commands that don't do anything.  If we just leave the
    function field NULL, the command is interpreted as a help topic, or
    as a class of commands.  */
@@ -466,6 +581,6 @@ extern int cmd_func_p (struct cmd_list_element *cmd);
 
 /* Call the command function.  */
 extern void cmd_func (struct cmd_list_element *cmd,
-                     char *args, int from_tty);
+                     const char *args, int from_tty);
 
 #endif /* !defined (COMMAND_H) */
This page took 0.029021 seconds and 4 git commands to generate.