/* Private implementation details of interface between gdb and its
extension languages.
- Copyright (C) 2014-2015 Free Software Foundation, Inc.
+ Copyright (C) 2014-2020 Free Software Foundation, Inc.
This file is part of GDB.
#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 <signal.h>
+#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
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 *);
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.
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.
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
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 *);
enum ext_lang_rc (*before_prompt) (const struct extension_language_defn *,
const char *current_gdb_prompt);
- /* xmethod support:
- clone_xmethod_worker_data, free_xmethod_worker_data,
- get_matching_xmethod_workers, get_xmethod_arg_types,
- invoke_xmethod.
- These methods are optional and may be NULL, but if one of them is
- implemented then they all must be. */
-
- /* Clone DATA and return a new but identical xmethod worker data
- object for this extension language. */
- void * (*clone_xmethod_worker_data)
- (const struct extension_language_defn *extlang, void *data);
-
- /* Free the DATA object of this extension language. */
- void (*free_xmethod_worker_data)
- (const struct extension_language_defn *extlang, void *data);
-
/* 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. */
+ 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,
- xmethod_worker_vec **dm_vec);
-
- /* Given a WORKER servicing a particular method, return the types
- of the arguments the method takes. The number of arguments is
- returned in NARGS, and their types are returned in the array
- ARGTYPES. */
- enum ext_lang_rc (*get_xmethod_arg_types)
- (const struct extension_language_defn *extlang,
- struct xmethod_worker *worker,
- int *nargs,
- struct type ***arg_types);
-
- /* Invoke the xmethod serviced by WORKER. The xmethod is invoked
- on OBJECT with arguments in the array ARGS. NARGS is the length of
- this array. Returns the value returned by the xmethod. */
- struct value * (*invoke_xmethod)
- (const struct extension_language_defn *extlang,
- struct xmethod_worker *worker,
- struct value *object,
- struct value **args,
- int nargs);
+ std::vector<xmethod_worker_up> *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<std::string> (*colorize) (const std::string &name,
+ const std::string &contents);
};
/* State necessary to restore a signal handler to its previous value. */
int handler_saved;
/* The signal handler. */
- RETSIGTYPE (*handler) ();
+ sighandler_t handler;
};
/* State necessary to restore the currently active extension language