+2013-12-03 Joel Brobecker <brobecker@adacore.com>
+
+ * mi/mi-cmds.h (mi_cmd_info_gdb_mi_command): Declare.
+ * mi/mi-cmd-info.c (mi_cmd_info_gdb_mi_command): New function.
+ * mi/mi-cmds.c (mi_cmds): Add -info-gdb-mi-command command.
+ * mi/mi-main.c (mi_cmd_list_features): Add "info-gdb-mi-command"
+ field to output of "-list-features".
+
+ * NEWS: Add entry for new -info-gdb-mi-command.
+
2013-12-02 Doug Evans <dje@google.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
** All MI commands now accept an optional "--language" option.
+ ** The new command -info-gdb-mi-command allows the user to determine
+ whether a GDB/MI command is supported or not.
+
** The -trace-save MI command can optionally save trace buffer in Common
Trace Format now.
+2013-12-03 Joel Brobecker <brobecker@adacore.com>
+
+ * gdb.texinfo (GDB/MI Miscellaneous Commands): Document
+ the new -info-gdb-mi-command GDB/MI command. Document
+ the meaning of "-info-gdb-mi-command" in the output of
+ -list-features.
+
2013-11-29 Pedro Alves <palves@redhat.com>
* gdb.texinfo (Frames In Python) <gdb.FRAME_UNWIND_NULL_ID>:
(gdb)
@end smallexample
+@subheading The @code{-info-gdb-mi-command} Command
+@cindex @code{-info-gdb-mi-command}
+@findex -info-gdb-mi-command
+
+@subsubheading Synopsis
+
+@smallexample
+ -info-gdb-mi-command @var{cmd_name}
+@end smallexample
+
+Query support for the @sc{gdb/mi} command named @var{cmd_name}.
+
+Note that the dash (@code{-}) starting all @sc{gdb/mi} commands
+is technically not part of the command name (@pxref{GDB/MI Input
+Syntax}), and thus should be omitted in @var{cmd_name}. However,
+for ease of use, this command also accepts the form with the leading
+dash.
+
+@subsubheading @value{GDBN} Command
+
+There is no corresponding @value{GDBN} command.
+
+@subsubheading Result
+
+The result is a tuple. There is currently only one field:
+
+@table @samp
+@item exists
+This field is equal to @code{"true"} if the @sc{gdb/mi} command exists,
+@code{"false"} otherwise.
+
+@end table
+
+@subsubheading Example
+
+Here is an example where the @sc{gdb/mi} command does not exist:
+
+@smallexample
+-info-gdb-mi-command unsupported-command
+^done,command=@{exists="false"@}
+@end smallexample
+
+@noindent
+And here is an example where the @sc{gdb/mi} command is known
+to the debugger:
+
+@smallexample
+-info-gdb-mi-command symbol-list-lines
+^done,command=@{exists="true"@}
+@end smallexample
+
@subheading The @code{-list-features} Command
@findex -list-features
@item language-option
Indicates that all @sc{gdb/mi} commands accept the @option{--language}
option (@pxref{Context management}).
+@item info-gdb-mi-command
+Indicates support for the @code{-info-gdb-mi-command} command.
@end table
@subheading The @code{-list-target-features} Command
do_cleanups (old_chain);
}
+/* Implement the "-info-gdb-mi-command" GDB/MI command. */
+
+void
+mi_cmd_info_gdb_mi_command (char *command, char **argv, int argc)
+{
+ const char *cmd_name;
+ struct mi_cmd *cmd;
+ struct ui_out *uiout = current_uiout;
+ struct cleanup *old_chain;
+
+ /* This command takes exactly one argument. */
+ if (argc != 1)
+ error (_("Usage: -info-gdb-mi-command MI_COMMAND_NAME"));
+ cmd_name = argv[0];
+
+ /* Normally, the command name (aka the "operation" in the GDB/MI
+ grammar), does not include the leading '-' (dash). But for
+ the user's convenience, allow the user to specify the command
+ name to be with or without that leading dash. */
+ if (cmd_name[0] == '-')
+ cmd_name++;
+
+ cmd = mi_lookup (cmd_name);
+
+ old_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "command");
+ ui_out_field_string (uiout, "exists", cmd != NULL ? "true" : "false");
+ do_cleanups (old_chain);
+}
+
void
mi_cmd_info_os (char *command, char **argv, int argc)
{
DEF_MI_CMD_MI ("inferior-tty-set", mi_cmd_inferior_tty_set),
DEF_MI_CMD_MI ("inferior-tty-show", mi_cmd_inferior_tty_show),
DEF_MI_CMD_MI ("info-ada-exceptions", mi_cmd_info_ada_exceptions),
+ DEF_MI_CMD_MI ("info-gdb-mi-command", mi_cmd_info_gdb_mi_command),
DEF_MI_CMD_MI ("info-os", mi_cmd_info_os),
DEF_MI_CMD_MI ("interpreter-exec", mi_cmd_interpreter_exec),
DEF_MI_CMD_MI ("list-features", mi_cmd_list_features),
extern mi_cmd_argv_ftype mi_cmd_inferior_tty_set;
extern mi_cmd_argv_ftype mi_cmd_inferior_tty_show;
extern mi_cmd_argv_ftype mi_cmd_info_ada_exceptions;
+extern mi_cmd_argv_ftype mi_cmd_info_gdb_mi_command;
extern mi_cmd_argv_ftype mi_cmd_info_os;
extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
extern mi_cmd_argv_ftype mi_cmd_list_features;
ui_out_field_string (uiout, NULL, "ada-task-info");
ui_out_field_string (uiout, NULL, "ada-exceptions");
ui_out_field_string (uiout, NULL, "language-option");
+ ui_out_field_string (uiout, NULL, "info-gdb-mi-command");
#if HAVE_PYTHON
if (gdb_python_initialized)
+2013-12-03 Joel Brobecker <brobecker@adacore.com>
+
+ * gdb.mi/mi-i-cmd.exp: New file.
+
2013-12-02 Doug Evans <dje@google.com>
* gdb.dwarf/dwp-symlink.c: Fake out gdb to not load debug info
--- /dev/null
+# Copyright 2013 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
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if [mi_gdb_start] {
+ continue
+}
+
+# First, verify that the debugger correctly advertises support
+# for the -info-gdb-mi-command command.
+mi_gdb_test "-list-features" \
+ "\\^done,features=\\\[.*\"info-gdb-mi-command\".*\\\]" \
+ "-list-features includes \"info-gdb-mi-command\""
+
+mi_gdb_test "-info-gdb-mi-command unsupported-command" \
+ "\\^done,command=\\\{exists=\"false\"\\\}" \
+ "-info-gdb-mi-command unsupported-command"
+
+# Same test as above, but including the leading '-' in the command name.
+mi_gdb_test "-info-gdb-mi-command -unsupported-command" \
+ "\\^done,command=\\\{exists=\"false\"\\\}" \
+ "-info-gdb-mi-command -unsupported-command"
+
+mi_gdb_test "-info-gdb-mi-command symbol-list-lines" \
+ "\\^done,command=\\\{exists=\"true\"\\\}" \
+ "-info-gdb-mi-command symbol-list-lines"
+
+# Same test as above, but including the leading '-' in the command name.
+mi_gdb_test "-info-gdb-mi-command -symbol-list-lines" \
+ "\\^done,command=\\\{exists=\"true\"\\\}" \
+ "-info-gdb-mi-command -symbol-list-lines"