]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/mi/mi-cmds.h
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / mi / mi-cmds.h
CommitLineData
4389a95a
AC
1/* MI Command Set for GDB, the GNU debugger.
2
1d506c26 3 Copyright (C) 2000-2024 Free Software Foundation, Inc.
4389a95a 4
ab91fdd5 5 Contributed by Cygnus Solutions (a Red Hat company).
fb40c209
AC
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
fb40c209
AC
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
fb40c209 21
1a5c2598
TT
22#ifndef MI_MI_CMDS_H
23#define MI_MI_CMDS_H
fb40c209 24
6f3dfea0 25#include "gdbsupport/function-view.h"
6b09f134 26#include <optional>
a9c82bc1 27#include "mi/mi-main.h"
1f6c8c33 28
90e645cd
NR
29enum print_values {
30 PRINT_NO_VALUES,
31 PRINT_ALL_VALUES,
32 PRINT_SIMPLE_VALUES
33};
34
9158e49a
TT
35typedef void (mi_cmd_argv_ftype) (const char *command, const char *const *argv,
36 int argc);
fb40c209 37
2b03b41d
SS
38/* Declarations of the functions implementing each command. */
39
75082e8c 40extern mi_cmd_argv_ftype mi_cmd_ada_task_info;
a79b8f6e 41extern mi_cmd_argv_ftype mi_cmd_add_inferior;
fb40c209 42extern mi_cmd_argv_ftype mi_cmd_break_insert;
c5867ab6 43extern mi_cmd_argv_ftype mi_cmd_dprintf_insert;
79aabb73 44extern mi_cmd_argv_ftype mi_cmd_break_condition;
48cb2d85 45extern mi_cmd_argv_ftype mi_cmd_break_commands;
9b4c786c 46extern mi_cmd_argv_ftype mi_cmd_break_passcount;
fb40c209 47extern mi_cmd_argv_ftype mi_cmd_break_watch;
349774ef
JB
48extern mi_cmd_argv_ftype mi_cmd_catch_assert;
49extern mi_cmd_argv_ftype mi_cmd_catch_exception;
bea298f9 50extern mi_cmd_argv_ftype mi_cmd_catch_handlers;
91985142
MG
51extern mi_cmd_argv_ftype mi_cmd_catch_load;
52extern mi_cmd_argv_ftype mi_cmd_catch_unload;
30056ea0
AB
53extern mi_cmd_argv_ftype mi_cmd_catch_throw;
54extern mi_cmd_argv_ftype mi_cmd_catch_rethrow;
55extern mi_cmd_argv_ftype mi_cmd_catch_catch;
fb40c209
AC
56extern mi_cmd_argv_ftype mi_cmd_disassemble;
57extern mi_cmd_argv_ftype mi_cmd_data_evaluate_expression;
58extern mi_cmd_argv_ftype mi_cmd_data_list_register_names;
59extern mi_cmd_argv_ftype mi_cmd_data_list_register_values;
60extern mi_cmd_argv_ftype mi_cmd_data_list_changed_registers;
61extern mi_cmd_argv_ftype mi_cmd_data_read_memory;
8dedea02 62extern mi_cmd_argv_ftype mi_cmd_data_read_memory_bytes;
fb40c209 63extern mi_cmd_argv_ftype mi_cmd_data_write_memory;
8dedea02 64extern mi_cmd_argv_ftype mi_cmd_data_write_memory_bytes;
24e8cecf 65extern mi_cmd_argv_ftype mi_cmd_data_write_register_values;
d8c83789 66extern mi_cmd_argv_ftype mi_cmd_enable_timings;
068890be
JJ
67extern mi_cmd_argv_ftype mi_cmd_env_cd;
68extern mi_cmd_argv_ftype mi_cmd_env_dir;
69extern mi_cmd_argv_ftype mi_cmd_env_path;
70extern mi_cmd_argv_ftype mi_cmd_env_pwd;
9e22b03a
VP
71extern mi_cmd_argv_ftype mi_cmd_exec_continue;
72extern mi_cmd_argv_ftype mi_cmd_exec_finish;
115d30f9 73extern mi_cmd_argv_ftype mi_cmd_exec_interrupt;
143260c9 74extern mi_cmd_argv_ftype mi_cmd_exec_jump;
9e22b03a
VP
75extern mi_cmd_argv_ftype mi_cmd_exec_next;
76extern mi_cmd_argv_ftype mi_cmd_exec_next_instruction;
77extern mi_cmd_argv_ftype mi_cmd_exec_return;
115d30f9 78extern mi_cmd_argv_ftype mi_cmd_exec_run;
9e22b03a
VP
79extern mi_cmd_argv_ftype mi_cmd_exec_step;
80extern mi_cmd_argv_ftype mi_cmd_exec_step_instruction;
1abaf70c 81extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_file;
57c22c6c 82extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_files;
51457a05 83extern mi_cmd_argv_ftype mi_cmd_file_list_shared_libraries;
fb40c209 84extern mi_cmd_argv_ftype mi_cmd_gdb_exit;
3cb3b8df
BR
85extern mi_cmd_argv_ftype mi_cmd_inferior_tty_set;
86extern mi_cmd_argv_ftype mi_cmd_inferior_tty_show;
a7e332c2 87extern mi_cmd_argv_ftype mi_cmd_info_ada_exceptions;
6b7cbff1 88extern mi_cmd_argv_ftype mi_cmd_info_gdb_mi_command;
f3e0e960 89extern mi_cmd_argv_ftype mi_cmd_info_os;
4389a95a 90extern mi_cmd_argv_ftype mi_cmd_interpreter_exec;
084344da 91extern mi_cmd_argv_ftype mi_cmd_list_features;
c6ebd6cf 92extern mi_cmd_argv_ftype mi_cmd_list_target_features;
3ee1c036 93extern mi_cmd_argv_ftype mi_cmd_list_thread_groups;
a79b8f6e 94extern mi_cmd_argv_ftype mi_cmd_remove_inferior;
fb40c209 95extern mi_cmd_argv_ftype mi_cmd_stack_info_depth;
3ba51a77 96extern mi_cmd_argv_ftype mi_cmd_stack_info_frame;
fb40c209
AC
97extern mi_cmd_argv_ftype mi_cmd_stack_list_args;
98extern mi_cmd_argv_ftype mi_cmd_stack_list_frames;
99extern mi_cmd_argv_ftype mi_cmd_stack_list_locals;
daf3c977 100extern mi_cmd_argv_ftype mi_cmd_stack_list_variables;
fb40c209 101extern mi_cmd_argv_ftype mi_cmd_stack_select_frame;
0d18235f 102extern mi_cmd_argv_ftype mi_cmd_symbol_list_lines;
7dc42066 103extern mi_cmd_argv_ftype mi_cmd_symbol_info_functions;
293b38d6
AB
104extern mi_cmd_argv_ftype mi_cmd_symbol_info_module_functions;
105extern mi_cmd_argv_ftype mi_cmd_symbol_info_module_variables;
db5960b4 106extern mi_cmd_argv_ftype mi_cmd_symbol_info_modules;
7dc42066
AB
107extern mi_cmd_argv_ftype mi_cmd_symbol_info_types;
108extern mi_cmd_argv_ftype mi_cmd_symbol_info_variables;
6418d433 109extern mi_cmd_argv_ftype mi_cmd_target_detach;
a6b151f1
DJ
110extern mi_cmd_argv_ftype mi_cmd_target_file_get;
111extern mi_cmd_argv_ftype mi_cmd_target_file_put;
112extern mi_cmd_argv_ftype mi_cmd_target_file_delete;
78cbbba8 113extern mi_cmd_argv_ftype mi_cmd_target_flash_erase;
8e8901c5 114extern mi_cmd_argv_ftype mi_cmd_thread_info;
fb40c209
AC
115extern mi_cmd_argv_ftype mi_cmd_thread_list_ids;
116extern mi_cmd_argv_ftype mi_cmd_thread_select;
40e1c229 117extern mi_cmd_argv_ftype mi_cmd_trace_define_variable;
f197e0f1 118extern mi_cmd_argv_ftype mi_cmd_trace_find;
dc673c81 119extern mi_cmd_argv_ftype mi_cmd_trace_frame_collected;
40e1c229 120extern mi_cmd_argv_ftype mi_cmd_trace_list_variables;
011aacb0 121extern mi_cmd_argv_ftype mi_cmd_trace_save;
f224b49d
VP
122extern mi_cmd_argv_ftype mi_cmd_trace_start;
123extern mi_cmd_argv_ftype mi_cmd_trace_status;
124extern mi_cmd_argv_ftype mi_cmd_trace_stop;
fb40c209
AC
125extern mi_cmd_argv_ftype mi_cmd_var_assign;
126extern mi_cmd_argv_ftype mi_cmd_var_create;
127extern mi_cmd_argv_ftype mi_cmd_var_delete;
128extern mi_cmd_argv_ftype mi_cmd_var_evaluate_expression;
129extern mi_cmd_argv_ftype mi_cmd_var_info_expression;
02142340 130extern mi_cmd_argv_ftype mi_cmd_var_info_path_expression;
fb40c209
AC
131extern mi_cmd_argv_ftype mi_cmd_var_info_num_children;
132extern mi_cmd_argv_ftype mi_cmd_var_info_type;
133extern mi_cmd_argv_ftype mi_cmd_var_list_children;
134extern mi_cmd_argv_ftype mi_cmd_var_set_format;
25d5ea92 135extern mi_cmd_argv_ftype mi_cmd_var_set_frozen;
b6313243 136extern mi_cmd_argv_ftype mi_cmd_var_set_visualizer;
fb40c209
AC
137extern mi_cmd_argv_ftype mi_cmd_var_show_attributes;
138extern mi_cmd_argv_ftype mi_cmd_var_show_format;
139extern mi_cmd_argv_ftype mi_cmd_var_update;
0cc7d26f 140extern mi_cmd_argv_ftype mi_cmd_enable_pretty_printing;
1e611234 141extern mi_cmd_argv_ftype mi_cmd_enable_frame_filters;
0cc7d26f 142extern mi_cmd_argv_ftype mi_cmd_var_set_update_range;
26648588 143extern mi_cmd_argv_ftype mi_cmd_complete;
fb40c209 144
1f6c8c33 145/* The abstract base class for all MI command types. */
b2af646b 146
788ec57f 147struct mi_command
b2af646b 148{
1f6c8c33
JV
149 /* Constructor. NAME is the name of this MI command, excluding any
150 leading dash, that is the initial string the user will enter to run
151 this command. The SUPPRESS_NOTIFICATION pointer is a flag which will
152 be set to 1 when this command is invoked, and reset to its previous
153 value once the command invocation has completed. */
788ec57f 154 mi_command (const char *name, int *suppress_notification);
1f6c8c33
JV
155
156 /* Destructor. */
788ec57f 157 virtual ~mi_command () = default;
1f6c8c33
JV
158
159 /* Return the name of this command. This is the command that the user
160 will actually type in, without any arguments, and without the leading
161 dash. */
162 const char *name () const
163 { return m_name; }
164
a2757c4e
JV
165 /* Execute the MI command. this needs to be overridden in each
166 base class. PARSE is the parsed command line from the user.
167 Can throw an exception if something goes wrong. */
168 virtual void invoke (struct mi_parse *parse) const = 0;
1f6c8c33 169
a9c82bc1
JV
170 /* Return whether this command preserves user selected context (thread
171 and frame). */
172 bool preserve_user_selected_context () const
173 {
174 /* Here we exploit the fact that if MI command is supposed to change
175 user context, then it should not emit change notifications. Therefore if
176 command does not suppress user context change notifications, then it should
177 preserve the context. */
178 return m_suppress_notification != &mi_suppress_notification.user_selected_context;
179 }
180
1f6c8c33
JV
181 /* If this command was created with a suppress notifications pointer,
182 then this function will set the suppress flag and return a
6b09f134 183 std::optional with its value set to an object that will restore the
1f6c8c33
JV
184 previous value of the suppress notifications flag.
185
186 If this command was created without a suppress notifications points,
6b09f134
LS
187 then this function returns an empty std::optional. */
188 std::optional<scoped_restore_tmpl<int>> do_suppress_notification () const;
1f6c8c33 189
a2757c4e
JV
190private:
191
1f6c8c33
JV
192 /* The name of the command. */
193 const char *m_name;
194
195 /* Pointer to integer to set during command's invocation. */
196 int *m_suppress_notification;
b2af646b 197};
fb40c209 198
740b42ce
AB
199/* A command held in the global mi_cmd_table. */
200
201using mi_command_up = std::unique_ptr<struct mi_command>;
202
3524a83e
JV
203/* Lookup a command in the MI command table, returns nullptr if COMMAND is
204 not found. */
fb40c209 205
788ec57f 206extern mi_command *mi_cmd_lookup (const char *command);
fb40c209 207
ee047554 208extern void mi_execute_command (const char *cmd, int from_tty);
4389a95a 209
c97d123d
TT
210/* Execute an MI command given an already-constructed parse
211 object. */
212
213extern void mi_execute_command (mi_parse *context);
214
740b42ce
AB
215/* Insert COMMAND into the global mi_cmd_table. Return false if
216 COMMAND->name already exists in mi_cmd_table, in which case COMMAND will
217 not have been added to mi_cmd_table. Otherwise, return true, and
218 COMMAND was added to mi_cmd_table. */
219
220extern bool insert_mi_cmd_entry (mi_command_up command);
221
222/* Remove the command called NAME from the global mi_cmd_table. Return
223 true if the removal was a success, otherwise return false, which
224 indicates no command called NAME was found in the mi_cmd_table. */
225
226extern bool remove_mi_cmd_entry (const std::string &name);
227
6f3dfea0
SM
228/* Call CALLBACK for each registered MI command. Remove commands for which
229 CALLBACK returns true. */
230
231using remove_mi_cmd_entries_ftype
232 = gdb::function_view<bool (mi_command *)>;
233extern void remove_mi_cmd_entries (remove_mi_cmd_entries_ftype callback);
740b42ce 234
51f8dafb
GR
235/* Return true if type is a simple type: that is, neither an array, structure,
236 or union, nor a reference to an array, structure, or union. */
237
238extern bool mi_simple_type_p (struct type *type);
239
1a5c2598 240#endif /* MI_MI_CMDS_H */