1 /* Interface between gdb and its extension languages.
3 Copyright (C) 2014-2020 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 /* Note: With few exceptions, external functions and variables in this file
21 have "ext_lang" in the name, and no other symbol in gdb does. */
26 #include "auto-load.h"
27 #include "breakpoint.h"
28 #include "event-top.h"
29 #include "extension.h"
30 #include "extension-priv.h"
31 #include "observable.h"
32 #include "cli/cli-script.h"
33 #include "python/python.h"
34 #include "guile/guile.h"
36 /* Iterate over all external extension languages, regardless of whether the
37 support has been compiled in or not.
38 This does not include GDB's own scripting language. */
40 #define ALL_EXTENSION_LANGUAGES(i, extlang) \
41 for (/*int*/ i = 0, extlang = extension_languages[0]; \
43 extlang = extension_languages[++i])
45 /* Iterate over all external extension languages that are supported.
46 This does not include GDB's own scripting language. */
48 #define ALL_ENABLED_EXTENSION_LANGUAGES(i, extlang) \
49 for (/*int*/ i = 0, extlang = extension_languages[0]; \
51 extlang = extension_languages[++i]) \
52 if (extlang->ops != NULL)
54 static script_sourcer_func source_gdb_script
;
55 static objfile_script_sourcer_func source_gdb_objfile_script
;
57 /* GDB's own scripting language.
58 This exists, in part, to support auto-loading ${prog}-gdb.gdb scripts. */
60 static const struct extension_language_script_ops
61 extension_language_gdb_script_ops
=
64 source_gdb_objfile_script
,
65 NULL
, /* objfile_script_executor */
66 auto_load_gdb_scripts_enabled
69 const struct extension_language_defn extension_language_gdb
=
75 /* We fall back to interpreting a script as a GDB script if it doesn't
76 match the other scripting languages, but for consistency's sake
77 give it a formal suffix. */
81 /* cli_control_type: This is never used: GDB's own scripting language
82 has a variety of control types (if, while, etc.). */
85 &extension_language_gdb_script_ops
,
87 /* The rest of the extension language interface isn't supported by GDB's own
88 extension/scripting language. */
92 /* NULL-terminated table of all external (non-native) extension languages.
94 The order of appearance in the table is important.
95 When multiple extension languages provide the same feature, for example
96 a pretty-printer for a particular type, which one gets used?
97 The algorithm employed here is "the first one wins". For example, in
98 the case of pretty-printers this means the first one to provide a
99 pretty-printed value is the one that is used. This algorithm is employed
102 static const struct extension_language_defn
* const extension_languages
[] =
104 /* To preserve existing behaviour, python should always appear first. */
105 &extension_language_python
,
106 &extension_language_guile
,
110 /* Return a pointer to the struct extension_language_defn object of
111 extension language LANG.
112 This always returns a non-NULL pointer, even if support for the language
113 is not compiled into this copy of GDB. */
115 const struct extension_language_defn
*
116 get_ext_lang_defn (enum extension_language lang
)
119 const struct extension_language_defn
*extlang
;
121 gdb_assert (lang
!= EXT_LANG_NONE
);
123 if (lang
== EXT_LANG_GDB
)
124 return &extension_language_gdb
;
126 ALL_EXTENSION_LANGUAGES (i
, extlang
)
128 if (extlang
->language
== lang
)
132 gdb_assert_not_reached ("unable to find extension_language_defn");
135 /* Return TRUE if FILE has extension EXTENSION. */
138 has_extension (const char *file
, const char *extension
)
140 int file_len
= strlen (file
);
141 int extension_len
= strlen (extension
);
143 return (file_len
> extension_len
144 && strcmp (&file
[file_len
- extension_len
], extension
) == 0);
147 /* Return the extension language of FILE, or NULL if
148 the extension language of FILE is not recognized.
149 This is done by looking at the file's suffix. */
151 const struct extension_language_defn
*
152 get_ext_lang_of_file (const char *file
)
155 const struct extension_language_defn
*extlang
;
157 if (has_extension (file
, extension_language_gdb
.suffix
))
158 return &extension_language_gdb
;
160 ALL_EXTENSION_LANGUAGES (i
, extlang
)
162 if (has_extension (file
, extlang
->suffix
))
169 /* Return non-zero if support for the specified extension language
173 ext_lang_present_p (const struct extension_language_defn
*extlang
)
175 return extlang
->script_ops
!= NULL
;
178 /* Return non-zero if the specified extension language has successfully
182 ext_lang_initialized_p (const struct extension_language_defn
*extlang
)
184 if (extlang
->ops
!= NULL
)
186 /* This method is required. */
187 gdb_assert (extlang
->ops
->initialized
!= NULL
);
188 return extlang
->ops
->initialized (extlang
);
194 /* Throw an error indicating EXTLANG is not supported in this copy of GDB. */
197 throw_ext_lang_unsupported (const struct extension_language_defn
*extlang
)
199 error (_("Scripting in the \"%s\" language is not supported"
200 " in this copy of GDB."),
201 ext_lang_capitalized_name (extlang
));
204 /* Methods for GDB's own extension/scripting language. */
206 /* The extension_language_script_ops.script_sourcer "method". */
209 source_gdb_script (const struct extension_language_defn
*extlang
,
210 FILE *stream
, const char *file
)
212 script_from_file (stream
, file
);
215 /* The extension_language_script_ops.objfile_script_sourcer "method". */
218 source_gdb_objfile_script (const struct extension_language_defn
*extlang
,
219 struct objfile
*objfile
,
220 FILE *stream
, const char *file
)
222 script_from_file (stream
, file
);
225 /* Accessors for "public" attributes of struct extension_language. */
227 /* Return the "name" field of EXTLANG. */
230 ext_lang_name (const struct extension_language_defn
*extlang
)
232 return extlang
->name
;
235 /* Return the "capitalized_name" field of EXTLANG. */
238 ext_lang_capitalized_name (const struct extension_language_defn
*extlang
)
240 return extlang
->capitalized_name
;
243 /* Return the "suffix" field of EXTLANG. */
246 ext_lang_suffix (const struct extension_language_defn
*extlang
)
248 return extlang
->suffix
;
251 /* Return the "auto_load_suffix" field of EXTLANG. */
254 ext_lang_auto_load_suffix (const struct extension_language_defn
*extlang
)
256 return extlang
->auto_load_suffix
;
259 /* extension_language_script_ops wrappers. */
261 /* Return the script "sourcer" function for EXTLANG.
262 This is the function that loads and processes a script.
263 If support for this language isn't compiled in, NULL is returned. */
265 script_sourcer_func
*
266 ext_lang_script_sourcer (const struct extension_language_defn
*extlang
)
268 if (extlang
->script_ops
== NULL
)
271 /* The extension language is required to implement this function. */
272 gdb_assert (extlang
->script_ops
->script_sourcer
!= NULL
);
274 return extlang
->script_ops
->script_sourcer
;
277 /* Return the objfile script "sourcer" function for EXTLANG.
278 This is the function that loads and processes a script for a particular
280 If support for this language isn't compiled in, NULL is returned. */
282 objfile_script_sourcer_func
*
283 ext_lang_objfile_script_sourcer (const struct extension_language_defn
*extlang
)
285 if (extlang
->script_ops
== NULL
)
288 /* The extension language is required to implement this function. */
289 gdb_assert (extlang
->script_ops
->objfile_script_sourcer
!= NULL
);
291 return extlang
->script_ops
->objfile_script_sourcer
;
294 /* Return the objfile script "executor" function for EXTLANG.
295 This is the function that executes a script for a particular objfile.
296 If support for this language isn't compiled in, NULL is returned.
297 The extension language is not required to implement this function. */
299 objfile_script_executor_func
*
300 ext_lang_objfile_script_executor
301 (const struct extension_language_defn
*extlang
)
303 if (extlang
->script_ops
== NULL
)
306 return extlang
->script_ops
->objfile_script_executor
;
309 /* Return non-zero if auto-loading of EXTLANG scripts is enabled.
310 Zero is returned if support for this language isn't compiled in. */
313 ext_lang_auto_load_enabled (const struct extension_language_defn
*extlang
)
315 if (extlang
->script_ops
== NULL
)
318 /* The extension language is required to implement this function. */
319 gdb_assert (extlang
->script_ops
->auto_load_enabled
!= NULL
);
321 return extlang
->script_ops
->auto_load_enabled (extlang
);
324 /* Functions that iterate over all extension languages.
325 These only iterate over external extension languages, not including
326 GDB's own extension/scripting language, unless otherwise indicated. */
328 /* Wrapper to call the extension_language_ops.finish_initialization "method"
329 for each compiled-in extension language. */
332 finish_ext_lang_initialization (void)
335 const struct extension_language_defn
*extlang
;
337 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
339 if (extlang
->ops
->finish_initialization
!= NULL
)
340 extlang
->ops
->finish_initialization (extlang
);
344 /* Invoke the appropriate extension_language_ops.eval_from_control_command
345 method to perform CMD, which is a list of commands in an extension language.
347 This function is what implements, for example:
356 eval_ext_lang_from_control_command (struct command_line
*cmd
)
359 const struct extension_language_defn
*extlang
;
361 ALL_EXTENSION_LANGUAGES (i
, extlang
)
363 if (extlang
->cli_control_type
== cmd
->control_type
)
365 if (extlang
->ops
!= NULL
366 && extlang
->ops
->eval_from_control_command
!= NULL
)
368 extlang
->ops
->eval_from_control_command (extlang
, cmd
);
371 /* The requested extension language is not supported in this GDB. */
372 throw_ext_lang_unsupported (extlang
);
376 gdb_assert_not_reached ("unknown extension language in command_line");
379 /* Search for and load scripts for OBJFILE written in extension languages.
380 This includes GDB's own scripting language.
382 This function is what implements the loading of OBJFILE-gdb.py and
386 auto_load_ext_lang_scripts_for_objfile (struct objfile
*objfile
)
389 const struct extension_language_defn
*extlang
;
391 extlang
= &extension_language_gdb
;
392 if (ext_lang_auto_load_enabled (extlang
))
393 auto_load_objfile_script (objfile
, extlang
);
395 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
397 if (ext_lang_auto_load_enabled (extlang
))
398 auto_load_objfile_script (objfile
, extlang
);
402 /* Interface to type pretty-printers implemented in an extension language. */
404 /* Call this at the start when preparing to pretty-print a type.
405 The result is a pointer to an opaque object (to the caller) to be passed
406 to apply_ext_lang_type_printers and free_ext_lang_type_printers.
408 We don't know in advance which extension language will provide a
409 pretty-printer for the type, so all are initialized. */
411 ext_lang_type_printers::ext_lang_type_printers ()
414 const struct extension_language_defn
*extlang
;
416 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
418 if (extlang
->ops
->start_type_printers
!= NULL
)
419 extlang
->ops
->start_type_printers (extlang
, this);
423 /* Iteratively try the type pretty-printers specified by PRINTERS
424 according to the standard search order (specified by extension_languages),
425 returning the result of the first one that succeeds.
426 If there was an error, or if no printer succeeds, then NULL is returned. */
429 apply_ext_lang_type_printers (struct ext_lang_type_printers
*printers
,
433 const struct extension_language_defn
*extlang
;
435 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
440 if (extlang
->ops
->apply_type_printers
== NULL
)
442 rc
= extlang
->ops
->apply_type_printers (extlang
, printers
, type
,
447 gdb_assert (result
!= NULL
);
449 case EXT_LANG_RC_ERROR
:
451 case EXT_LANG_RC_NOP
:
454 gdb_assert_not_reached ("bad return from apply_type_printers");
461 ext_lang_type_printers::~ext_lang_type_printers ()
464 const struct extension_language_defn
*extlang
;
466 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
468 if (extlang
->ops
->free_type_printers
!= NULL
)
469 extlang
->ops
->free_type_printers (extlang
, this);
473 /* Try to pretty-print a value of type TYPE located at VAL's contents
474 buffer + EMBEDDED_OFFSET, which came from the inferior at address
475 ADDRESS + EMBEDDED_OFFSET, onto stdio stream STREAM according to
477 VAL is the whole object that came from ADDRESS.
478 Returns non-zero if the value was successfully pretty-printed.
480 Extension languages are tried in the order specified by
481 extension_languages. The first one to provide a pretty-printed
484 If an error is encountered in a pretty-printer, no further extension
486 Note: This is different than encountering a memory error trying to read a
487 value for pretty-printing. Here we're referring to, e.g., programming
488 errors that trigger an exception in the extension language. */
491 apply_ext_lang_val_pretty_printer (struct type
*type
,
492 LONGEST embedded_offset
, CORE_ADDR address
,
493 struct ui_file
*stream
, int recurse
,
495 const struct value_print_options
*options
,
496 const struct language_defn
*language
)
499 const struct extension_language_defn
*extlang
;
501 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
505 if (extlang
->ops
->apply_val_pretty_printer
== NULL
)
507 rc
= extlang
->ops
->apply_val_pretty_printer (extlang
, type
,
508 embedded_offset
, address
,
509 stream
, recurse
, val
,
515 case EXT_LANG_RC_ERROR
:
517 case EXT_LANG_RC_NOP
:
520 gdb_assert_not_reached ("bad return from apply_val_pretty_printer");
527 /* GDB access to the "frame filter" feature.
528 FRAME is the source frame to start frame-filter invocation. FLAGS is an
529 integer holding the flags for printing. The following elements of
530 the FRAME_FILTER_FLAGS enum denotes the make-up of FLAGS:
531 PRINT_LEVEL is a flag indicating whether to print the frame's
532 relative level in the output. PRINT_FRAME_INFO is a flag that
533 indicates whether this function should print the frame
534 information, PRINT_ARGS is a flag that indicates whether to print
535 frame arguments, and PRINT_LOCALS, likewise, with frame local
536 variables. ARGS_TYPE is an enumerator describing the argument
537 format, OUT is the output stream to print. FRAME_LOW is the
538 beginning of the slice of frames to print, and FRAME_HIGH is the
539 upper limit of the frames to count. Returns EXT_LANG_BT_ERROR on error,
540 or EXT_LANG_BT_COMPLETED on success.
542 Extension languages are tried in the order specified by
543 extension_languages. The first one to provide a filter "wins".
544 If there is an error (EXT_LANG_BT_ERROR) it is reported immediately
545 rather than trying filters in other extension languages. */
547 enum ext_lang_bt_status
548 apply_ext_lang_frame_filter (struct frame_info
*frame
,
549 frame_filter_flags flags
,
550 enum ext_lang_frame_args args_type
,
552 int frame_low
, int frame_high
)
555 const struct extension_language_defn
*extlang
;
557 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
559 enum ext_lang_bt_status status
;
561 if (extlang
->ops
->apply_frame_filter
== NULL
)
563 status
= extlang
->ops
->apply_frame_filter (extlang
, frame
, flags
,
565 frame_low
, frame_high
);
566 /* We use the filters from the first extension language that has
567 applicable filters. Also, an error is reported immediately
568 rather than continue trying. */
569 if (status
!= EXT_LANG_BT_NO_FILTERS
)
573 return EXT_LANG_BT_NO_FILTERS
;
576 /* Update values held by the extension language when OBJFILE is discarded.
577 New global types must be created for every such value, which must then be
578 updated to use the new types.
579 The function typically just iterates over all appropriate values and
580 calls preserve_one_value for each one.
581 COPIED_TYPES is used to prevent cycles / duplicates and is passed to
582 preserve_one_value. */
585 preserve_ext_lang_values (struct objfile
*objfile
, htab_t copied_types
)
588 const struct extension_language_defn
*extlang
;
590 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
592 if (extlang
->ops
->preserve_values
!= NULL
)
593 extlang
->ops
->preserve_values (extlang
, objfile
, copied_types
);
597 /* If there is a stop condition implemented in an extension language for
598 breakpoint B, return a pointer to the extension language's definition.
599 Otherwise return NULL.
600 If SKIP_LANG is not EXT_LANG_NONE, skip checking this language.
601 This is for the case where we're setting a new condition: Only one
602 condition is allowed, so when setting a condition for any particular
603 extension language, we need to check if any other extension language
604 already has a condition set. */
606 const struct extension_language_defn
*
607 get_breakpoint_cond_ext_lang (struct breakpoint
*b
,
608 enum extension_language skip_lang
)
611 const struct extension_language_defn
*extlang
;
613 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
615 if (extlang
->language
!= skip_lang
616 && extlang
->ops
->breakpoint_has_cond
!= NULL
617 && extlang
->ops
->breakpoint_has_cond (extlang
, b
))
624 /* Return whether a stop condition for breakpoint B says to stop.
625 True is also returned if there is no stop condition for B. */
628 breakpoint_ext_lang_cond_says_stop (struct breakpoint
*b
)
631 const struct extension_language_defn
*extlang
;
632 enum ext_lang_bp_stop stop
= EXT_LANG_BP_STOP_UNSET
;
634 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
636 /* There is a rule that a breakpoint can have at most one of any of a
637 CLI or extension language condition. However, Python hacks in "finish
638 breakpoints" on top of the "stop" check, so we have to call this for
639 every language, even if we could first determine whether a "stop"
641 if (extlang
->ops
->breakpoint_cond_says_stop
!= NULL
)
643 enum ext_lang_bp_stop this_stop
644 = extlang
->ops
->breakpoint_cond_says_stop (extlang
, b
);
646 if (this_stop
!= EXT_LANG_BP_STOP_UNSET
)
648 /* Even though we have to check every extension language, only
649 one of them can return yes/no (because only one of them
650 can have a "stop" condition). */
651 gdb_assert (stop
== EXT_LANG_BP_STOP_UNSET
);
657 return stop
== EXT_LANG_BP_STOP_NO
? 0 : 1;
660 /* ^C/SIGINT support.
661 This requires cooperation with the extension languages so the support
664 /* This flag tracks quit requests when we haven't called out to an
665 extension language. it also holds quit requests when we transition to
666 an extension language that doesn't have cooperative SIGINT handling. */
667 static int quit_flag
;
669 /* The current extension language we've called out to, or
670 extension_language_gdb if there isn't one.
671 This must be set everytime we call out to an extension language, and reset
672 to the previous value when it returns. Note that the previous value may
673 be a different (or the same) extension language. */
674 static const struct extension_language_defn
*active_ext_lang
675 = &extension_language_gdb
;
677 /* Return the currently active extension language. */
679 const struct extension_language_defn
*
680 get_active_ext_lang (void)
682 return active_ext_lang
;
685 /* Install a SIGINT handler. */
688 install_sigint_handler (const struct signal_handler
*handler_state
)
690 gdb_assert (handler_state
->handler_saved
);
692 signal (SIGINT
, handler_state
->handler
);
695 /* Install GDB's SIGINT handler, storing the previous version in *PREVIOUS.
696 As a simple optimization, if the previous version was GDB's SIGINT handler
697 then mark the previous handler as not having been saved, and thus it won't
701 install_gdb_sigint_handler (struct signal_handler
*previous
)
703 /* Save here to simplify comparison. */
704 sighandler_t handle_sigint_for_compare
= handle_sigint
;
706 previous
->handler
= signal (SIGINT
, handle_sigint
);
707 if (previous
->handler
!= handle_sigint_for_compare
)
708 previous
->handler_saved
= 1;
710 previous
->handler_saved
= 0;
713 /* Set the currently active extension language to NOW_ACTIVE.
714 The result is a pointer to a malloc'd block of memory to pass to
715 restore_active_ext_lang.
717 N.B. This function must be called every time we call out to an extension
718 language, and the result must be passed to restore_active_ext_lang
721 If there is a pending SIGINT it is "moved" to the now active extension
722 language, if it supports cooperative SIGINT handling (i.e., it provides
723 {clear,set,check}_quit_flag methods). If the extension language does not
724 support cooperative SIGINT handling, then the SIGINT is left queued and
725 we require the non-cooperative extension language to call check_quit_flag
726 at appropriate times.
727 It is important for the extension language to call check_quit_flag if it
728 installs its own SIGINT handler to prevent the situation where a SIGINT
729 is queued on entry, extension language code runs for a "long" time possibly
730 serving one or more SIGINTs, and then returns. Upon return, if
731 check_quit_flag is not called, the original SIGINT will be thrown.
732 Non-cooperative extension languages are free to install their own SIGINT
733 handler but the original must be restored upon return, either itself
734 or via restore_active_ext_lang. */
736 struct active_ext_lang_state
*
737 set_active_ext_lang (const struct extension_language_defn
*now_active
)
739 struct active_ext_lang_state
*previous
740 = XCNEW (struct active_ext_lang_state
);
742 previous
->ext_lang
= active_ext_lang
;
743 previous
->sigint_handler
.handler_saved
= 0;
744 active_ext_lang
= now_active
;
746 if (target_terminal::is_ours ())
748 /* If the newly active extension language uses cooperative SIGINT
749 handling then ensure GDB's SIGINT handler is installed. */
750 if (now_active
->language
== EXT_LANG_GDB
751 || now_active
->ops
->check_quit_flag
!= NULL
)
752 install_gdb_sigint_handler (&previous
->sigint_handler
);
754 /* If there's a SIGINT recorded in the cooperative extension languages,
755 move it to the new language, or save it in GDB's global flag if the
756 newly active extension language doesn't use cooperative SIGINT
758 if (check_quit_flag ())
765 /* Restore active extension language from PREVIOUS. */
768 restore_active_ext_lang (struct active_ext_lang_state
*previous
)
770 active_ext_lang
= previous
->ext_lang
;
772 if (target_terminal::is_ours ())
774 /* Restore the previous SIGINT handler if one was saved. */
775 if (previous
->sigint_handler
.handler_saved
)
776 install_sigint_handler (&previous
->sigint_handler
);
778 /* If there's a SIGINT recorded in the cooperative extension languages,
779 move it to the new language, or save it in GDB's global flag if the
780 newly active extension language doesn't use cooperative SIGINT
782 if (check_quit_flag ())
788 /* Set the quit flag.
789 This only sets the flag in the currently active extension language.
790 If the currently active extension language does not have cooperative
791 SIGINT handling, then GDB's global flag is set, and it is up to the
792 extension language to call check_quit_flag. The extension language
793 is free to install its own SIGINT handler, but we still need to handle
799 if (active_ext_lang
->ops
!= NULL
800 && active_ext_lang
->ops
->set_quit_flag
!= NULL
)
801 active_ext_lang
->ops
->set_quit_flag (active_ext_lang
);
806 /* Now wake up the event loop, or any interruptible_select. Do
807 this after setting the flag, because signals on Windows
808 actually run on a separate thread, and thus otherwise the
809 main code could be woken up and find quit_flag still
811 quit_serial_event_set ();
815 /* Return true if the quit flag has been set, false otherwise.
816 Note: The flag is cleared as a side-effect.
817 The flag is checked in all extension languages that support cooperative
818 SIGINT handling, not just the current one. This simplifies transitions. */
821 check_quit_flag (void)
824 const struct extension_language_defn
*extlang
;
826 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
828 if (extlang
->ops
->check_quit_flag
!= NULL
)
829 if (extlang
->ops
->check_quit_flag (extlang
) != 0)
833 /* This is written in a particular way to avoid races. */
836 /* No longer need to wake up the event loop or any
837 interruptible_select. The caller handles the quit
839 quit_serial_event_clear ();
847 /* See extension.h. */
850 get_matching_xmethod_workers (struct type
*type
, const char *method_name
,
851 std::vector
<xmethod_worker_up
> *workers
)
854 const struct extension_language_defn
*extlang
;
856 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
860 /* If an extension language does not support xmethods, ignore
862 if (extlang
->ops
->get_matching_xmethod_workers
== NULL
)
865 rc
= extlang
->ops
->get_matching_xmethod_workers (extlang
,
868 if (rc
== EXT_LANG_RC_ERROR
)
869 error (_("Error while looking for matching xmethod workers "
870 "defined in %s."), extlang
->capitalized_name
);
874 /* See extension.h. */
877 xmethod_worker::get_arg_types ()
879 std::vector
<type
*> type_array
;
881 ext_lang_rc rc
= do_get_arg_types (&type_array
);
882 if (rc
== EXT_LANG_RC_ERROR
)
883 error (_("Error while looking for arg types of a xmethod worker "
884 "defined in %s."), m_extlang
->capitalized_name
);
889 /* See extension.h. */
892 xmethod_worker::get_result_type (value
*object
, gdb::array_view
<value
*> args
)
896 ext_lang_rc rc
= do_get_result_type (object
, args
, &result_type
);
897 if (rc
== EXT_LANG_RC_ERROR
)
899 error (_("Error while fetching result type of an xmethod worker "
900 "defined in %s."), m_extlang
->capitalized_name
);
906 /* See extension.h. */
908 gdb::optional
<std::string
>
909 ext_lang_colorize (const std::string
&filename
, const std::string
&contents
)
912 const struct extension_language_defn
*extlang
;
913 gdb::optional
<std::string
> result
;
915 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
917 if (extlang
->ops
->colorize
== nullptr)
919 result
= extlang
->ops
->colorize (filename
, contents
);
920 if (result
.has_value ())
927 /* Called via an observer before gdb prints its prompt.
928 Iterate over the extension languages giving them a chance to
929 change the prompt. The first one to change the prompt wins,
930 and no further languages are tried. */
933 ext_lang_before_prompt (const char *current_gdb_prompt
)
936 const struct extension_language_defn
*extlang
;
938 ALL_ENABLED_EXTENSION_LANGUAGES (i
, extlang
)
942 if (extlang
->ops
->before_prompt
== NULL
)
944 rc
= extlang
->ops
->before_prompt (extlang
, current_gdb_prompt
);
948 case EXT_LANG_RC_ERROR
:
950 case EXT_LANG_RC_NOP
:
953 gdb_assert_not_reached ("bad return from before_prompt");
958 void _initialize_extension ();
960 _initialize_extension ()
962 gdb::observers::before_prompt
.attach (ext_lang_before_prompt
);