X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fextension-priv.h;h=8596e0a95f5216366547874edf4f6a7a33f9d9de;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=49ae6c32cae22e7e1a473b622b62754b1f6fdb62;hpb=6dddc817c1680fc97756cbcb017fcf306fa5d07c;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/extension-priv.h b/gdb/extension-priv.h index 49ae6c32ca..8596e0a95f 100644 --- a/gdb/extension-priv.h +++ b/gdb/extension-priv.h @@ -1,7 +1,7 @@ /* Private implementation details of interface between gdb and its extension languages. - Copyright (C) 2013 Free Software Foundation, Inc. + Copyright (C) 2014-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -22,26 +22,8 @@ #define EXTENSION_PRIV_H #include "extension.h" - -/* The return code for some API calls. */ - -enum ext_lang_rc - { - /* The operation completed successfully. */ - EXT_LANG_RC_OK, - - /* The operation was not performed (e.g., no pretty-printer). */ - EXT_LANG_RC_NOP, - - /* There was an error (e.g., Python error while printing a value). - When an error occurs no further extension languages are tried. - This is to preserve existing behaviour, and because it's convenient - for Python developers. - Note: This is different than encountering a memory error trying to read - a value for pretty-printing. Here we're referring to, e.g., programming - errors that trigger an exception in the extension language. */ - EXT_LANG_RC_ERROR - }; +#include +#include "cli/cli-script.h" /* High level description of an extension/scripting language. An entry for each is compiled into GDB regardless of whether the support @@ -86,7 +68,10 @@ struct extension_language_defn /* The interface for loading scripts from external extension languages, as well as GDB's own scripting language. - All of these methods are required to be implemented. */ + All of these methods are required to be implemented. + + By convention all of these functions take a pseudo-this parameter + as the first argument. */ struct extension_language_script_ops { @@ -100,6 +85,11 @@ struct extension_language_script_ops but is not required to, throw an error. */ objfile_script_sourcer_func *objfile_script_sourcer; + /* Execute a script attached to an objfile. + If there's an error while processing the script this function may, + but is not required to, throw an error. */ + objfile_script_executor_func *objfile_script_executor; + /* Return non-zero if auto-loading scripts in this extension language is enabled. */ int (*auto_load_enabled) (const struct extension_language_defn *); @@ -112,7 +102,10 @@ struct extension_language_script_ops makes no use of these. There is no (current) intention to split extension_language_ops up any further. All of these methods are optional and may be NULL, except where - otherwise indicated. */ + otherwise indicated. + + By convention all of these functions take a pseudo-this parameter + as the first argument. */ struct extension_language_ops { @@ -159,19 +152,14 @@ struct extension_language_ops void (*free_type_printers) (const struct extension_language_defn *, struct ext_lang_type_printers *); - /* Try to pretty-print a value of type TYPE located at VALADDR - + EMBEDDED_OFFSET, which came from the inferior at address ADDRESS - + EMBEDDED_OFFSET, onto stdio stream STREAM according to OPTIONS. - VAL is the whole object that came from ADDRESS. VALADDR must point to - the head of VAL's contents buffer. - Returns EXT_LANG_RC_OK upon success, EXT_LANG_RC_NOP if the value - is not recognized, and EXT_LANG_RC_ERROR if an error was encountered. */ + /* Try to pretty-print a value, onto stdio stream STREAM according + to OPTIONS. VAL is the object to print. Returns EXT_LANG_RC_OK + upon success, EXT_LANG_RC_NOP if the value is not recognized, and + EXT_LANG_RC_ERROR if an error was encountered. */ enum ext_lang_rc (*apply_val_pretty_printer) (const struct extension_language_defn *, - struct type *type, const gdb_byte *valaddr, - int embedded_offset, CORE_ADDR address, - struct ui_file *stream, int recurse, - const struct value *val, const struct value_print_options *options, + struct value *val, struct ui_file *stream, int recurse, + const struct value_print_options *options, const struct language_defn *language); /* GDB access to the "frame filter" feature. @@ -190,7 +178,8 @@ struct extension_language_ops or SCR_BT_COMPLETED on success. */ enum ext_lang_bt_status (*apply_frame_filter) (const struct extension_language_defn *, - struct frame_info *frame, int flags, enum ext_lang_frame_args args_type, + struct frame_info *frame, frame_filter_flags flags, + enum ext_lang_frame_args args_type, struct ui_out *out, int frame_low, int frame_high); /* Update values held by the extension language when OBJFILE is discarded. @@ -220,7 +209,7 @@ struct extension_language_ops enum ext_lang_bp_stop (*breakpoint_cond_says_stop) (const struct extension_language_defn *, struct breakpoint *); - /* The next three are used to connect GDB's SIGINT handling with the + /* The next two are used to connect GDB's SIGINT handling with the extension language's. Terminology: If an extension language can use GDB's SIGINT handling then @@ -230,9 +219,6 @@ struct extension_language_ops These need not be implemented, but if one of them is implemented then they all must be. */ - /* Clear the SIGINT indicator. */ - void (*clear_quit_flag) (const struct extension_language_defn *); - /* Set the SIGINT indicator. This is called by GDB's SIGINT handler and must be async-safe. */ void (*set_quit_flag) (const struct extension_language_defn *); @@ -250,6 +236,26 @@ struct extension_language_ops changed or an error occurs no further languages are called. */ enum ext_lang_rc (*before_prompt) (const struct extension_language_defn *, const char *current_gdb_prompt); + + /* Return a vector of matching xmethod workers defined in this + extension language. The workers service methods with name + METHOD_NAME on objects of type OBJ_TYPE. The vector is returned + in DM_VEC. + + This field may be NULL if the extension language does not support + xmethods. */ + enum ext_lang_rc (*get_matching_xmethod_workers) + (const struct extension_language_defn *extlang, + struct type *obj_type, + const char *method_name, + std::vector *dm_vec); + + /* Colorize a source file. NAME is the source file's name, and + CONTENTS is the contents of the file. This should either return + colorized (using ANSI terminal escapes) version of the contents, + or an empty option. */ + gdb::optional (*colorize) (const std::string &name, + const std::string &contents); }; /* State necessary to restore a signal handler to its previous value. */ @@ -260,11 +266,11 @@ struct signal_handler int handler_saved; /* The signal handler. */ - RETSIGTYPE (*handler) (); + sighandler_t handler; }; /* State necessary to restore the currently active extension language - to is previous value. */ + to its previous value. */ struct active_ext_lang_state {