aboutsummaryrefslogtreecommitdiff
path: root/gdb/extension.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/extension.c')
-rw-r--r--gdb/extension.c41
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");
}