]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/extension-priv.h
gdb: change return type of check_quit_flag to bool
[thirdparty/binutils-gdb.git] / gdb / extension-priv.h
CommitLineData
6dddc817
DE
1/* Private implementation details of interface between gdb and its
2 extension languages.
3
1d506c26 4 Copyright (C) 2014-2024 Free Software Foundation, Inc.
6dddc817
DE
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20
21#ifndef EXTENSION_PRIV_H
22#define EXTENSION_PRIV_H
23
4de283e4 24#include "extension.h"
a40805d4 25#include <signal.h>
6b66338c 26#include "cli/cli-script.h"
6dddc817 27
6dddc817
DE
28/* High level description of an extension/scripting language.
29 An entry for each is compiled into GDB regardless of whether the support
30 is present. This is done so that we can issue meaningful errors if the
31 support is not compiled in. */
32
33struct extension_language_defn
34{
35 /* Enum of the extension language. */
36 enum extension_language language;
37
38 /* The name of the extension language, lowercase. E.g., python. */
39 const char *name;
40
41 /* The capitalized name of the extension language.
42 For python this is "Python". For gdb this is "GDB". */
43 const char *capitalized_name;
44
45 /* The file suffix of this extension language. E.g., ".py". */
46 const char *suffix;
47
48 /* The suffix of per-objfile scripts to auto-load.
49 E.g., When the program loads libfoo.so, look for libfoo.so-gdb.py. */
50 const char *auto_load_suffix;
51
52 /* We support embedding external extension language code in GDB's own
53 scripting language. We do this by having a special command that begins
54 the extension language snippet, and terminate it with "end".
55 This specifies the control type used to implement this. */
56 enum command_control_type cli_control_type;
57
58 /* A pointer to the "methods" to load scripts in this language,
59 or NULL if the support is not compiled into GDB. */
60 const struct extension_language_script_ops *script_ops;
61
62 /* Either a pointer to the "methods" of the extension language interface
63 or NULL if the support is not compiled into GDB.
64 This is also NULL for GDB's own scripting language which is relatively
65 primitive, and doesn't provide these features. */
66 const struct extension_language_ops *ops;
67};
68
69/* The interface for loading scripts from external extension languages,
70 as well as GDB's own scripting language.
1a860409
DE
71 All of these methods are required to be implemented.
72
73 By convention all of these functions take a pseudo-this parameter
74 as the first argument. */
6dddc817
DE
75
76struct extension_language_script_ops
77{
78 /* Load a script. This is called, e.g., via the "source" command.
79 If there's an error while processing the script this function may,
80 but is not required to, throw an error. */
81 script_sourcer_func *script_sourcer;
82
83 /* Load a script attached to an objfile.
84 If there's an error while processing the script this function may,
85 but is not required to, throw an error. */
86 objfile_script_sourcer_func *objfile_script_sourcer;
87
9f050062
DE
88 /* Execute a script attached to an objfile.
89 If there's an error while processing the script this function may,
90 but is not required to, throw an error. */
91 objfile_script_executor_func *objfile_script_executor;
92
6dddc817
DE
93 /* Return non-zero if auto-loading scripts in this extension language
94 is enabled. */
db972fce 95 bool (*auto_load_enabled) (const struct extension_language_defn *);
6dddc817
DE
96};
97
98/* The interface for making calls from GDB to an external extension
99 language. This is for non-script-loading related functionality, like
100 pretty-printing, etc. The reason these are separated out is GDB's own
101 scripting language makes use of extension_language_script_opts, but it
102 makes no use of these. There is no (current) intention to split
103 extension_language_ops up any further.
104 All of these methods are optional and may be NULL, except where
1a860409
DE
105 otherwise indicated.
106
107 By convention all of these functions take a pseudo-this parameter
108 as the first argument. */
6dddc817
DE
109
110struct extension_language_ops
111{
041ca48e
AB
112 /* Called after GDB has processed the early initialization settings
113 files. This is when the extension language should be initialized. By
114 the time this is called all of the earlier initialization functions
115 have already been called. */
116 void (*initialize) (const struct extension_language_defn *);
6dddc817
DE
117
118 /* Return non-zero if the extension language successfully initialized.
119 This method is required. */
120 int (*initialized) (const struct extension_language_defn *);
121
beadf912
TT
122 /* Called just before GDB exits. This shuts down the extension
123 language. This can be NULL. */
124 void (*shutdown) (const struct extension_language_defn *);
125
6dddc817
DE
126 /* Process a sequence of commands embedded in GDB's own scripting language.
127 E.g.,
128 python
129 print 42
130 end */
131 void (*eval_from_control_command) (const struct extension_language_defn *,
132 struct command_line *);
133
134 /* Type-printing support:
135 start_type_printers, apply_type_printers, free_type_printers.
136 These methods are optional and may be NULL, but if one of them is
137 implemented then they all must be. */
138
139 /* Called before printing a type. */
140 void (*start_type_printers) (const struct extension_language_defn *,
141 struct ext_lang_type_printers *);
142
143 /* Try to pretty-print TYPE. If successful the pretty-printed type is
55af06a7 144 stored in *PRETTIED_TYPE.
6dddc817
DE
145 Returns EXT_LANG_RC_OK upon success, EXT_LANG_RC_NOP if the type
146 is not recognized, and EXT_LANG_RC_ERROR if an error was encountered.
147 This function has a bit of a funny name, since it actually applies
148 recognizers, but this seemed clearer given the start_type_printers
149 and free_type_printers functions. */
150 enum ext_lang_rc (*apply_type_printers)
151 (const struct extension_language_defn *,
152 const struct ext_lang_type_printers *,
55af06a7
TT
153 struct type *,
154 gdb::unique_xmalloc_ptr<char> *prettied_type);
6dddc817
DE
155
156 /* Called after a type has been printed to give the type pretty-printer
157 mechanism an opportunity to clean up. */
158 void (*free_type_printers) (const struct extension_language_defn *,
159 struct ext_lang_type_printers *);
160
42331a1e
TT
161 /* Try to pretty-print a value, onto stdio stream STREAM according
162 to OPTIONS. VAL is the object to print. Returns EXT_LANG_RC_OK
163 upon success, EXT_LANG_RC_NOP if the value is not recognized, and
164 EXT_LANG_RC_ERROR if an error was encountered. */
6dddc817
DE
165 enum ext_lang_rc (*apply_val_pretty_printer)
166 (const struct extension_language_defn *,
42331a1e
TT
167 struct value *val, struct ui_file *stream, int recurse,
168 const struct value_print_options *options,
6dddc817
DE
169 const struct language_defn *language);
170
171 /* GDB access to the "frame filter" feature.
172 FRAME is the source frame to start frame-filter invocation. FLAGS is an
173 integer holding the flags for printing. The following elements of
174 the FRAME_FILTER_FLAGS enum denotes the make-up of FLAGS:
175 PRINT_LEVEL is a flag indicating whether to print the frame's
176 relative level in the output. PRINT_FRAME_INFO is a flag that
177 indicates whether this function should print the frame
178 information, PRINT_ARGS is a flag that indicates whether to print
179 frame arguments, and PRINT_LOCALS, likewise, with frame local
180 variables. ARGS_TYPE is an enumerator describing the argument
181 format, OUT is the output stream to print. FRAME_LOW is the
182 beginning of the slice of frames to print, and FRAME_HIGH is the
183 upper limit of the frames to count. Returns SCR_BT_ERROR on error,
184 or SCR_BT_COMPLETED on success. */
185 enum ext_lang_bt_status (*apply_frame_filter)
186 (const struct extension_language_defn *,
8480a37e 187 const frame_info_ptr &frame, frame_filter_flags flags,
d4dd3282 188 enum ext_lang_frame_args args_type,
6dddc817
DE
189 struct ui_out *out, int frame_low, int frame_high);
190
191 /* Update values held by the extension language when OBJFILE is discarded.
192 New global types must be created for every such value, which must then be
193 updated to use the new types.
194 This function typically just iterates over all appropriate values and
195 calls preserve_one_value for each one.
196 COPIED_TYPES is used to prevent cycles / duplicates and is passed to
197 preserve_one_value. */
198 void (*preserve_values) (const struct extension_language_defn *,
199 struct objfile *objfile, htab_t copied_types);
200
201 /* Return non-zero if there is a stop condition for the breakpoint.
202 This is used to implement the restriction that a breakpoint may have
203 at most one condition. */
204 int (*breakpoint_has_cond) (const struct extension_language_defn *,
205 struct breakpoint *);
206
207 /* Return a value of enum ext_lang_bp_stop indicating if there is a stop
208 condition for the breakpoint, and if so whether the program should
209 stop. This is called when the program has stopped at the specified
210 breakpoint.
211 While breakpoints can have at most one condition, this is called for
212 every extension language, even if another extension language has a
213 "stop" method: other kinds of breakpoints may be implemented using
214 this method, e.g., "finish breakpoints" in Python. */
215 enum ext_lang_bp_stop (*breakpoint_cond_says_stop)
216 (const struct extension_language_defn *, struct breakpoint *);
217
a149683b 218 /* The next two are used to connect GDB's SIGINT handling with the
6dddc817
DE
219 extension language's.
220
221 Terminology: If an extension language can use GDB's SIGINT handling then
222 we say the extension language has "cooperative SIGINT handling".
223 Python is an example of this.
224
225 These need not be implemented, but if one of them is implemented
226 then they all must be. */
227
6dddc817
DE
228 /* Set the SIGINT indicator.
229 This is called by GDB's SIGINT handler and must be async-safe. */
230 void (*set_quit_flag) (const struct extension_language_defn *);
231
14872939 232 /* Return true if a SIGINT has occurred.
6dddc817 233 This is expected to also clear the indicator. */
14872939 234 bool (*check_quit_flag) (const struct extension_language_defn *);
6dddc817
DE
235
236 /* Called before gdb prints its prompt, giving extension languages an
237 opportunity to change it with set_prompt.
238 Returns EXT_LANG_RC_OK if the prompt was changed, EXT_LANG_RC_NOP if
239 the prompt was not changed, and EXT_LANG_RC_ERROR if an error was
240 encountered.
241 Extension languages are called in order, and once the prompt is
242 changed or an error occurs no further languages are called. */
243 enum ext_lang_rc (*before_prompt) (const struct extension_language_defn *,
244 const char *current_gdb_prompt);
e81e7f5e 245
e81e7f5e
SC
246 /* Return a vector of matching xmethod workers defined in this
247 extension language. The workers service methods with name
248 METHOD_NAME on objects of type OBJ_TYPE. The vector is returned
ba18742c
SM
249 in DM_VEC.
250
251 This field may be NULL if the extension language does not support
252 xmethods. */
e81e7f5e
SC
253 enum ext_lang_rc (*get_matching_xmethod_workers)
254 (const struct extension_language_defn *extlang,
255 struct type *obj_type,
256 const char *method_name,
ba18742c 257 std::vector<xmethod_worker_up> *dm_vec);
f6474de9
TT
258
259 /* Colorize a source file. NAME is the source file's name, and
260 CONTENTS is the contents of the file. This should either return
261 colorized (using ANSI terminal escapes) version of the contents,
262 or an empty option. */
6b09f134 263 std::optional<std::string> (*colorize) (const std::string &name,
f6474de9 264 const std::string &contents);
e867795e
AB
265
266 /* Colorize a single line of disassembler output, CONTENT. This should
267 either return colorized (using ANSI terminal escapes) version of the
268 contents, or an empty optional. */
6b09f134 269 std::optional<std::string> (*colorize_disasm) (const std::string &content,
e867795e 270 gdbarch *gdbarch);
e4ae3025
AB
271
272 /* Print a single instruction from ADDRESS in architecture GDBARCH. INFO
273 is the standard libopcodes disassembler_info structure. Bytes for the
274 instruction being printed should be read using INFO->read_memory_func
275 as the actual instruction bytes might be in a buffer.
276
277 Use INFO->fprintf_func to print the results of the disassembly, and
278 return the length of the instruction.
279
280 If no instruction can be disassembled then return an empty value and
281 other extension languages will get a chance to perform the
282 disassembly. */
6b09f134 283 std::optional<int> (*print_insn) (struct gdbarch *gdbarch,
e4ae3025
AB
284 CORE_ADDR address,
285 struct disassemble_info *info);
661d98a3
AB
286
287 /* Give extension languages a chance to deal with missing debug
288 information. OBJFILE is the file for which GDB was unable to find
289 any debug information. */
290 ext_lang_missing_debuginfo_result
291 (*handle_missing_debuginfo) (const struct extension_language_defn *,
292 struct objfile *objfile);
6dddc817
DE
293};
294
295/* State necessary to restore a signal handler to its previous value. */
296
297struct signal_handler
298{
299 /* Non-zero if "handler" has been set. */
300 int handler_saved;
301
302 /* The signal handler. */
a40805d4 303 sighandler_t handler;
6dddc817
DE
304};
305
306/* State necessary to restore the currently active extension language
1a860409 307 to its previous value. */
6dddc817
DE
308
309struct active_ext_lang_state
310{
311 /* The previously active extension language. */
312 const struct extension_language_defn *ext_lang;
313
314 /* Its SIGINT handler. */
315 struct signal_handler sigint_handler;
316};
317
6dddc817
DE
318extern struct active_ext_lang_state *set_active_ext_lang
319 (const struct extension_language_defn *);
320
321extern void restore_active_ext_lang (struct active_ext_lang_state *previous);
322
323#endif /* EXTENSION_PRIV_H */