]> Git Repo - binutils.git/blob - gdb/extension-priv.h
gdb: move go_language class declaration into header file
[binutils.git] / gdb / extension-priv.h
1 /* Private implementation details of interface between gdb and its
2    extension languages.
3
4    Copyright (C) 2014-2020 Free Software Foundation, Inc.
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
24 #include "extension.h"
25 #include <signal.h>
26 #include "cli/cli-script.h"
27
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
33 struct 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.
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.  */
75
76 struct 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
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
93   /* Return non-zero if auto-loading scripts in this extension language
94      is enabled.  */
95   int (*auto_load_enabled) (const struct extension_language_defn *);
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
105    otherwise indicated.
106
107    By convention all of these functions take a pseudo-this parameter
108    as the first argument.  */
109
110 struct extension_language_ops
111 {
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 *);
116
117   /* Return non-zero if the extension language successfully initialized.
118      This method is required.  */
119   int (*initialized) (const struct extension_language_defn *);
120
121   /* Process a sequence of commands embedded in GDB's own scripting language.
122      E.g.,
123      python
124      print 42
125      end  */
126   void (*eval_from_control_command) (const struct extension_language_defn *,
127                                      struct command_line *);
128
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.  */
133
134   /* Called before printing a type.  */
135   void (*start_type_printers) (const struct extension_language_defn *,
136                                struct ext_lang_type_printers *);
137
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);
149
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 *);
154
155   /* Try to pretty-print a value, onto stdio stream STREAM according
156      to OPTIONS.  VAL is the object to print.  Returns EXT_LANG_RC_OK
157      upon success, EXT_LANG_RC_NOP if the value is not recognized, and
158      EXT_LANG_RC_ERROR if an error was encountered.  */
159   enum ext_lang_rc (*apply_val_pretty_printer)
160     (const struct extension_language_defn *,
161      struct value *val, struct ui_file *stream, int recurse,
162      const struct value_print_options *options,
163      const struct language_defn *language);
164
165   /* GDB access to the "frame filter" feature.
166      FRAME is the source frame to start frame-filter invocation.  FLAGS is an
167      integer holding the flags for printing.  The following elements of
168      the FRAME_FILTER_FLAGS enum denotes the make-up of FLAGS:
169      PRINT_LEVEL is a flag indicating whether to print the frame's
170      relative level in the output.  PRINT_FRAME_INFO is a flag that
171      indicates whether this function should print the frame
172      information, PRINT_ARGS is a flag that indicates whether to print
173      frame arguments, and PRINT_LOCALS, likewise, with frame local
174      variables.  ARGS_TYPE is an enumerator describing the argument
175      format, OUT is the output stream to print.  FRAME_LOW is the
176      beginning of the slice of frames to print, and FRAME_HIGH is the
177      upper limit of the frames to count.  Returns SCR_BT_ERROR on error,
178      or SCR_BT_COMPLETED on success.  */
179   enum ext_lang_bt_status (*apply_frame_filter)
180     (const struct extension_language_defn *,
181      struct frame_info *frame, frame_filter_flags flags,
182      enum ext_lang_frame_args args_type,
183      struct ui_out *out, int frame_low, int frame_high);
184
185   /* Update values held by the extension language when OBJFILE is discarded.
186      New global types must be created for every such value, which must then be
187      updated to use the new types.
188      This function typically just iterates over all appropriate values and
189      calls preserve_one_value for each one.
190      COPIED_TYPES is used to prevent cycles / duplicates and is passed to
191      preserve_one_value.  */
192   void (*preserve_values) (const struct extension_language_defn *,
193                            struct objfile *objfile, htab_t copied_types);
194
195   /* Return non-zero if there is a stop condition for the breakpoint.
196      This is used to implement the restriction that a breakpoint may have
197      at most one condition.  */
198   int (*breakpoint_has_cond) (const struct extension_language_defn *,
199                               struct breakpoint *);
200
201   /* Return a value of enum ext_lang_bp_stop indicating if there is a stop
202      condition for the breakpoint, and if so whether the program should
203      stop.  This is called when the program has stopped at the specified
204      breakpoint.
205      While breakpoints can have at most one condition, this is called for
206      every extension language, even if another extension language has a
207      "stop" method: other kinds of breakpoints may be implemented using
208      this method, e.g., "finish breakpoints" in Python.  */
209   enum ext_lang_bp_stop (*breakpoint_cond_says_stop)
210     (const struct extension_language_defn *, struct breakpoint *);
211
212   /* The next two are used to connect GDB's SIGINT handling with the
213      extension language's.
214
215      Terminology: If an extension language can use GDB's SIGINT handling then
216      we say the extension language has "cooperative SIGINT handling".
217      Python is an example of this.
218
219      These need not be implemented, but if one of them is implemented
220      then they all must be.  */
221
222   /* Set the SIGINT indicator.
223      This is called by GDB's SIGINT handler and must be async-safe.  */
224   void (*set_quit_flag) (const struct extension_language_defn *);
225
226   /* Return non-zero if a SIGINT has occurred.
227      This is expected to also clear the indicator.  */
228   int (*check_quit_flag) (const struct extension_language_defn *);
229
230   /* Called before gdb prints its prompt, giving extension languages an
231      opportunity to change it with set_prompt.
232      Returns EXT_LANG_RC_OK if the prompt was changed, EXT_LANG_RC_NOP if
233      the prompt was not changed, and EXT_LANG_RC_ERROR if an error was
234      encountered.
235      Extension languages are called in order, and once the prompt is
236      changed or an error occurs no further languages are called.  */
237   enum ext_lang_rc (*before_prompt) (const struct extension_language_defn *,
238                                      const char *current_gdb_prompt);
239
240   /* Return a vector of matching xmethod workers defined in this
241      extension language.  The workers service methods with name
242      METHOD_NAME on objects of type OBJ_TYPE.  The vector is returned
243      in DM_VEC.
244
245      This field may be NULL if the extension language does not support
246      xmethods.  */
247   enum ext_lang_rc (*get_matching_xmethod_workers)
248     (const struct extension_language_defn *extlang,
249      struct type *obj_type,
250      const char *method_name,
251      std::vector<xmethod_worker_up> *dm_vec);
252
253   /* Colorize a source file.  NAME is the source file's name, and
254      CONTENTS is the contents of the file.  This should either return
255      colorized (using ANSI terminal escapes) version of the contents,
256      or an empty option.  */
257   gdb::optional<std::string> (*colorize) (const std::string &name,
258                                           const std::string &contents);
259 };
260
261 /* State necessary to restore a signal handler to its previous value.  */
262
263 struct signal_handler
264 {
265   /* Non-zero if "handler" has been set.  */
266   int handler_saved;
267
268   /* The signal handler.  */
269   sighandler_t handler;
270 };
271
272 /* State necessary to restore the currently active extension language
273    to its previous value.  */
274
275 struct active_ext_lang_state
276 {
277   /* The previously active extension language.  */
278   const struct extension_language_defn *ext_lang;
279
280   /* Its SIGINT handler.  */
281   struct signal_handler sigint_handler;
282 };
283
284 extern const struct extension_language_defn *get_active_ext_lang (void);
285
286 extern struct active_ext_lang_state *set_active_ext_lang
287   (const struct extension_language_defn *);
288
289 extern void restore_active_ext_lang (struct active_ext_lang_state *previous);
290
291 #endif /* EXTENSION_PRIV_H */
This page took 0.042267 seconds and 4 git commands to generate.