X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=gdb%2Fextension.h;h=e9980a7c89724a6152f179a7416be57405f9804a;hb=484b3c325d8182cd7b7da4ceeaedc238c7f80b5c;hp=b80c5fff73fbec0ebb407f8f574370b2c0e9dccb;hpb=6dddc817c1680fc97756cbcb017fcf306fa5d07c;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/extension.h b/gdb/extension.h index b80c5fff73..e9980a7c89 100644 --- a/gdb/extension.h +++ b/gdb/extension.h @@ -1,6 +1,6 @@ /* Interface between gdb and its extension languages. - Copyright (C) 2013 Free Software Foundation, Inc. + Copyright (C) 2014-2016 Free Software Foundation, Inc. This file is part of GDB. @@ -21,6 +21,7 @@ #define EXTENSION_H #include "mi/mi-cmds.h" /* For PRINT_NO_VALUES, etc. */ +#include "common/vec.h" struct breakpoint; struct command_line; @@ -47,13 +48,20 @@ typedef void objfile_script_sourcer_func (const struct extension_language_defn *, struct objfile *, FILE *stream, const char *filename); +/* A function to execute a script for an objfile. + Any exceptions are not caught, and are passed to the caller. */ +typedef void objfile_script_executor_func + (const struct extension_language_defn *, + struct objfile *, const char *name, const char *script); + /* Enum of each extension(/scripting) language. */ enum extension_language { EXT_LANG_NONE, EXT_LANG_GDB, - EXT_LANG_PYTHON + EXT_LANG_PYTHON, + EXT_LANG_GUILE }; /* Extension language frame-filter status return values. */ @@ -137,6 +145,26 @@ struct ext_lang_type_printers /* Type-printers from Python. */ void *py_type_printers; }; + +/* A type which holds its extension language specific xmethod worker data. */ + +struct xmethod_worker +{ + /* The language the xmethod worker is implemented in. */ + const struct extension_language_defn *extlang; + + /* The extension language specific data for this xmethod worker. */ + void *data; + + /* The TYPE_CODE_XMETHOD value corresponding to this worker. + Always use value_of_xmethod to access it. */ + struct value *value; +}; + +typedef struct xmethod_worker *xmethod_worker_ptr; +DEF_VEC_P (xmethod_worker_ptr); +typedef VEC (xmethod_worker_ptr) xmethod_worker_vec; + /* The interface for gdb's own extension(/scripting) language. */ extern const struct extension_language_defn extension_language_gdb; @@ -175,6 +203,9 @@ extern script_sourcer_func *ext_lang_script_sourcer extern objfile_script_sourcer_func *ext_lang_objfile_script_sourcer (const struct extension_language_defn *); +extern objfile_script_executor_func *ext_lang_objfile_script_executor + (const struct extension_language_defn *); + extern int ext_lang_auto_load_enabled (const struct extension_language_defn *); /* Wrappers for each extension language API function that iterate over all @@ -211,4 +242,26 @@ extern const struct extension_language_defn *get_breakpoint_cond_ext_lang extern int breakpoint_ext_lang_cond_says_stop (struct breakpoint *); +extern struct value *invoke_xmethod (struct xmethod_worker *, + struct value *, + struct value **, int nargs); + +extern struct xmethod_worker *clone_xmethod_worker (struct xmethod_worker *); + +extern struct xmethod_worker *new_xmethod_worker + (const struct extension_language_defn *extlang, void *data); + +extern void free_xmethod_worker (struct xmethod_worker *); + +extern void free_xmethod_worker_vec (void *vec); + +extern xmethod_worker_vec *get_matching_xmethod_workers + (struct type *, const char *); + +extern struct type **get_xmethod_arg_types (struct xmethod_worker *, int *); + +extern struct type *get_xmethod_result_type (struct xmethod_worker *, + struct value *object, + struct value **args, int nargs); + #endif /* EXTENSION_H */