diff options
Diffstat (limited to 'gdb/extension.c')
-rw-r--r-- | gdb/extension.c | 41 |
1 files changed, 10 insertions, 31 deletions
diff --git a/gdb/extension.c b/gdb/extension.c index ec1aa13..d34dbcd 100644 --- a/gdb/extension.c +++ b/gdb/extension.c @@ -1,6 +1,6 @@ /* Interface between gdb and its extension languages. - Copyright (C) 2014-2024 Free Software Foundation, Inc. + Copyright (C) 2014-2025 Free Software Foundation, Inc. This file is part of GDB. @@ -33,6 +33,7 @@ #include "guile/guile.h" #include <array> #include "inferior.h" +#include "gdbsupport/scoped_signal_handler.h" static script_sourcer_func source_gdb_script; static objfile_script_sourcer_func source_gdb_objfile_script; @@ -84,7 +85,7 @@ const struct extension_language_defn extension_language_gdb = static const std::array<const extension_language_defn *, 2> extension_languages { - /* To preserve existing behaviour, python should always appear first. */ + /* To preserve existing behavior, python should always appear first. */ &extension_language_python, &extension_language_guile, }; @@ -297,28 +298,6 @@ ext_lang_auto_load_enabled (const struct extension_language_defn *extlang) } -/* RAII class used to temporarily return SIG to its default handler. */ - -template<int SIG> -struct scoped_default_signal -{ - scoped_default_signal () - { m_old_sig_handler = signal (SIG, SIG_DFL); } - - ~scoped_default_signal () - { signal (SIG, m_old_sig_handler); } - - DISABLE_COPY_AND_ASSIGN (scoped_default_signal); - -private: - /* The previous signal handler that needs to be restored. */ - sighandler_t m_old_sig_handler; -}; - -/* Class to temporarily return SIGINT to its default handler. */ - -using scoped_default_sigint = scoped_default_signal<SIGINT>; - /* Functions that iterate over all extension languages. These only iterate over external extension languages, not including GDB's own extension/scripting language, unless otherwise indicated. */ @@ -334,7 +313,7 @@ ext_lang_initialization (void) if (extlang->ops != nullptr && extlang->ops->initialize != NULL) { - scoped_default_sigint set_sigint_to_default_handler; + scoped_signal_handler<SIGINT> set_sigint_to_default_handler (SIG_DFL); extlang->ops->initialize (extlang); } } @@ -584,7 +563,8 @@ apply_ext_lang_ptwrite_filter (btrace_thread_info *btinfo) preserve_one_value. */ void -preserve_ext_lang_values (struct objfile *objfile, htab_t copied_types) +preserve_ext_lang_values (struct objfile *objfile, + copied_types_hash_t &copied_types) { for (const struct extension_language_defn *extlang : extension_languages) { @@ -994,7 +974,8 @@ xmethod_worker::get_result_type (value *object, gdb::array_view<value *> args) /* See extension.h. */ std::optional<std::string> -ext_lang_colorize (const std::string &filename, const std::string &contents) +ext_lang_colorize (const std::string &filename, const std::string &contents, + enum language lang) { std::optional<std::string> result; @@ -1003,7 +984,7 @@ ext_lang_colorize (const std::string &filename, const std::string &contents) if (extlang->ops == nullptr || extlang->ops->colorize == nullptr) continue; - result = extlang->ops->colorize (filename, contents); + result = extlang->ops->colorize (filename, contents, lang); if (result.has_value ()) return result; } @@ -1121,9 +1102,7 @@ ext_lang_before_prompt (const char *current_gdb_prompt) } } -void _initialize_extension (); -void -_initialize_extension () +INIT_GDB_FILE (extension) { gdb::observers::before_prompt.attach (ext_lang_before_prompt, "extension"); } |