2008-08-06 19:41:33 +00:00
|
|
|
/* Gdb/Python header for private use by Python module.
|
|
|
|
|
2010-01-01 07:32:07 +00:00
|
|
|
Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
|
2008-08-06 19:41:33 +00:00
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
|
|
|
|
#ifndef GDB_PYTHON_INTERNAL_H
|
|
|
|
#define GDB_PYTHON_INTERNAL_H
|
|
|
|
|
|
|
|
/* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t
|
|
|
|
needed by pyport.h. */
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
/* /usr/include/features.h on linux systems will define _POSIX_C_SOURCE
|
|
|
|
if it sees _GNU_SOURCE (which config.h will define).
|
|
|
|
pyconfig.h defines _POSIX_C_SOURCE to a different value than
|
|
|
|
/usr/include/features.h does causing compilation to fail.
|
|
|
|
To work around this, undef _POSIX_C_SOURCE before we include Python.h. */
|
|
|
|
#undef _POSIX_C_SOURCE
|
|
|
|
|
|
|
|
#if HAVE_LIBPYTHON2_4
|
|
|
|
#include "python2.4/Python.h"
|
2009-05-28 01:05:14 +00:00
|
|
|
#include "python2.4/frameobject.h"
|
2009-01-05 20:48:51 +00:00
|
|
|
/* Py_ssize_t is not defined until 2.5.
|
|
|
|
Logical type for Py_ssize_t is Py_intptr_t, but that fails in 64-bit
|
|
|
|
compilation due to several apparent mistakes in python2.4 API, so we
|
|
|
|
use 'int' instead. */
|
|
|
|
typedef int Py_ssize_t;
|
2008-08-06 19:41:33 +00:00
|
|
|
#elif HAVE_LIBPYTHON2_5
|
|
|
|
#include "python2.5/Python.h"
|
2009-05-28 01:05:14 +00:00
|
|
|
#include "python2.5/frameobject.h"
|
2008-08-06 19:41:33 +00:00
|
|
|
#elif HAVE_LIBPYTHON2_6
|
|
|
|
#include "python2.6/Python.h"
|
2009-05-28 01:05:14 +00:00
|
|
|
#include "python2.6/frameobject.h"
|
2008-08-06 19:41:33 +00:00
|
|
|
#else
|
|
|
|
#error "Unable to find usable Python.h"
|
|
|
|
#endif
|
|
|
|
|
2008-11-21 14:59:56 +00:00
|
|
|
/* If Python.h does not define WITH_THREAD, then the various
|
|
|
|
GIL-related functions will not be defined. However,
|
|
|
|
PyGILState_STATE will be. */
|
|
|
|
#ifndef WITH_THREAD
|
|
|
|
#define PyGILState_Ensure() ((PyGILState_STATE) 0)
|
2010-02-17 14:58:54 +00:00
|
|
|
#define PyGILState_Release(ARG) ((void)(ARG))
|
2008-11-21 14:59:56 +00:00
|
|
|
#define PyEval_InitThreads() 0
|
2010-02-17 14:58:54 +00:00
|
|
|
#define PyThreadState_Swap(ARG) ((void)(ARG))
|
2008-11-21 14:59:56 +00:00
|
|
|
#define PyEval_InitThreads() 0
|
2008-12-22 16:25:17 +00:00
|
|
|
#define PyEval_ReleaseLock() 0
|
2008-11-21 14:59:56 +00:00
|
|
|
#endif
|
|
|
|
|
2008-10-16 03:54:00 +00:00
|
|
|
struct value;
|
* python/python-internal.h (struct language_defn): Declare.
(python_gdbarch, python_language): Likewise.
(ensure_python_env): Add prototype.
(make_cleanup_py_restore_gil): Remove prototype.
* python/python.c: Include "arch-utils.h", "value.h" and "language.h".
(python_gdbarch, python_language): New global variables.
(struct python_env): New data type.
(ensure_python_env, restore_python_env): New functions.
(eval_python_from_control_command): Call ensure_python_env to
install current architecture and language.
(python_command, gdbpy_new_objfile): Likewise.
* python/python-cmd.c: Include "arch-utils.h" and "language.h".
(cmdpy_destroyer, cmdpy_function, cmdpy_completer): Call
ensure_python_env.
* python/python-type.c (clean_up_objfile_types): Likewise.
* python/python-objfile.c: Include "language.h".
(clean_up_objfile): Call ensure_python_env.
* python/python-prettyprint.c (apply_val_pretty_printer): Likewise.
(apply_varobj_pretty_printer): Do not call PyGILState_Ensure.
* varobj.c (varobj_ensure_python_env): New helper function.
(varobj_get_display_hint, update_dynamic_varobj_children,
install_default_visualizer, varobj_set_visualizer, free_variable,
value_get_print_value): Call it.
(value_get_print_value): Add varobj argument instead of pretty
printer argument. Update all callers.
* python/python-utils.c (py_gil_restore, make_cleanup_py_restore_gil):
Remove.
* value.h (internal_function_fn): Add GDBARCH and LANGUAGE argument.
(call_internal_function): Likewise.
* value.c (call_internal_function): Likewise. Pass to handler.
* eval.c (evaluate_subexp_standard): Update call.
* python/python-function.c: Include "language.h".
(fnpy_call): Add GDBARCH and LANGAUAGE arguments and call
make_cleanup_python_env.
* python/python-value.c (builtin_type_pyint, builtin_type_pyfloat,
builtin_type_pylong, builtin_type_pybool, builtin_type_pychar,
valpy_str): Use python_gdbarch and python_language instead of
current_gdbarch and current_language.
* python/python-type.c (typy_lookup_typename): Likewise.
2009-07-02 17:04:23 +00:00
|
|
|
struct language_defn;
|
2008-08-06 19:41:33 +00:00
|
|
|
|
|
|
|
extern PyObject *gdb_module;
|
2008-10-16 03:54:00 +00:00
|
|
|
extern PyTypeObject value_object_type;
|
|
|
|
|
2009-02-04 21:55:40 +00:00
|
|
|
PyObject *gdbpy_history (PyObject *self, PyObject *args);
|
2009-03-30 19:54:33 +00:00
|
|
|
PyObject *gdbpy_frame_stop_reason_string (PyObject *, PyObject *);
|
|
|
|
PyObject *gdbpy_selected_frame (PyObject *self, PyObject *args);
|
2009-05-28 00:47:20 +00:00
|
|
|
PyObject *gdbpy_lookup_type (PyObject *self, PyObject *args, PyObject *kw);
|
2010-01-14 08:03:37 +00:00
|
|
|
PyObject *gdbpy_create_lazy_string_object (CORE_ADDR address, long length,
|
|
|
|
const char *encoding, struct type *type);
|
2008-10-16 03:54:00 +00:00
|
|
|
|
|
|
|
PyObject *value_to_value_object (struct value *v);
|
2009-05-28 00:47:20 +00:00
|
|
|
PyObject *type_to_type_object (struct type *);
|
2009-05-28 00:40:24 +00:00
|
|
|
PyObject *objfile_to_objfile_object (struct objfile *);
|
|
|
|
|
|
|
|
PyObject *objfpy_get_printers (PyObject *, void *);
|
2008-10-16 03:54:00 +00:00
|
|
|
|
2009-05-28 01:05:14 +00:00
|
|
|
struct value *value_object_to_value (PyObject *self);
|
2008-10-16 03:54:00 +00:00
|
|
|
struct value *convert_value_from_python (PyObject *obj);
|
2009-05-28 00:47:20 +00:00
|
|
|
struct type *type_object_to_type (PyObject *obj);
|
2008-10-16 03:54:00 +00:00
|
|
|
|
|
|
|
void gdbpy_initialize_values (void);
|
2009-03-30 19:54:33 +00:00
|
|
|
void gdbpy_initialize_frames (void);
|
2009-02-06 21:33:59 +00:00
|
|
|
void gdbpy_initialize_commands (void);
|
2009-05-28 00:47:20 +00:00
|
|
|
void gdbpy_initialize_types (void);
|
gdb/
2009-03-05 Tom Tromey <tromey@redhat.com>
Add support for convenience functions in Python.
* Makefile.in (SUBDIR_PYTHON_OBS): Add python-function.o.
(SUBDIR_PYTHON_SRCS): Add python-function.c.
(python-function.o): New target.
* eval.c: Include "python/python.h" and <ctype.h>.
(evaluate_subexp_standard): Handle values of type
TYPE_CODE_INTERNAL_FUNCTION.
* gdbtypes.h (type_code): Add TYPE_CODE_INTERNAL_FUNCTION.
* parse.c (write_exp_string): Remove duplicate word in comment.
* python/python-function.c: New file.
* python/python-internal.h (gdbpy_initialize_functions): Add
prototype.
* python/python.c (_initialize_python): Call
gdbpy_initialize_functions.
* valprint.c (value_check_printable): Handle values of type
TYPE_CODE_INTERNAL_FUNCTION.
* value.c: Include "cli/cli-decode.h".
(internal_function): New struct.
(functionlist, internal_fn_type): New static variables.
(lookup_only_internalvar,
lookup_internalvar): Add const qualifier to name argument.
(create_internalvar): Likewise. Initialize new field.
(set_internal_var): Fix typo in comment. Don't allow assignment
to canonical variable.
(value_create_internal_function, value_internal_function_name,
call_internal_function, function_command, function_destroyer,
add_internal_function): New functions.
(_initialize_values): Create `function' placeholder command.
Initialize internal_fn_type.
* value.h (lookup_only_internalvar, create_internalvar,
lookup_internalvar): Add const qualifier to name argument.
(internal_function_fn, add_internal_function, call_internal_function,
value_internal_function_name): Add prototypes.
(struct internalvar) <canonical>: New field.
gdb/doc/
2008-03-05 Tom Tromey <tromey@redhat.com>
* gdb.texinfo (Convenience Vars): Document convenience functions.
(Functions In Python): New node.
(Python API): Update.
gdb/testsuite/
2009-03-05 Thiago Jung Bauermann <bauerman@br.ibm.com>
* gdb.python/python-function.exp: New file.
2009-03-21 03:03:56 +00:00
|
|
|
void gdbpy_initialize_functions (void);
|
2009-05-28 00:40:24 +00:00
|
|
|
void gdbpy_initialize_objfile (void);
|
2010-01-14 08:03:37 +00:00
|
|
|
void gdbpy_initialize_lazy_string (void);
|
2008-08-06 19:41:33 +00:00
|
|
|
|
|
|
|
struct cleanup *make_cleanup_py_decref (PyObject *py);
|
* python/python-internal.h (struct language_defn): Declare.
(python_gdbarch, python_language): Likewise.
(ensure_python_env): Add prototype.
(make_cleanup_py_restore_gil): Remove prototype.
* python/python.c: Include "arch-utils.h", "value.h" and "language.h".
(python_gdbarch, python_language): New global variables.
(struct python_env): New data type.
(ensure_python_env, restore_python_env): New functions.
(eval_python_from_control_command): Call ensure_python_env to
install current architecture and language.
(python_command, gdbpy_new_objfile): Likewise.
* python/python-cmd.c: Include "arch-utils.h" and "language.h".
(cmdpy_destroyer, cmdpy_function, cmdpy_completer): Call
ensure_python_env.
* python/python-type.c (clean_up_objfile_types): Likewise.
* python/python-objfile.c: Include "language.h".
(clean_up_objfile): Call ensure_python_env.
* python/python-prettyprint.c (apply_val_pretty_printer): Likewise.
(apply_varobj_pretty_printer): Do not call PyGILState_Ensure.
* varobj.c (varobj_ensure_python_env): New helper function.
(varobj_get_display_hint, update_dynamic_varobj_children,
install_default_visualizer, varobj_set_visualizer, free_variable,
value_get_print_value): Call it.
(value_get_print_value): Add varobj argument instead of pretty
printer argument. Update all callers.
* python/python-utils.c (py_gil_restore, make_cleanup_py_restore_gil):
Remove.
* value.h (internal_function_fn): Add GDBARCH and LANGUAGE argument.
(call_internal_function): Likewise.
* value.c (call_internal_function): Likewise. Pass to handler.
* eval.c (evaluate_subexp_standard): Update call.
* python/python-function.c: Include "language.h".
(fnpy_call): Add GDBARCH and LANGAUAGE arguments and call
make_cleanup_python_env.
* python/python-value.c (builtin_type_pyint, builtin_type_pyfloat,
builtin_type_pylong, builtin_type_pybool, builtin_type_pychar,
valpy_str): Use python_gdbarch and python_language instead of
current_gdbarch and current_language.
* python/python-type.c (typy_lookup_typename): Likewise.
2009-07-02 17:04:23 +00:00
|
|
|
|
|
|
|
struct cleanup *ensure_python_env (struct gdbarch *gdbarch,
|
|
|
|
const struct language_defn *language);
|
|
|
|
|
|
|
|
extern struct gdbarch *python_gdbarch;
|
|
|
|
extern const struct language_defn *python_language;
|
2008-08-06 19:41:33 +00:00
|
|
|
|
|
|
|
/* Use this after a TRY_EXCEPT to throw the appropriate Python
|
|
|
|
exception. */
|
|
|
|
#define GDB_PY_HANDLE_EXCEPTION(Exception) \
|
|
|
|
do { \
|
|
|
|
if (Exception.reason < 0) \
|
|
|
|
return PyErr_Format (Exception.reason == RETURN_QUIT \
|
|
|
|
? PyExc_KeyboardInterrupt : PyExc_RuntimeError, \
|
|
|
|
"%s", Exception.message); \
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
|
|
|
void gdbpy_print_stack (void);
|
|
|
|
|
|
|
|
PyObject *python_string_to_unicode (PyObject *obj);
|
|
|
|
char *unicode_to_target_string (PyObject *unicode_str);
|
|
|
|
char *python_string_to_target_string (PyObject *obj);
|
2009-07-10 10:35:17 +00:00
|
|
|
PyObject *python_string_to_target_python_string (PyObject *obj);
|
2009-02-04 21:55:40 +00:00
|
|
|
char *python_string_to_host_string (PyObject *obj);
|
2009-02-05 21:16:09 +00:00
|
|
|
PyObject *target_string_to_unicode (const gdb_byte *str, int length);
|
2009-02-04 21:55:40 +00:00
|
|
|
int gdbpy_is_string (PyObject *obj);
|
2010-01-14 08:03:37 +00:00
|
|
|
int gdbpy_is_lazy_string (PyObject *result);
|
|
|
|
gdb_byte *gdbpy_extract_lazy_string (PyObject *string,
|
|
|
|
struct type **str_type,
|
|
|
|
long *length, char **encoding);
|
2008-08-06 19:41:33 +00:00
|
|
|
|
2009-05-28 01:09:20 +00:00
|
|
|
/* Note that these are declared here, and not in python.h with the
|
|
|
|
other pretty-printer functions, because they refer to PyObject. */
|
2009-07-10 10:35:17 +00:00
|
|
|
PyObject *apply_varobj_pretty_printer (PyObject *print_obj,
|
|
|
|
struct value **replacement);
|
2009-05-28 01:09:20 +00:00
|
|
|
PyObject *gdbpy_get_varobj_pretty_printer (struct value *value);
|
|
|
|
char *gdbpy_get_display_hint (PyObject *printer);
|
|
|
|
PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args);
|
|
|
|
|
2009-02-06 21:33:59 +00:00
|
|
|
extern PyObject *gdbpy_doc_cst;
|
2009-05-28 01:05:14 +00:00
|
|
|
extern PyObject *gdbpy_children_cst;
|
|
|
|
extern PyObject *gdbpy_to_string_cst;
|
|
|
|
extern PyObject *gdbpy_display_hint_cst;
|
2009-02-06 21:33:59 +00:00
|
|
|
|
2008-08-06 19:41:33 +00:00
|
|
|
#endif /* GDB_PYTHON_INTERNAL_H */
|