X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fcommand.h;h=da1c8d48a7b7c62f800d706cbab1e8124db77eb9;hb=50aeff07f4ff130053310127b1522b3c7f15a230;hp=5a209234e08e8b1f3048f96eb44ba7dc7ced4b71;hpb=5b64ad42d36e6d487e1f7287d37fbc243a178e72;p=binutils-gdb.git
diff --git a/gdb/command.h b/gdb/command.h
index 5a209234e08..da1c8d48a7b 100644
--- a/gdb/command.h
+++ b/gdb/command.h
@@ -1,259 +1,380 @@
-/* Header file for command-reading library command.c.
- Copyright (C) 1986, 1989, 1990 Free Software Foundation, Inc.
+/* Header file for command creation.
-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
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ Copyright (C) 1986, 1989-1995, 1999-2000, 2002, 2004, 2007-2012 Free
+ Software Foundation, Inc.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ 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
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see . */
#if !defined (COMMAND_H)
#define COMMAND_H 1
+/* This file defines the public interface for any code wanting to
+ create commands. */
+
+/* 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"). */
+
+enum command_class
+{
+ /* Special args to help_list */
+ class_deprecated = -3, all_classes = -2, all_commands = -1,
+ /* 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. */
+};
+
+/* 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;
+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. */
- var_boolean,
- /* Unsigned Integer. *VAR is an unsigned int. The user can type 0
- to mean "unlimited", which is stored in *VAR as UINT_MAX. */
- var_uinteger,
-
- /* Like var_uinteger but signed. *VAR is an int. The user can type 0
- to mean "unlimited", which is stored in *VAR as INT_MAX. */
- var_integer,
-
- /* String which the user enters with escapes (e.g. the user types \n and
- it is a real newline in the stored string).
- *VAR is a malloc'd string, or NULL if the string is empty. */
- var_string,
- /* String which stores what the user types verbatim.
- *VAR is a malloc'd string, or NULL if the string is empty. */
- var_string_noescape,
- /* String which stores a filename.
- *VAR is a malloc'd string, or NULL if the string is empty. */
- var_filename,
- /* ZeroableInteger. *VAR is an int. Like Unsigned Integer except
- that zero really means zero. */
- var_zinteger,
- /* Enumerated type. Can only have one of the specified values. *VAR is a
- char pointer to the name of the element that we find. */
- var_enum
-} var_types;
-
-/* This structure records one command'd definition. */
-
-struct cmd_list_element
+typedef enum var_types
{
- /* Points to next command in this list. */
- struct cmd_list_element *next;
-
- /* Name of this command. */
- char *name;
-
- /* Command class; class values are chosen by application program. */
- enum command_class class;
-
- /* Function definition of this command.
- NO_FUNCTION for command class names and for help topics that
- are not really commands. */
- union
- {
- /* If type is not_set_cmd, call it like this: */
- void (*cfunc) PARAMS ((char *args, int from_tty));
-
- /* If type is cmd_set or show_cmd, first set the variables, and
- then call this. */
- void (*sfunc) PARAMS ((char *args, int from_tty,
- struct cmd_list_element *c));
- } function;
-# define NO_FUNCTION ((void (*) PARAMS((char *args, int from_tty))) 0)
-
- /* Documentation of this command (or help topic).
- First line is brief documentation; remaining lines form, with it,
- the full documentation. First line should end with a period.
- Entire string should also end with a period, not a newline. */
- char *doc;
-
- /* Hook for another command to be executed before this command. */
- struct cmd_list_element *hook;
-
- /* Nonzero identifies a prefix command. For them, the address
- of the variable containing the list of subcommands. */
- struct cmd_list_element **prefixlist;
-
- /* For prefix commands only:
- String containing prefix commands to get here: this one
- plus any others needed to get to it. Should end in a space.
- It is used before the word "command" in describing the
- commands reached through this prefix. */
- char *prefixname;
-
- /* For prefix commands only:
- nonzero means do not get an error if subcommand is not
- recognized; call the prefix's own function in that case. */
- char allow_unknown;
-
- /* Nonzero says this is an abbreviation, and should not
- be mentioned in lists of commands.
- This allows "br" to complete to "break", which it
- otherwise wouldn't. */
- char abbrev_flag;
-
- /* Completion routine for this command. TEXT is the text beyond
- what was matched for the command itself (leading whitespace is
- skipped). It stops where we are supposed to stop completing
- (rl_point) and is '\0' terminated.
-
- Return value is a malloc'd vector of pointers to possible completions
- terminated with NULL. If there are no completions, returning a pointer
- to a NULL would work but returning NULL itself is also valid.
- WORD points in the same buffer as TEXT, and completions should be
- returned relative to this position. For example, suppose TEXT is "foo"
- and we want to complete to "foobar". If WORD is "oo", return
- "oobar"; if WORD is "baz/foo", return "baz/foobar". */
- char ** (*completer) PARAMS ((char *text, char *word));
-
- /* Type of "set" or "show" command (or SET_NOT_SET if not "set"
- or "show"). */
- cmd_types type;
-
- /* Pointer to variable affected by "set" and "show". Doesn't matter
- if type is not_set. */
- char *var;
-
- /* What kind of variable is *VAR? */
- var_types var_type;
-
- /* Pointer to NULL terminated list of enumerated values (like argv). */
- char **enums;
-
- /* Pointer to command strings of user-defined commands */
- struct command_line *user_commands;
-
- /* Pointer to command that is hooked by this one,
- so the hook can be removed when this one is deleted. */
- struct cmd_list_element *hookee;
-
- /* Pointer to command that is aliased by this one, so the
- aliased command can be located in case it has been hooked. */
- struct cmd_list_element *cmd_pointer;
- };
-
-/* Forward-declarations of the entry-points of command.c. */
-
-extern struct cmd_list_element *
-add_cmd PARAMS ((char *, enum command_class, void (*fun) (char *, int),
- char *, struct cmd_list_element **));
-
-extern struct cmd_list_element *
-add_alias_cmd PARAMS ((char *, char *, enum command_class, int,
- struct cmd_list_element **));
-
-extern struct cmd_list_element *
-add_prefix_cmd PARAMS ((char *, enum command_class, void (*fun) (char *, int),
- char *, struct cmd_list_element **, char *, int,
- struct cmd_list_element **));
-
-extern struct cmd_list_element *
-add_abbrev_prefix_cmd PARAMS ((char *, enum command_class,
- void (*fun) (char *, int), char *,
- struct cmd_list_element **, char *, int,
- struct cmd_list_element **));
-
-extern struct cmd_list_element *
-lookup_cmd PARAMS ((char **, struct cmd_list_element *, char *, int, int));
-
-extern struct cmd_list_element *
-lookup_cmd_1 PARAMS ((char **, struct cmd_list_element *,
- struct cmd_list_element **, int));
-
-extern void
-add_com PARAMS ((char *, enum command_class, void (*fun)(char *, int),
- char *));
-
-extern void
-add_com_alias PARAMS ((char *, char *, enum command_class, int));
-
-extern void
-add_info PARAMS ((char *, void (*fun) (char *, int), char *));
+ /* "on" or "off". *VAR is an integer which is nonzero for on,
+ zero for off. */
+ var_boolean,
+
+ /* "on" / "true" / "enable" or "off" / "false" / "disable" or
+ "auto. *VAR is an ``enum auto_boolean''. NOTE: In general a
+ custom show command will need to be implemented - one that for
+ "auto" prints both the "auto" and the current auto-selected
+ value. */
+ var_auto_boolean,
+
+ /* Unsigned Integer. *VAR is an unsigned int. The user can type
+ 0 to mean "unlimited", which is stored in *VAR as UINT_MAX. */
+ var_uinteger,
+
+ /* Like var_uinteger but signed. *VAR is an int. The user can
+ type 0 to mean "unlimited", which is stored in *VAR as
+ INT_MAX. */
+ var_integer,
+
+ /* String which the user enters with escapes (e.g. the user types
+ \n and it is a real newline in the stored string).
+ *VAR is a malloc'd string, or NULL if the string is empty. */
+ var_string,
+ /* String which stores what the user types verbatim.
+ *VAR is a malloc'd string, or NULL if the string is empty. */
+ var_string_noescape,
+ /* String which stores a filename. (*VAR) is a malloc'd string,
+ or "" if the string was empty. */
+ var_optional_filename,
+ /* String which stores a filename. (*VAR) is a malloc'd
+ string. */
+ var_filename,
+ /* ZeroableInteger. *VAR is an int. Like Unsigned Integer except
+ that zero really means zero. */
+ var_zinteger,
+ /* ZeroableUnsignedInteger. *VAR is an unsigned int. Zero really
+ means zero. */
+ var_zuinteger,
+ /* Enumerated type. Can only have one of the specified values.
+ *VAR is a char pointer to the name of the element that we
+ find. */
+ var_enum
+ }
+var_types;
-extern void
-add_info_alias PARAMS ((char *, char *, int));
-
-extern char **
-complete_on_cmdlist PARAMS ((struct cmd_list_element *, char *, char *));
+/* This structure records one command'd definition. */
+struct cmd_list_element;
-extern char **
-complete_on_enum PARAMS ((char **enumlist, char *, char *));
+/* Forward-declarations of the entry-points of cli/cli-decode.c. */
-extern void
-delete_cmd PARAMS ((char *, struct cmd_list_element **));
+/* API to the manipulation of command lists. */
-extern void
-help_cmd PARAMS ((char *, GDB_FILE *));
+extern int valid_user_defined_cmd_name_p (const char *name);
-extern void
-help_list PARAMS ((struct cmd_list_element *, char *, enum command_class,
- GDB_FILE *));
+extern struct cmd_list_element *add_cmd (char *, enum command_class,
+ void (*fun) (char *, int), char *,
+ struct cmd_list_element **);
-extern void
-help_cmd_list PARAMS ((struct cmd_list_element *, enum command_class, char *,
- int, GDB_FILE *));
+extern struct cmd_list_element *add_alias_cmd (char *, char *,
+ enum command_class, int,
+ struct cmd_list_element **);
-extern struct cmd_list_element *
-add_set_cmd PARAMS ((char *, enum command_class, var_types, char *, char *,
- struct cmd_list_element **));
+extern struct cmd_list_element *add_prefix_cmd (char *, enum command_class,
+ void (*fun) (char *, int),
+ char *,
+ struct cmd_list_element **,
+ char *, int,
+ struct cmd_list_element **);
-extern struct cmd_list_element *
-add_set_enum_cmd PARAMS ((char *name, enum command_class, char *list[],
- char *var, char *doc, struct cmd_list_element **c));
+extern struct cmd_list_element *add_abbrev_prefix_cmd (char *,
+ enum command_class,
+ void (*fun) (char *,
+ int),
+ char *,
+ struct cmd_list_element
+ **, char *, int,
+ struct cmd_list_element
+ **);
+
+/* Set the commands corresponding callback. */
+
+typedef void cmd_cfunc_ftype (char *args, int from_tty);
+extern void set_cmd_cfunc (struct cmd_list_element *cmd,
+ cmd_cfunc_ftype *cfunc);
+
+typedef void cmd_sfunc_ftype (char *args, int from_tty,
+ struct cmd_list_element *c);
+extern void set_cmd_sfunc (struct cmd_list_element *cmd,
+ cmd_sfunc_ftype *sfunc);
+
+extern void set_cmd_completer (struct cmd_list_element *,
+ char **(*completer) (struct cmd_list_element *,
+ char *, char *));
+
+/* 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,
+ void (*cfunc) (char *args, int from_tty));
+
+/* Each command object has a local context attached to it. */
+extern void set_cmd_context (struct cmd_list_element *cmd,
+ void *context);
+extern void *get_cmd_context (struct cmd_list_element *cmd);
+
+
+/* Execute CMD's pre/post hook. Throw an error if the command fails.
+ If already executing this pre/post hook, or there is no pre/post
+ hook, the call is silently ignored. */
+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 (char **,
+ struct cmd_list_element *, char *,
+ int, int);
+
+extern struct cmd_list_element *lookup_cmd_1 (char **,
+ struct cmd_list_element *,
+ struct cmd_list_element **,
+ int);
+
+extern struct cmd_list_element *deprecate_cmd (struct cmd_list_element *,
+ char * );
+
+extern void deprecated_cmd_warning (char **);
+
+extern int lookup_cmd_composition (char *text,
+ struct cmd_list_element **alias,
+ struct cmd_list_element **prefix_cmd,
+ struct cmd_list_element **cmd);
+
+extern struct cmd_list_element *add_com (char *, enum command_class,
+ void (*fun) (char *, int),
+ char *);
+
+extern struct cmd_list_element *add_com_alias (char *, char *,
+ enum command_class, int);
+
+extern struct cmd_list_element *add_info (char *,
+ void (*fun) (char *, int),
+ char *);
+
+extern struct cmd_list_element *add_info_alias (char *, char *, int);
+
+extern char **complete_on_cmdlist (struct cmd_list_element *,
+ char *, char *);
+
+extern char **complete_on_enum (const char *enumlist[],
+ char *, char *);
+
+/* Functions that implement commands about CLI commands. */
+
+extern void help_list (struct cmd_list_element *, char *,
+ enum command_class, struct ui_file *);
+
+/* Method for show a set/show variable's VALUE on FILE. If this
+ method isn't supplied deprecated_show_value_hack() is called (which
+ is not good). */
+typedef void (show_value_ftype) (struct ui_file *file,
+ int from_tty,
+ struct cmd_list_element *cmd,
+ const char *value);
+/* NOTE: i18n: This function is not i18n friendly. Callers should
+ instead print the value out directly. */
+extern show_value_ftype deprecated_show_value_hack;
+
+extern void add_setshow_enum_cmd (char *name,
+ enum command_class class,
+ const char *enumlist[],
+ const char **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 void add_setshow_auto_boolean_cmd (char *name,
+ enum command_class class,
+ enum auto_boolean *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 void add_setshow_boolean_cmd (char *name,
+ enum command_class class,
+ 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 void add_setshow_filename_cmd (char *name,
+ enum command_class class,
+ char **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 void add_setshow_string_cmd (char *name,
+ enum command_class class,
+ char **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 void add_setshow_string_noescape_cmd (char *name,
+ enum command_class class,
+ char **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 void add_setshow_optional_filename_cmd (char *name,
+ enum command_class class,
+ char **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 void add_setshow_integer_cmd (char *name,
+ enum command_class class,
+ 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 void add_setshow_uinteger_cmd (char *name,
+ enum command_class class,
+ unsigned 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 void add_setshow_zinteger_cmd (char *name,
+ enum command_class class,
+ 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 void add_setshow_zuinteger_cmd (char *name,
+ enum command_class class,
+ unsigned 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 struct cmd_list_element *
-add_show_from_set PARAMS ((struct cmd_list_element *,
- struct cmd_list_element **));
+/* Do a "show" command for each thing on a command list. */
-/* Do a "set" or "show" command. ARG is NULL if no argument, or the text
- of the argument, and FROM_TTY is nonzero if this command is being entered
- directly by the user (i.e. these are just like any other
- command). C is the command list element for the command. */
+extern void cmd_show_list (struct cmd_list_element *, int, char *);
-extern void
-do_setshow_command PARAMS ((char *, int, struct cmd_list_element *));
+/* Used everywhere whenever at least one parameter is required and
+ none is specified. */
-/* Do a "show" command for each thing on a command list. */
+extern void error_no_arg (char *) ATTRIBUTE_NORETURN;
-extern void
-cmd_show_list PARAMS ((struct cmd_list_element *, int, char *));
+extern void dont_repeat (void);
-extern void
-error_no_arg PARAMS ((char *));
-
-extern void
-dont_repeat PARAMS ((void));
+extern struct cleanup *prevent_dont_repeat (void);
/* 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. */
-extern void
-not_just_help_class_command PARAMS ((char *, int));
+extern void not_just_help_class_command (char *, int);
+
+/* Check function pointer. */
+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);
#endif /* !defined (COMMAND_H) */