2003-02-05 Jim Ingham <jingham@apple.com>
Keith Seitz <keiths@redhat.com>
Elena Zannoni <ezannoni@redhat.com>
Andrew Cagney <ac131313@redhat.com>
* Makefile.in (SUBDIR_CLI_OBS): Add "cli-interp.o".
(SUBDIR_CLI_SRCS): Add "cli/cli-interp.c".
(SUBDIR_MI_OBS): Add "mi-interp.o".
(SUBDIR_MI_SRCS): Add "mi/mi-interp.c".
(SFILES): Add "interps.c".
(COMMON_OBS): Add "interps.o".
(interps_h, mi_main_h): Define.
(interps.o, cli-interp.o, mi-interp.o): Add dependencies.
(mi-main.o, main.o, event-top.o): Update dependencies.
* cli/cli-interp.c: New file.
* interps.h, interps.c: New files.
* top.c: (gdb_init): Don't install the default interpreter, handed
by captured_main.
* main.c: Include "interps.h".
(interpreter_p): Note that it should malloc'ed.
(captured_command_loop): Call current_interp_command_loop.
(captured_main): Initialize interpreter_p to INTERP_CONSOLE. Use
xfree and xstrdup when updating interpreter_p. Install the
default interpreter. Add hack to stop mi1's copyright notice
being encoded.
* event-top.h (gdb_setup_readline): Declare.
(gdb_disable_readline): Declare.
* event-top.c: Include "interps.h".
(display_gdb_prompt): Call current_interp_display_prompt_p.
(gdb_setup_readline): Initialize gdb_stdout, gdb_stderr,
gdb_stdlog, and gdb_stdtarg.
(_initialize_event_loop): Don't call gdb_setup_readline.
* cli-out.c (cli_out_set_stream): New function.
* cli-out.h (cli_out_set_stream): Declare.
2003-02-06 02:19:12 +01:00
|
|
|
/* MI Command Set for GDB, the GNU debugger.
|
2016-01-01 05:33:14 +01:00
|
|
|
Copyright (C) 2000-2016 Free Software Foundation, Inc.
|
2003-02-05 Jim Ingham <jingham@apple.com>
Keith Seitz <keiths@redhat.com>
Elena Zannoni <ezannoni@redhat.com>
Andrew Cagney <ac131313@redhat.com>
* Makefile.in (SUBDIR_CLI_OBS): Add "cli-interp.o".
(SUBDIR_CLI_SRCS): Add "cli/cli-interp.c".
(SUBDIR_MI_OBS): Add "mi-interp.o".
(SUBDIR_MI_SRCS): Add "mi/mi-interp.c".
(SFILES): Add "interps.c".
(COMMON_OBS): Add "interps.o".
(interps_h, mi_main_h): Define.
(interps.o, cli-interp.o, mi-interp.o): Add dependencies.
(mi-main.o, main.o, event-top.o): Update dependencies.
* cli/cli-interp.c: New file.
* interps.h, interps.c: New files.
* top.c: (gdb_init): Don't install the default interpreter, handed
by captured_main.
* main.c: Include "interps.h".
(interpreter_p): Note that it should malloc'ed.
(captured_command_loop): Call current_interp_command_loop.
(captured_main): Initialize interpreter_p to INTERP_CONSOLE. Use
xfree and xstrdup when updating interpreter_p. Install the
default interpreter. Add hack to stop mi1's copyright notice
being encoded.
* event-top.h (gdb_setup_readline): Declare.
(gdb_disable_readline): Declare.
* event-top.c: Include "interps.h".
(display_gdb_prompt): Call current_interp_display_prompt_p.
(gdb_setup_readline): Initialize gdb_stdout, gdb_stderr,
gdb_stdlog, and gdb_stdtarg.
(_initialize_event_loop): Don't call gdb_setup_readline.
* cli-out.c (cli_out_set_stream): New function.
* cli-out.h (cli_out_set_stream): Declare.
2003-02-06 02:19:12 +01:00
|
|
|
|
2000-02-23 07:19:22 +01:00
|
|
|
Contributed by Cygnus Solutions (a Red Hat company).
|
2000-02-23 01:25:43 +01:00
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
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
|
2007-08-23 20:08:50 +02:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2000-02-23 01:25:43 +01:00
|
|
|
(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
|
2007-08-23 20:08:50 +02:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2000-02-23 01:25:43 +01:00
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
#include "top.h"
|
|
|
|
#include "mi-cmds.h"
|
2012-08-31 10:41:57 +02:00
|
|
|
#include "mi-main.h"
|
2000-02-23 01:25:43 +01:00
|
|
|
|
|
|
|
extern void _initialize_mi_cmds (void);
|
2012-03-06 23:48:53 +01:00
|
|
|
|
2000-02-23 01:25:43 +01:00
|
|
|
struct mi_cmd;
|
|
|
|
static struct mi_cmd **lookup_table (const char *command);
|
|
|
|
static void build_table (struct mi_cmd *commands);
|
|
|
|
|
2012-08-31 10:30:38 +02:00
|
|
|
static struct mi_cmd mi_cmds[] =
|
2000-02-23 01:25:43 +01:00
|
|
|
{
|
2012-08-31 10:41:57 +02:00
|
|
|
/* Define a MI command of NAME, and its corresponding CLI command is
|
|
|
|
CLI_NAME. */
|
|
|
|
#define DEF_MI_CMD_CLI_1(NAME, CLI_NAME, ARGS_P, CALLED) \
|
|
|
|
{ NAME, { CLI_NAME, ARGS_P}, NULL, CALLED }
|
|
|
|
#define DEF_MI_CMD_CLI(NAME, CLI_NAME, ARGS_P) \
|
|
|
|
DEF_MI_CMD_CLI_1(NAME, CLI_NAME, ARGS_P, NULL)
|
|
|
|
|
|
|
|
/* Define a MI command of NAME, and implemented by function MI_FUNC. */
|
|
|
|
#define DEF_MI_CMD_MI_1(NAME, MI_FUNC, CALLED) \
|
|
|
|
{ NAME, {NULL, 0}, MI_FUNC, CALLED }
|
|
|
|
#define DEF_MI_CMD_MI(NAME, MI_FUNC) DEF_MI_CMD_MI_1(NAME, MI_FUNC, NULL)
|
|
|
|
|
|
|
|
DEF_MI_CMD_MI ("ada-task-info", mi_cmd_ada_task_info),
|
|
|
|
DEF_MI_CMD_MI ("add-inferior", mi_cmd_add_inferior),
|
|
|
|
DEF_MI_CMD_CLI_1 ("break-after", "ignore", 1,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_CLI_1 ("break-condition","cond", 1,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_MI_1 ("break-commands", mi_cmd_break_commands,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_CLI_1 ("break-delete", "delete breakpoint", 1,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_CLI_1 ("break-disable", "disable breakpoint", 1,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_CLI_1 ("break-enable", "enable breakpoint", 1,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_CLI ("break-info", "info break", 1),
|
|
|
|
DEF_MI_CMD_MI_1 ("break-insert", mi_cmd_break_insert,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
2013-05-21 06:18:55 +02:00
|
|
|
DEF_MI_CMD_MI_1 ("dprintf-insert", mi_cmd_dprintf_insert,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
2012-08-31 10:41:57 +02:00
|
|
|
DEF_MI_CMD_CLI ("break-list", "info break", 0),
|
|
|
|
DEF_MI_CMD_MI_1 ("break-passcount", mi_cmd_break_passcount,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_MI_1 ("break-watch", mi_cmd_break_watch,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
2013-10-11 15:48:19 +02:00
|
|
|
DEF_MI_CMD_MI_1 ("catch-assert", mi_cmd_catch_assert,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_MI_1 ("catch-exception", mi_cmd_catch_exception,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
2012-12-12 22:20:13 +01:00
|
|
|
DEF_MI_CMD_MI_1 ("catch-load", mi_cmd_catch_load,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
|
|
|
DEF_MI_CMD_MI_1 ("catch-unload", mi_cmd_catch_unload,
|
|
|
|
&mi_suppress_notification.breakpoint),
|
2012-08-31 10:41:57 +02:00
|
|
|
DEF_MI_CMD_MI ("data-disassemble", mi_cmd_disassemble),
|
|
|
|
DEF_MI_CMD_MI ("data-evaluate-expression", mi_cmd_data_evaluate_expression),
|
|
|
|
DEF_MI_CMD_MI ("data-list-changed-registers",
|
|
|
|
mi_cmd_data_list_changed_registers),
|
|
|
|
DEF_MI_CMD_MI ("data-list-register-names", mi_cmd_data_list_register_names),
|
|
|
|
DEF_MI_CMD_MI ("data-list-register-values", mi_cmd_data_list_register_values),
|
|
|
|
DEF_MI_CMD_MI ("data-read-memory", mi_cmd_data_read_memory),
|
|
|
|
DEF_MI_CMD_MI ("data-read-memory-bytes", mi_cmd_data_read_memory_bytes),
|
2012-10-17 02:53:24 +02:00
|
|
|
DEF_MI_CMD_MI_1 ("data-write-memory", mi_cmd_data_write_memory,
|
|
|
|
&mi_suppress_notification.memory),
|
|
|
|
DEF_MI_CMD_MI_1 ("data-write-memory-bytes", mi_cmd_data_write_memory_bytes,
|
|
|
|
&mi_suppress_notification.memory),
|
2012-08-31 10:41:57 +02:00
|
|
|
DEF_MI_CMD_MI ("data-write-register-values",
|
|
|
|
mi_cmd_data_write_register_values),
|
|
|
|
DEF_MI_CMD_MI ("enable-timings", mi_cmd_enable_timings),
|
|
|
|
DEF_MI_CMD_MI ("enable-pretty-printing", mi_cmd_enable_pretty_printing),
|
2013-05-10 Phil Muldoon <pmuldoon@redhat.com>
* stack.c (backtrace_command_1): Add "no-filters", and Python frame
filter logic.
(backtrace_command): Add "no-filters" option parsing.
(_initialize_stack): Alter help to reflect "no-filters" option.
* Makefile.in (SUBDIR_PYTHON_OBS): Add py-framefilter.o
(SUBDIR_PYTHON_SRCS): Add py-framefilter.c
(py-frame.o): Add target
* data-directory/Makefile.in (PYTHON_DIR): Add Python frame
filter files.
* python/python.h: Add new frame filter constants, and flag enum.
(apply_frame_filter): Add definition.
* python/python.c (apply_frame_filter): New non-Python
enabled function.
* python/py-utils.c (py_xdecref): New function.
(make_cleanup_py_xdecref): Ditto.
* python/py-objfile.c: Declare frame_filters dictionary.
(objfpy_dealloc): Add frame_filters dealloc.
(objfpy_new): Initialize frame_filters attribute.
(objfile_to_objfile_object): Ditto.
(objfpy_get_frame_filters): New function.
(objfpy_set_frame_filters): New function.
* python/py-progspace.c: Declare frame_filters dictionary.
(pspy_dealloc): Add frame_filters dealloc.
(pspy_new): Initialize frame_filters attribute.
(pspacee_to_pspace_object): Ditto.
(pspy_get_frame_filters): New function.
(pspy_set_frame_filters): New function.
* python/py-framefilter.c: New file.
* python/lib/gdb/command/frame_filters.py: New file.
* python/lib/gdb/frames.py: New file.
* python/lib/gdb/__init__.py: Initialize global frame_filters
dictionary
* python/lib/gdb/FrameDecorator.py: New file.
* python/lib/gdb/FrameIterator.py: New file.
* mi/mi-cmds.c (mi_cmds): Add frame filters command.
* mi/mi-cmds.h: Declare.
* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames): Add
--no-frame-filter logic, and Python frame filter logic.
(stack_enable_frame_filters): New function.
(parse_no_frame_option): Ditto.
(mi_cmd_stack_list_frames): Add --no-frame-filter and Python frame
filter logic.
(mi_cmd_stack_list_locals): Ditto.
(mi_cmd_stack_list_args): Ditto.
(mi_cmd_stack_list_variables): Ditto.
* NEWS: Add frame filter note.
2013-05-10 Phil Muldoon <pmuldoon@redhat.com>
* gdb.python/py-framefilter.py: New File.
* gdb.python/py-framefilter-mi.exp: Ditto.
* gdb.python/py-framefilter.c: Ditto.
* gdb.python/py-framefilter-mi.exp: Ditto.
* gdb.python/py-framefilter-mi.c: Ditto,
* gdb.python/py-framefilter-gdb.py.in: Ditto.
2013-05-10 Phil Muldoon <pmuldoon@redhat.com>
* gdb.texinfo (Backtrace): Add "no-filter" argument.
(Python API): Add Frame Filters API, Frame Wrapper API,
Writing a Frame Filter/Wrapper, Managing Management of Frame
Filters chapter entries.
(Frame Filters API): New Node.
(Frame Wrapper API): New Node.
(Writing a Frame Filter): New Node.
(Managing Frame Filters): New Node.
(Progspaces In Python): Add note about frame_filters attribute.
(Objfiles in Python): Ditto.
(GDB/MI Stack Manipulation): Add -enable-frame-filters command,
@anchors and --no-frame-filters option to -stack-list-variables,
-stack-list-frames, -stack-list-locals and -stack-list-arguments
commands.
2013-05-10 12:26:03 +02:00
|
|
|
DEF_MI_CMD_MI ("enable-frame-filters", mi_cmd_enable_frame_filters),
|
2012-08-31 10:41:57 +02:00
|
|
|
DEF_MI_CMD_MI ("environment-cd", mi_cmd_env_cd),
|
|
|
|
DEF_MI_CMD_MI ("environment-directory", mi_cmd_env_dir),
|
|
|
|
DEF_MI_CMD_MI ("environment-path", mi_cmd_env_path),
|
|
|
|
DEF_MI_CMD_MI ("environment-pwd", mi_cmd_env_pwd),
|
2013-05-30 02:25:16 +02:00
|
|
|
DEF_MI_CMD_CLI_1 ("exec-arguments", "set args", 1,
|
|
|
|
&mi_suppress_notification.cmd_param_changed),
|
2012-08-31 10:41:57 +02:00
|
|
|
DEF_MI_CMD_MI ("exec-continue", mi_cmd_exec_continue),
|
|
|
|
DEF_MI_CMD_MI ("exec-finish", mi_cmd_exec_finish),
|
|
|
|
DEF_MI_CMD_MI ("exec-jump", mi_cmd_exec_jump),
|
|
|
|
DEF_MI_CMD_MI ("exec-interrupt", mi_cmd_exec_interrupt),
|
|
|
|
DEF_MI_CMD_MI ("exec-next", mi_cmd_exec_next),
|
|
|
|
DEF_MI_CMD_MI ("exec-next-instruction", mi_cmd_exec_next_instruction),
|
|
|
|
DEF_MI_CMD_MI ("exec-return", mi_cmd_exec_return),
|
|
|
|
DEF_MI_CMD_MI ("exec-run", mi_cmd_exec_run),
|
|
|
|
DEF_MI_CMD_MI ("exec-step", mi_cmd_exec_step),
|
|
|
|
DEF_MI_CMD_MI ("exec-step-instruction", mi_cmd_exec_step_instruction),
|
|
|
|
DEF_MI_CMD_CLI ("exec-until", "until", 1),
|
|
|
|
DEF_MI_CMD_CLI ("file-exec-and-symbols", "file", 1),
|
|
|
|
DEF_MI_CMD_CLI ("file-exec-file", "exec-file", 1),
|
|
|
|
DEF_MI_CMD_MI ("file-list-exec-source-file",
|
|
|
|
mi_cmd_file_list_exec_source_file),
|
|
|
|
DEF_MI_CMD_MI ("file-list-exec-source-files",
|
|
|
|
mi_cmd_file_list_exec_source_files),
|
|
|
|
DEF_MI_CMD_CLI ("file-symbol-file", "symbol-file", 1),
|
|
|
|
DEF_MI_CMD_MI ("gdb-exit", mi_cmd_gdb_exit),
|
|
|
|
DEF_MI_CMD_CLI_1 ("gdb-set", "set", 1,
|
|
|
|
&mi_suppress_notification.cmd_param_changed),
|
|
|
|
DEF_MI_CMD_CLI ("gdb-show", "show", 1),
|
|
|
|
DEF_MI_CMD_CLI ("gdb-version", "show version", 0),
|
|
|
|
DEF_MI_CMD_MI ("inferior-tty-set", mi_cmd_inferior_tty_set),
|
|
|
|
DEF_MI_CMD_MI ("inferior-tty-show", mi_cmd_inferior_tty_show),
|
Implement GDB/MI equivalent of "info exceptions" CLI command.
This patch implements a new GDB/MI command implementing the equivalent
of the "info exceptions" CLI command. The command syntax is:
-info-ada-exceptions [REGEXP]
Here is an example of usage (slightly formatted by hand to make it
easier to read):
-info-ada-exceptions ions\.a_
^done,ada-exceptions=
{nr_rows="2",nr_cols="2",
hdr=[{width="1",alignment="-1",col_name="name",colhdr="Name"},
{width="1",alignment="-1",col_name="address",colhdr="Address"}],
body=[{name="global_exceptions.a_global_exception",
address="0x0000000000613a80"},
{name="global_exceptions.a_private_exception",
address="0x0000000000613ac0"}]}
Also, in order to allow graphical frontends to easily determine
whether this command is available or not, the output of the
"-list-features" command has been augmented to contain
"info-ada-exceptions".
gdb/Changelog:
* mi/mi-cmds.h (mi_cmd_info_ada_exceptions): Add declaration.
* mi/mi-cmds.c (mi_cmds): Add entry for -info-ada-exceptions
command.
* mi/mi-cmd-info.c: #include "ada-lang.c" and "arch-utils.c".
(mi_cmd_info_ada_exceptions): New function.
* mi/mi-main.c (mi_cmd_list_features): Add "info-ada-exceptions".
gdb/testsuite/ChangeLog:
* gdb.ada/mi_exc_info: New testcase.
2013-11-07 14:15:46 +01:00
|
|
|
DEF_MI_CMD_MI ("info-ada-exceptions", mi_cmd_info_ada_exceptions),
|
New GDB/MI command "-info-gdb-mi-command"
This patch adds a new GDB/MI command meant for graphical frontends
trying to determine whether a given GDB/MI command exists or not.
Examples:
-info-gdb-mi-command unsupported-command
^done,command={exists="false"}
(gdb)
-info-gdb-mi-command symbol-list-lines
^done,command={exists="true"}
(gdb)
At the moment, this is the only piece of information that this
command returns.
Eventually, and if needed, we can extend it to provide
command-specific pieces of information, such as updates to
the command's syntax since inception. This could become,
for instance:
-info-gdb-mi-command symbol-list-lines
^done,command={exists="true",features=[]}
(gdb)
-info-gdb-mi-command catch-assert
^done,command={exists="true",features=["conditions"]}
In the first case, it would mean that no extra features,
while in the second, it announces that the -catch-assert
command in this version of the debugger supports a feature
called "condition" - exact semantics to be documented with
combined with the rest of the queried command's documentation.
But for now, we start small, and only worry about existance.
And to bootstrap the process, I have added an entry in the
output of the -list-features command as well ("info-gdb-mi-command"),
allowing the graphical frontends to go through the following process:
1. Send -list-features, collect info from there as before;
2. Check if the output contains "info-gdb-mi-command".
If it does, then support for various commands can be
queried though -info-gdb-mi-command. Newer commands
will be expected to always be checked via this new
-info-gdb-mi-command.
gdb/ChangeLog:
* 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.
gdb/doc/ChangeLog:
* 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.
gdb/testsuite/ChangeLog:
* gdb.mi/mi-i-cmd.exp: New file.
2013-11-12 11:51:30 +01:00
|
|
|
DEF_MI_CMD_MI ("info-gdb-mi-command", mi_cmd_info_gdb_mi_command),
|
2012-08-31 10:41:57 +02:00
|
|
|
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),
|
|
|
|
DEF_MI_CMD_MI ("list-target-features", mi_cmd_list_target_features),
|
|
|
|
DEF_MI_CMD_MI ("list-thread-groups", mi_cmd_list_thread_groups),
|
|
|
|
DEF_MI_CMD_MI ("remove-inferior", mi_cmd_remove_inferior),
|
|
|
|
DEF_MI_CMD_MI ("stack-info-depth", mi_cmd_stack_info_depth),
|
|
|
|
DEF_MI_CMD_MI ("stack-info-frame", mi_cmd_stack_info_frame),
|
|
|
|
DEF_MI_CMD_MI ("stack-list-arguments", mi_cmd_stack_list_args),
|
|
|
|
DEF_MI_CMD_MI ("stack-list-frames", mi_cmd_stack_list_frames),
|
|
|
|
DEF_MI_CMD_MI ("stack-list-locals", mi_cmd_stack_list_locals),
|
|
|
|
DEF_MI_CMD_MI ("stack-list-variables", mi_cmd_stack_list_variables),
|
|
|
|
DEF_MI_CMD_MI ("stack-select-frame", mi_cmd_stack_select_frame),
|
|
|
|
DEF_MI_CMD_MI ("symbol-list-lines", mi_cmd_symbol_list_lines),
|
|
|
|
DEF_MI_CMD_CLI ("target-attach", "attach", 1),
|
|
|
|
DEF_MI_CMD_MI ("target-detach", mi_cmd_target_detach),
|
|
|
|
DEF_MI_CMD_CLI ("target-disconnect", "disconnect", 0),
|
|
|
|
DEF_MI_CMD_CLI ("target-download", "load", 1),
|
|
|
|
DEF_MI_CMD_MI ("target-file-delete", mi_cmd_target_file_delete),
|
|
|
|
DEF_MI_CMD_MI ("target-file-get", mi_cmd_target_file_get),
|
|
|
|
DEF_MI_CMD_MI ("target-file-put", mi_cmd_target_file_put),
|
|
|
|
DEF_MI_CMD_CLI ("target-select", "target", 1),
|
|
|
|
DEF_MI_CMD_MI ("thread-info", mi_cmd_thread_info),
|
|
|
|
DEF_MI_CMD_MI ("thread-list-ids", mi_cmd_thread_list_ids),
|
|
|
|
DEF_MI_CMD_MI ("thread-select", mi_cmd_thread_select),
|
|
|
|
DEF_MI_CMD_MI ("trace-define-variable", mi_cmd_trace_define_variable),
|
2012-09-18 13:33:43 +02:00
|
|
|
DEF_MI_CMD_MI_1 ("trace-find", mi_cmd_trace_find,
|
|
|
|
&mi_suppress_notification.traceframe),
|
2013-06-26 10:17:27 +02:00
|
|
|
DEF_MI_CMD_MI ("trace-frame-collected",
|
|
|
|
mi_cmd_trace_frame_collected),
|
2012-08-31 10:41:57 +02:00
|
|
|
DEF_MI_CMD_MI ("trace-list-variables", mi_cmd_trace_list_variables),
|
|
|
|
DEF_MI_CMD_MI ("trace-save", mi_cmd_trace_save),
|
|
|
|
DEF_MI_CMD_MI ("trace-start", mi_cmd_trace_start),
|
|
|
|
DEF_MI_CMD_MI ("trace-status", mi_cmd_trace_status),
|
|
|
|
DEF_MI_CMD_MI ("trace-stop", mi_cmd_trace_stop),
|
|
|
|
DEF_MI_CMD_MI ("var-assign", mi_cmd_var_assign),
|
|
|
|
DEF_MI_CMD_MI ("var-create", mi_cmd_var_create),
|
|
|
|
DEF_MI_CMD_MI ("var-delete", mi_cmd_var_delete),
|
|
|
|
DEF_MI_CMD_MI ("var-evaluate-expression", mi_cmd_var_evaluate_expression),
|
|
|
|
DEF_MI_CMD_MI ("var-info-path-expression", mi_cmd_var_info_path_expression),
|
|
|
|
DEF_MI_CMD_MI ("var-info-expression", mi_cmd_var_info_expression),
|
|
|
|
DEF_MI_CMD_MI ("var-info-num-children", mi_cmd_var_info_num_children),
|
|
|
|
DEF_MI_CMD_MI ("var-info-type", mi_cmd_var_info_type),
|
|
|
|
DEF_MI_CMD_MI ("var-list-children", mi_cmd_var_list_children),
|
|
|
|
DEF_MI_CMD_MI ("var-set-format", mi_cmd_var_set_format),
|
|
|
|
DEF_MI_CMD_MI ("var-set-frozen", mi_cmd_var_set_frozen),
|
|
|
|
DEF_MI_CMD_MI ("var-set-update-range", mi_cmd_var_set_update_range),
|
|
|
|
DEF_MI_CMD_MI ("var-set-visualizer", mi_cmd_var_set_visualizer),
|
|
|
|
DEF_MI_CMD_MI ("var-show-attributes", mi_cmd_var_show_attributes),
|
|
|
|
DEF_MI_CMD_MI ("var-show-format", mi_cmd_var_show_format),
|
|
|
|
DEF_MI_CMD_MI ("var-update", mi_cmd_var_update),
|
2003-08-05 01:18:50 +02:00
|
|
|
{ NULL, }
|
2000-02-23 01:25:43 +01:00
|
|
|
};
|
|
|
|
|
2012-03-06 23:48:53 +01:00
|
|
|
/* Pointer to the mi command table (built at run time). */
|
2000-02-23 01:25:43 +01:00
|
|
|
|
|
|
|
static struct mi_cmd **mi_table;
|
|
|
|
|
2012-03-06 23:48:53 +01:00
|
|
|
/* A prime large enough to accomodate the entire command table. */
|
2000-02-23 01:25:43 +01:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
MI_TABLE_SIZE = 227
|
|
|
|
};
|
|
|
|
|
2012-03-06 23:48:53 +01:00
|
|
|
/* Exported function used to obtain info from the table. */
|
2000-02-23 01:25:43 +01:00
|
|
|
struct mi_cmd *
|
|
|
|
mi_lookup (const char *command)
|
|
|
|
{
|
|
|
|
return *lookup_table (command);
|
|
|
|
}
|
|
|
|
|
2012-03-06 23:48:53 +01:00
|
|
|
/* Used for collecting hash hit/miss statistics. */
|
|
|
|
|
2000-02-23 01:25:43 +01:00
|
|
|
struct mi_cmd_stats
|
|
|
|
{
|
|
|
|
int hit;
|
|
|
|
int miss;
|
|
|
|
int rehash;
|
|
|
|
};
|
|
|
|
struct mi_cmd_stats stats;
|
|
|
|
|
2012-03-06 23:48:53 +01:00
|
|
|
/* Look up a command. */
|
|
|
|
|
2000-02-23 01:25:43 +01:00
|
|
|
static struct mi_cmd **
|
|
|
|
lookup_table (const char *command)
|
|
|
|
{
|
|
|
|
const char *chp;
|
|
|
|
unsigned int index = 0;
|
2010-05-17 22:49:39 +02:00
|
|
|
|
2012-03-06 23:48:53 +01:00
|
|
|
/* Compute our hash. */
|
2000-02-23 01:25:43 +01:00
|
|
|
for (chp = command; *chp; chp++)
|
|
|
|
{
|
2012-03-06 23:48:53 +01:00
|
|
|
/* We use a somewhat arbitrary formula. */
|
2000-02-23 01:25:43 +01:00
|
|
|
index = ((index << 6) + (unsigned int) *chp) % MI_TABLE_SIZE;
|
|
|
|
}
|
2012-03-06 23:48:53 +01:00
|
|
|
|
2000-02-23 01:25:43 +01:00
|
|
|
while (1)
|
|
|
|
{
|
|
|
|
struct mi_cmd **entry = &mi_table[index];
|
|
|
|
if ((*entry) == 0)
|
|
|
|
{
|
|
|
|
/* not found, return pointer to next free. */
|
|
|
|
stats.miss++;
|
|
|
|
return entry;
|
|
|
|
}
|
|
|
|
if (strcmp (command, (*entry)->name) == 0)
|
|
|
|
{
|
|
|
|
stats.hit++;
|
|
|
|
return entry; /* found */
|
|
|
|
}
|
|
|
|
index = (index + 1) % MI_TABLE_SIZE;
|
|
|
|
stats.rehash++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
build_table (struct mi_cmd *commands)
|
|
|
|
{
|
|
|
|
int nr_rehash = 0;
|
|
|
|
int nr_entries = 0;
|
|
|
|
struct mi_cmd *command;
|
|
|
|
|
2014-05-19 21:10:21 +02:00
|
|
|
mi_table = XCNEWVEC (struct mi_cmd *, MI_TABLE_SIZE);
|
2000-02-23 01:25:43 +01:00
|
|
|
for (command = commands; command->name != 0; command++)
|
|
|
|
{
|
|
|
|
struct mi_cmd **entry = lookup_table (command->name);
|
2010-05-17 22:49:39 +02:00
|
|
|
|
2000-02-23 01:25:43 +01:00
|
|
|
if (*entry)
|
2001-02-08 07:03:54 +01:00
|
|
|
internal_error (__FILE__, __LINE__,
|
2005-02-11 Andrew Cagney <cagney@gnu.org>
Mark up error_no_arg, query, perror_with_name, complaint, and
internal_error.
* breakpoint.c, cp-abi.c, cp-namespace.c, cp-support.c: Update.
* cris-tdep.c, dbxread.c, dictionary.c, dsrec.c: Update.
* dummy-frame.c, dve3900-rom.c, dwarf2-frame.c, dwarf2expr.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, event-loop.c: Update.
* exceptions.c, exec.c, f-lang.c, findvar.c, fork-child.c: Update.
* frame-unwind.c, frame.c, frv-linux-tdep.c, frv-tdep.c: Update.
* gdb_assert.h, gdbarch.c, gdbtypes.c, gnu-nat.c: Update.
* go32-nat.c, hppa-tdep.c, hppabsd-nat.c, hpread.c: Update.
* i386-linux-nat.c, i386-nat.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386fbsd-nat.c, inf-ptrace.c, inf-ttrace.c, infcall.c: Update.
* infcmd.c, inflow.c, infptrace.c, infrun.c, inftarg.c: Update.
* interps.c, language.c, linespec.c, linux-nat.c: Update.
* m32r-linux-nat.c, m68k-tdep.c, m68kbsd-nat.c: Update.
* m68klinux-nat.c, m88kbsd-nat.c, macroexp.c, macroscope.c: Update.
* macrotab.c, maint.c, mdebugread.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mips64obsd-nat.c: Update.
* mipsnbsd-nat.c, mn10300-tdep.c, monitor.c, nto-procfs.c: Update.
* objc-lang.c, objfiles.c, objfiles.h, ocd.c, osabi.c: Update.
* parse.c, ppc-bdm.c, ppc-linux-nat.c, ppc-sysv-tdep.c: Update.
* ppcnbsd-nat.c, ppcobsd-nat.c, printcmd.c, procfs.c: Update.
* regcache.c, reggroups.c, remote-e7000.c, remote-mips.c: Update.
* remote-rdp.c, remote-sds.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote.c, rs6000-nat.c, rs6000-tdep.c: Update.
* s390-nat.c, s390-tdep.c, sentinel-frame.c, serial.c: Update.
* sh-tdep.c, sh3-rom.c, sh64-tdep.c, shnbsd-nat.c: Update.
* solib-aix5.c, solib-svr4.c, solib.c, source.c: Update.
* sparc-nat.c, stabsread.c, stack.c, symfile.c, symtab.c: Update.
* symtab.h, target.c, tracepoint.c, ui-file.c, ui-out.c: Update.
* utils.c, valops.c, valprint.c, vax-nat.c, vaxbsd-nat.c: Update.
* win32-nat.c, xcoffread.c, xstormy16-tdep.c: Update.
* cli/cli-cmds.c, cli/cli-logging.c, cli/cli-script.c: Update.
* cli/cli-setshow.c, mi/mi-cmd-break.c, mi/mi-cmds.c: Update.
* mi/mi-console.c, mi/mi-getopt.c, mi/mi-out.c: Update.
* tui/tui-file.c, tui/tui-interp.c: Update.
2005-02-11 19:13:55 +01:00
|
|
|
_("command `%s' appears to be duplicated"),
|
2000-02-23 01:25:43 +01:00
|
|
|
command->name);
|
|
|
|
*entry = command;
|
2012-03-06 23:48:53 +01:00
|
|
|
/* FIXME lose these prints */
|
2000-02-23 01:25:43 +01:00
|
|
|
if (0)
|
|
|
|
{
|
|
|
|
fprintf_unfiltered (gdb_stdlog, "%-30s %2d\n",
|
|
|
|
command->name, stats.rehash - nr_rehash);
|
|
|
|
}
|
|
|
|
nr_entries++;
|
|
|
|
nr_rehash = stats.rehash;
|
|
|
|
}
|
|
|
|
if (0)
|
|
|
|
{
|
|
|
|
fprintf_filtered (gdb_stdlog, "Average %3.1f\n",
|
|
|
|
(double) nr_rehash / (double) nr_entries);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
_initialize_mi_cmds (void)
|
2000-02-23 01:25:43 +01:00
|
|
|
{
|
|
|
|
build_table (mi_cmds);
|
|
|
|
memset (&stats, 0, sizeof (stats));
|
|
|
|
}
|