1 /* Private implementation details of interface between gdb and its
4 Copyright (C) 2014-2018 Free Software Foundation, Inc.
6 This file is part of GDB.
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.
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.
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/>. */
21 #ifndef EXTENSION_PRIV_H
22 #define EXTENSION_PRIV_H
24 #include "extension.h"
26 #include "cli/cli-script.h"
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. */
33 struct extension_language_defn
35 /* Enum of the extension language. */
36 enum extension_language language;
38 /* The name of the extension language, lowercase. E.g., python. */
41 /* The capitalized name of the extension language.
42 For python this is "Python". For gdb this is "GDB". */
43 const char *capitalized_name;
45 /* The file suffix of this extension language. E.g., ".py". */
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;
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;
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;
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;
69 /* The interface for loading scripts from external extension languages,
70 as well as GDB's own scripting language.
71 All of these methods are required to be implemented.
73 By convention all of these functions take a pseudo-this parameter
74 as the first argument. */
76 struct extension_language_script_ops
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;
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;
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;
93 /* Return non-zero if auto-loading scripts in this extension language
95 int (*auto_load_enabled) (const struct extension_language_defn *);
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
107 By convention all of these functions take a pseudo-this parameter
108 as the first argument. */
110 struct extension_language_ops
112 /* Called at the end of gdb initialization to give the extension language
113 an opportunity to finish up. This is useful for things like adding
114 new commands where one has to wait until gdb itself is initialized. */
115 void (*finish_initialization) (const struct extension_language_defn *);
117 /* Return non-zero if the extension language successfully initialized.
118 This method is required. */
119 int (*initialized) (const struct extension_language_defn *);
121 /* Process a sequence of commands embedded in GDB's own scripting language.
126 void (*eval_from_control_command) (const struct extension_language_defn *,
127 struct command_line *);
129 /* Type-printing support:
130 start_type_printers, apply_type_printers, free_type_printers.
131 These methods are optional and may be NULL, but if one of them is
132 implemented then they all must be. */
134 /* Called before printing a type. */
135 void (*start_type_printers) (const struct extension_language_defn *,
136 struct ext_lang_type_printers *);
138 /* Try to pretty-print TYPE. If successful the pretty-printed type is
139 stored in *PRETTIED_TYPE, and the caller must free it.
140 Returns EXT_LANG_RC_OK upon success, EXT_LANG_RC_NOP if the type
141 is not recognized, and EXT_LANG_RC_ERROR if an error was encountered.
142 This function has a bit of a funny name, since it actually applies
143 recognizers, but this seemed clearer given the start_type_printers
144 and free_type_printers functions. */
145 enum ext_lang_rc (*apply_type_printers)
146 (const struct extension_language_defn *,
147 const struct ext_lang_type_printers *,
148 struct type *, char **prettied_type);
150 /* Called after a type has been printed to give the type pretty-printer
151 mechanism an opportunity to clean up. */
152 void (*free_type_printers) (const struct extension_language_defn *,
153 struct ext_lang_type_printers *);
155 /* Try to pretty-print a value of type TYPE located at VAL's contents
156 buffer + EMBEDDED_OFFSET, which came from the inferior at address
157 ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to
159 VAL is the whole object that came from ADDRESS.
160 Returns EXT_LANG_RC_OK upon success, EXT_LANG_RC_NOP if the value
161 is not recognized, and EXT_LANG_RC_ERROR if an error was encountered. */
162 enum ext_lang_rc (*apply_val_pretty_printer)
163 (const struct extension_language_defn *,
165 LONGEST embedded_offset, CORE_ADDR address,
166 struct ui_file *stream, int recurse,
167 struct value *val, const struct value_print_options *options,
168 const struct language_defn *language);
170 /* GDB access to the "frame filter" feature.
171 FRAME is the source frame to start frame-filter invocation. FLAGS is an
172 integer holding the flags for printing. The following elements of
173 the FRAME_FILTER_FLAGS enum denotes the make-up of FLAGS:
174 PRINT_LEVEL is a flag indicating whether to print the frame's
175 relative level in the output. PRINT_FRAME_INFO is a flag that
176 indicates whether this function should print the frame
177 information, PRINT_ARGS is a flag that indicates whether to print
178 frame arguments, and PRINT_LOCALS, likewise, with frame local
179 variables. ARGS_TYPE is an enumerator describing the argument
180 format, OUT is the output stream to print. FRAME_LOW is the
181 beginning of the slice of frames to print, and FRAME_HIGH is the
182 upper limit of the frames to count. Returns SCR_BT_ERROR on error,
183 or SCR_BT_COMPLETED on success. */
184 enum ext_lang_bt_status (*apply_frame_filter)
185 (const struct extension_language_defn *,
186 struct frame_info *frame, frame_filter_flags flags,
187 enum ext_lang_frame_args args_type,
188 struct ui_out *out, int frame_low, int frame_high);
190 /* Update values held by the extension language when OBJFILE is discarded.
191 New global types must be created for every such value, which must then be
192 updated to use the new types.
193 This function typically just iterates over all appropriate values and
194 calls preserve_one_value for each one.
195 COPIED_TYPES is used to prevent cycles / duplicates and is passed to
196 preserve_one_value. */
197 void (*preserve_values) (const struct extension_language_defn *,
198 struct objfile *objfile, htab_t copied_types);
200 /* Return non-zero if there is a stop condition for the breakpoint.
201 This is used to implement the restriction that a breakpoint may have
202 at most one condition. */
203 int (*breakpoint_has_cond) (const struct extension_language_defn *,
204 struct breakpoint *);
206 /* Return a value of enum ext_lang_bp_stop indicating if there is a stop
207 condition for the breakpoint, and if so whether the program should
208 stop. This is called when the program has stopped at the specified
210 While breakpoints can have at most one condition, this is called for
211 every extension language, even if another extension language has a
212 "stop" method: other kinds of breakpoints may be implemented using
213 this method, e.g., "finish breakpoints" in Python. */
214 enum ext_lang_bp_stop (*breakpoint_cond_says_stop)
215 (const struct extension_language_defn *, struct breakpoint *);
217 /* The next two are used to connect GDB's SIGINT handling with the
218 extension language's.
220 Terminology: If an extension language can use GDB's SIGINT handling then
221 we say the extension language has "cooperative SIGINT handling".
222 Python is an example of this.
224 These need not be implemented, but if one of them is implemented
225 then they all must be. */
227 /* Set the SIGINT indicator.
228 This is called by GDB's SIGINT handler and must be async-safe. */
229 void (*set_quit_flag) (const struct extension_language_defn *);
231 /* Return non-zero if a SIGINT has occurred.
232 This is expected to also clear the indicator. */
233 int (*check_quit_flag) (const struct extension_language_defn *);
235 /* Called before gdb prints its prompt, giving extension languages an
236 opportunity to change it with set_prompt.
237 Returns EXT_LANG_RC_OK if the prompt was changed, EXT_LANG_RC_NOP if
238 the prompt was not changed, and EXT_LANG_RC_ERROR if an error was
240 Extension languages are called in order, and once the prompt is
241 changed or an error occurs no further languages are called. */
242 enum ext_lang_rc (*before_prompt) (const struct extension_language_defn *,
243 const char *current_gdb_prompt);
245 /* Return a vector of matching xmethod workers defined in this
246 extension language. The workers service methods with name
247 METHOD_NAME on objects of type OBJ_TYPE. The vector is returned
250 This field may be NULL if the extension language does not support
252 enum ext_lang_rc (*get_matching_xmethod_workers)
253 (const struct extension_language_defn *extlang,
254 struct type *obj_type,
255 const char *method_name,
256 std::vector<xmethod_worker_up> *dm_vec);
259 /* State necessary to restore a signal handler to its previous value. */
261 struct signal_handler
263 /* Non-zero if "handler" has been set. */
266 /* The signal handler. */
267 sighandler_t handler;
270 /* State necessary to restore the currently active extension language
271 to its previous value. */
273 struct active_ext_lang_state
275 /* The previously active extension language. */
276 const struct extension_language_defn *ext_lang;
278 /* Its SIGINT handler. */
279 struct signal_handler sigint_handler;
282 extern const struct extension_language_defn *get_active_ext_lang (void);
284 extern struct active_ext_lang_state *set_active_ext_lang
285 (const struct extension_language_defn *);
287 extern void restore_active_ext_lang (struct active_ext_lang_state *previous);
289 #endif /* EXTENSION_PRIV_H */