/* Private implementation details of interface between gdb and its
extension languages.
- Copyright (C) 2014 Free Software Foundation, Inc.
+ Copyright (C) 2014-2019 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
/* 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
{
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 *);
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
{
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.
+ /* Try to pretty-print a value of type TYPE located at VAL's contents
+ buffer + 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.
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 type *type,
+ LONGEST embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
- const struct value *val, const struct value_print_options *options,
+ struct value *val, 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 *);
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<xmethod_worker_up> *dm_vec);
};
/* 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
- to is previous value. */
+ to its previous value. */
struct active_ext_lang_state
{