108 if (extlang->language == lang)
112 gdb_assert_not_reached (
"unable to find extension_language_defn");
120 int file_len = strlen (file);
121 int extension_len = strlen (extension);
123 return (file_len > extension_len
124 && strcmp (&file[file_len - extension_len], extension) == 0);
161 if (extlang->
ops != NULL)
176 error (_(
"Scripting in the \"%s\" language is not supported"
177 " in this copy of GDB."),
187 FILE *stream,
const char *file)
197 FILE *stream,
const char *file)
209 return extlang->
name;
335 if (extlang->ops !=
nullptr
336 && extlang->ops->initialize != NULL)
339 extlang->ops->initialize (extlang);
362 if (extlang->ops != NULL
363 && extlang->ops->eval_from_control_command != NULL)
365 extlang->ops->eval_from_control_command (extlang, cmd);
373 gdb_assert_not_reached (
"unknown extension language in command_line");
391 if (extlang->ops !=
nullptr
410 if (extlang->ops !=
nullptr
411 && extlang->ops->start_type_printers != NULL)
412 extlang->ops->start_type_printers (extlang,
this);
421gdb::unique_xmalloc_ptr<char>
427 gdb::unique_xmalloc_ptr<char> result;
430 if (extlang->ops ==
nullptr
431 || extlang->ops->apply_type_printers == NULL)
433 rc = extlang->ops->apply_type_printers (extlang, printers,
type,
438 gdb_assert (result !=
nullptr);
445 gdb_assert_not_reached (
"bad return from apply_type_printers");
456 if (extlang->ops !=
nullptr
457 && extlang->ops->free_type_printers != NULL)
458 extlang->ops->free_type_printers (extlang,
this);
478 struct ui_file *stream,
int recurse,
486 if (extlang->ops ==
nullptr
487 || extlang->ops->apply_val_pretty_printer == NULL)
489 rc = extlang->ops->apply_val_pretty_printer (extlang, val, stream,
500 gdb_assert_not_reached (
"bad return from apply_val_pretty_printer");
529 frame_filter_flags
flags,
532 int frame_low,
int frame_high)
538 if (extlang->ops ==
nullptr
539 || extlang->ops->apply_frame_filter == NULL)
541 status = extlang->ops->apply_frame_filter (extlang, frame,
flags,
543 frame_low, frame_high);
567 if (extlang->ops !=
nullptr
568 && extlang->ops->preserve_values != NULL)
569 extlang->ops->preserve_values (extlang,
objfile, copied_types);
588 if (extlang->ops !=
nullptr
589 && extlang->language != skip_lang
590 && extlang->ops->breakpoint_has_cond != NULL
591 && extlang->ops->breakpoint_has_cond (extlang, b))
613 if (extlang->ops !=
nullptr
614 && extlang->ops->breakpoint_cond_says_stop != NULL)
672 if (previous->
handler != handle_sigint_for_compare)
680void (*hook_set_active_ext_lang) () =
nullptr;
748 if (selftests::hook_set_active_ext_lang)
749 selftests::hook_set_active_ext_lang ();
802 gdb_assert (previous ==
nullptr);
863 if (extlang->ops !=
nullptr
864 && extlang->ops->check_quit_flag != NULL)
865 if (extlang->ops->check_quit_flag (extlang) != 0)
887 std::vector<xmethod_worker_up> *workers)
895 if (extlang->ops ==
nullptr
896 || extlang->ops->get_matching_xmethod_workers == NULL)
899 rc = extlang->ops->get_matching_xmethod_workers (extlang,
903 error (_(
"Error while looking for matching xmethod workers "
904 "defined in %s."), extlang->capitalized_name);
913 std::vector<type *> type_array;
917 error (_(
"Error while looking for arg types of a xmethod worker "
933 error (_(
"Error while fetching result type of an xmethod worker "
942gdb::optional<std::string>
945 gdb::optional<std::string> result;
949 if (extlang->ops ==
nullptr
950 || extlang->ops->colorize ==
nullptr)
952 result = extlang->ops->colorize (filename, contents);
953 if (result.has_value ())
962gdb::optional<std::string>
965 gdb::optional<std::string> result;
969 if (extlang->ops ==
nullptr
970 || extlang->ops->colorize_disasm ==
nullptr)
972 result = extlang->ops->colorize_disasm (content,
gdbarch);
973 if (result.has_value ())
984 struct disassemble_info *info)
988 if (extlang->ops ==
nullptr
989 || extlang->ops->print_insn ==
nullptr)
992 = extlang->ops->print_insn (
gdbarch, address, info);
1012 if (extlang->ops ==
nullptr
1013 || extlang->ops->before_prompt == NULL)
1015 rc = extlang->ops->before_prompt (extlang, current_gdb_prompt);
1024 gdb_assert_not_reached (
"bad return from before_prompt");
bool auto_load_gdb_scripts_enabled(const struct extension_language_defn *extlang)
void auto_load_objfile_script(struct objfile *objfile, const struct extension_language_defn *language)
scoped_disable_cooperative_sigint_handling()
bool m_prev_cooperative_sigint_handling_disabled
~scoped_disable_cooperative_sigint_handling()
struct active_ext_lang_state * m_prev_active_ext_lang_state
void script_from_file(FILE *stream, const char *file)
void quit_serial_event_clear(void)
void quit_serial_event_set(void)
void handle_sigint(int sig)
struct active_ext_lang_state * set_active_ext_lang(const struct extension_language_defn *)
void restore_active_ext_lang(struct active_ext_lang_state *previous)
int ext_lang_present_p(const struct extension_language_defn *extlang)
void _initialize_extension()
void eval_ext_lang_from_control_command(struct command_line *cmd)
int check_quit_flag(void)
void preserve_ext_lang_values(struct objfile *objfile, htab_t copied_types)
static const std::array< const extension_language_defn *, 2 > extension_languages
gdb::optional< int > ext_lang_print_insn(struct gdbarch *gdbarch, CORE_ADDR address, struct disassemble_info *info)
void ext_lang_initialization(void)
gdb::optional< std::string > ext_lang_colorize_disasm(const std::string &content, gdbarch *gdbarch)
const char * ext_lang_suffix(const struct extension_language_defn *extlang)
objfile_script_sourcer_func * ext_lang_objfile_script_sourcer(const struct extension_language_defn *extlang)
script_sourcer_func * ext_lang_script_sourcer(const struct extension_language_defn *extlang)
static void install_gdb_sigint_handler(struct signal_handler *previous)
static objfile_script_sourcer_func source_gdb_objfile_script
const char * ext_lang_name(const struct extension_language_defn *extlang)
static bool cooperative_sigint_handling_disabled
void restore_active_ext_lang(struct active_ext_lang_state *previous)
bool ext_lang_auto_load_enabled(const struct extension_language_defn *extlang)
int ext_lang_initialized_p(const struct extension_language_defn *extlang)
const struct extension_language_defn extension_language_gdb
const struct extension_language_defn * get_breakpoint_cond_ext_lang(struct breakpoint *b, enum extension_language skip_lang)
const struct extension_language_defn * get_ext_lang_defn(enum extension_language lang)
static int has_extension(const char *file, const char *extension)
const char * ext_lang_capitalized_name(const struct extension_language_defn *extlang)
static void install_ext_sigint_handler(const struct signal_handler *handler_state)
void throw_ext_lang_unsupported(const struct extension_language_defn *extlang)
const struct extension_language_defn * get_ext_lang_of_file(const char *file)
static const struct extension_language_script_ops extension_language_gdb_script_ops
void auto_load_ext_lang_scripts_for_objfile(struct objfile *objfile)
static void ext_lang_before_prompt(const char *current_gdb_prompt)
static script_sourcer_func source_gdb_script
const char * ext_lang_auto_load_suffix(const struct extension_language_defn *extlang)
enum ext_lang_bt_status apply_ext_lang_frame_filter(frame_info_ptr frame, frame_filter_flags flags, enum ext_lang_frame_args args_type, struct ui_out *out, int frame_low, int frame_high)
bool breakpoint_ext_lang_cond_says_stop(struct breakpoint *b)
void get_matching_xmethod_workers(struct type *type, const char *method_name, std::vector< xmethod_worker_up > *workers)
gdb::unique_xmalloc_ptr< char > apply_ext_lang_type_printers(struct ext_lang_type_printers *printers, struct type *type)
int apply_ext_lang_val_pretty_printer(struct value *val, struct ui_file *stream, int recurse, const struct value_print_options *options, const struct language_defn *language)
gdb::optional< std::string > ext_lang_colorize(const std::string &filename, const std::string &contents)
struct active_ext_lang_state * set_active_ext_lang(const struct extension_language_defn *now_active)
objfile_script_executor_func * ext_lang_objfile_script_executor(const struct extension_language_defn *extlang)
static const struct extension_language_defn * active_ext_lang
const struct extension_language_defn extension_language_gdb
void script_sourcer_func(const struct extension_language_defn *, FILE *stream, const char *filename)
void objfile_script_sourcer_func(const struct extension_language_defn *, struct objfile *, FILE *stream, const char *filename)
void objfile_script_executor_func(const struct extension_language_defn *, struct objfile *, const char *name, const char *script)
mach_port_t kern_return_t mach_port_t mach_msg_type_name_t msgportsPoly mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
const struct extension_language_defn extension_language_guile
c_c_handler_ftype * install_sigint_handler(c_c_handler_ftype *fn)
observable< const char * > before_prompt
const struct extension_language_defn extension_language_python
struct signal_handler sigint_handler
const struct extension_language_defn * ext_lang
enum command_control_type control_type
~ext_lang_type_printers()
enum extension_language language
const char * auto_load_suffix
const char * capitalized_name
const struct extension_language_script_ops * script_ops
const struct extension_language_ops * ops
enum ext_lang_bp_stop(* breakpoint_cond_says_stop)(const struct extension_language_defn *, struct breakpoint *)
void(* set_quit_flag)(const struct extension_language_defn *)
int(* initialized)(const struct extension_language_defn *)
int(* check_quit_flag)(const struct extension_language_defn *)
bool(* auto_load_enabled)(const struct extension_language_defn *)
script_sourcer_func * script_sourcer
objfile_script_executor_func * objfile_script_executor
objfile_script_sourcer_func * objfile_script_sourcer
DISABLE_COPY_AND_ASSIGN(scoped_default_signal)
sighandler_t m_old_sig_handler
virtual enum ext_lang_rc do_get_arg_types(std::vector< type * > *type_args)=0
std::vector< type * > get_arg_types()
const extension_language_defn * m_extlang
virtual enum ext_lang_rc do_get_result_type(struct value *obj, gdb::array_view< value * > args, struct type **result_type_ptr)=0
type * get_result_type(value *object, gdb::array_view< value * > args)