From 883964a75e8c6531f167391354f1a4d83d203988 Mon Sep 17 00:00:00 2001 From: Siva Chandra Date: Tue, 20 May 2014 06:53:04 -0700 Subject: Xmethod support in Python. * python/py-xmethods.c: New file. * python/py-objfile.c (objfile_object): New field 'xmethods'. (objfpy_dealloc): XDECREF on the new xmethods field. (objfpy_new, objfile_to_objfile_object): Initialize xmethods field. (objfpy_get_xmethods): New function. (objfile_getset): New entry 'xmethods'. * python/py-progspace.c (pspace_object): New field 'xmethods'. (pspy_dealloc): XDECREF on the new xmethods field. (pspy_new, pspace_to_pspace_object): Initialize xmethods field. (pspy_get_xmethods): New function. (pspace_getset): New entry 'xmethods'. * python/python-internal.h: Add declarations for new functions. * python/python.c (_initialize_python): Invoke gdbpy_initialize_xmethods. * python/lib/gdb/__init__.py (xmethods): New attribute. * python/lib/gdb/xmethod.py: New file. * python/lib/gdb/command/xmethods.py: New file. testuite/ * gdb.python/py-xmethods.cc: New testcase to test xmethods. * gdb.python/py-xmethods.exp: New tests to test xmethods. * gdb.python/py-xmethods.py: Python script supporting the new testcase and tests. --- gdb/python/python-internal.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'gdb/python/python-internal.h') diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 07650f7..9c06621 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -307,6 +307,24 @@ extern enum ext_lang_bp_stop gdbpy_breakpoint_cond_says_stop (const struct extension_language_defn *, struct breakpoint *); extern int gdbpy_breakpoint_has_cond (const struct extension_language_defn *, struct breakpoint *b); + +extern void *gdbpy_clone_xmethod_worker_data + (const struct extension_language_defn *extlang, void *data); +extern void gdbpy_free_xmethod_worker_data + (const struct extension_language_defn *extlang, void *data); +extern enum ext_lang_rc gdbpy_get_matching_xmethod_workers + (const struct extension_language_defn *extlang, + struct type *obj_type, const char *method_name, + xmethod_worker_vec **dm_vec); +extern enum ext_lang_rc gdbpy_get_xmethod_arg_types + (const struct extension_language_defn *extlang, + struct xmethod_worker *worker, + int *nargs, + struct type ***arg_types); +extern struct value *gdbpy_invoke_xmethod + (const struct extension_language_defn *extlang, + struct xmethod_worker *worker, + struct value *obj, struct value **args, int nargs); PyObject *gdbpy_history (PyObject *self, PyObject *args); PyObject *gdbpy_breakpoints (PyObject *, PyObject *); @@ -345,11 +363,13 @@ PyObject *pspace_to_pspace_object (struct program_space *) CPYCHECKER_RETURNS_BORROWED_REF; PyObject *pspy_get_printers (PyObject *, void *); PyObject *pspy_get_frame_filters (PyObject *, void *); +PyObject *pspy_get_xmethods (PyObject *, void *); PyObject *objfile_to_objfile_object (struct objfile *) CPYCHECKER_RETURNS_BORROWED_REF; PyObject *objfpy_get_printers (PyObject *, void *); PyObject *objfpy_get_frame_filters (PyObject *, void *); +PyObject *objfpy_get_xmethods (PyObject *, void *); PyObject *gdbarch_to_arch_object (struct gdbarch *gdbarch); @@ -430,6 +450,8 @@ int gdbpy_initialize_new_objfile_event (void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; int gdbpy_initialize_arch (void) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; +int gdbpy_initialize_xmethods (void) + CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION; struct cleanup *make_cleanup_py_decref (PyObject *py); struct cleanup *make_cleanup_py_xdecref (PyObject *py); -- cgit v1.1