Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Unified Diff: gdb/python/python-internal.h

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/python/python-config.py ('k') | gdb/ravenscar-sparc-thread.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/python/python-internal.h
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index bae61c28da821c7541d9ccbab9d977719c320bdd..125670eb97ad6cf6bdcaf8eb49c4998f05fcec2c 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -1,6 +1,6 @@
/* Gdb/Python header for private use by Python module.
- Copyright (C) 2008-2012 Free Software Foundation, Inc.
+ Copyright (C) 2008-2013 Free Software Foundation, Inc.
This file is part of GDB.
@@ -20,6 +20,46 @@
#ifndef GDB_PYTHON_INTERNAL_H
#define GDB_PYTHON_INTERNAL_H
+/* These WITH_* macros are defined by the CPython API checker that
+ comes with the Python plugin for GCC. See:
+ https://gcc-python-plugin.readthedocs.org/en/latest/cpychecker.html
+ The checker defines a WITH_ macro for each attribute it
+ exposes. */
+
+#ifdef WITH_CPYCHECKER_RETURNS_BORROWED_REF_ATTRIBUTE
+#define CPYCHECKER_RETURNS_BORROWED_REF \
+ __attribute__ ((cpychecker_returns_borrowed_ref))
+#else
+#define CPYCHECKER_RETURNS_BORROWED_REF
+#endif
+
+#ifdef WITH_CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF_ATTRIBUTE
+#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG) \
+ __attribute__ ((cpychecker_type_object_for_typedef (ARG)))
+#else
+#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
+#endif
+
+#ifdef WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE
+#define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n) \
+ __attribute__ ((cpychecker_steals_reference_to_arg (n)))
+#else
+#define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n)
+#endif
+
+#ifdef WITH_CPYCHECKER_SETS_EXCEPTION_ATTRIBUTE
+#define CPYCHECKER_SETS_EXCEPTION __attribute__ ((cpychecker_sets_exception))
+#else
+#define CPYCHECKER_SETS_EXCEPTION
+#endif
+
+#ifdef WITH_CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION_ATTRIBUTE
+#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION \
+ __attribute__ ((cpychecker_negative_result_sets_exception))
+#else
+#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
+#endif
+
#include <stdio.h>
/* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t
@@ -41,6 +81,11 @@
around technique as above. */
#undef _FILE_OFFSET_BITS
+/* A kludge to avoid redefinition of snprintf on Windows by pyerrors.h. */
+#if defined(_WIN32) && defined(HAVE_DECL_SNPRINTF)
+#define HAVE_SNPRINTF 1
+#endif
+
/* Request clean size types from Python. */
#define PY_SSIZE_T_CLEAN
@@ -49,6 +94,25 @@
from including our python/python.h header file. */
#include <Python.h>
#include <frameobject.h>
+
+#if PY_MAJOR_VERSION >= 3
+#define IS_PY3K 1
+#endif
+
+#ifdef IS_PY3K
+#define Py_TPFLAGS_HAVE_ITER 0
+#define Py_TPFLAGS_CHECKTYPES 0
+
+#define PyInt_Check PyLong_Check
+#define PyInt_FromLong PyLong_FromLong
+#define PyInt_AsLong PyLong_AsLong
+
+#define PyString_FromString PyUnicode_FromString
+#define PyString_Decode PyUnicode_Decode
+#define PyString_FromFormat PyUnicode_FromFormat
+#define PyString_Check PyUnicode_Check
+#endif
+
#if HAVE_LIBPYTHON2_4
/* 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
@@ -57,6 +121,18 @@
typedef int Py_ssize_t;
#endif
+#ifndef PyVarObject_HEAD_INIT
+/* Python 2.4 does not define PyVarObject_HEAD_INIT. */
+#define PyVarObject_HEAD_INIT(type, size) \
+ PyObject_HEAD_INIT(type) size,
+
+#endif
+
+#ifndef Py_TYPE
+/* Python 2.4 does not define Py_TYPE. */
+#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
+#endif
+
/* If Python.h does not define WITH_THREAD, then the various
GIL-related functions will not be defined. However,
PyGILState_STATE will be. */
@@ -93,8 +169,23 @@ typedef unsigned long gdb_py_ulongest;
#endif /* HAVE_LONG_LONG */
+/* Python 2.6 did not wrap Py_DECREF in 'do {...} while (0)', leading
+ to 'suggest explicit braces to avoid ambiguous ‘else’' gcc errors.
+ Wrap it ourselves, so that callers don't need to care. */
+
+static inline void
+gdb_Py_DECREF (void *op) /* ARI: editCase function */
+{
+ /* ... and Python 2.4 didn't cast OP to PyObject pointer on the
+ '(op)->ob_refcnt' references within the macro. Cast it ourselves
+ too. */
+ Py_DECREF ((PyObject *) op);
+}
+
+#undef Py_DECREF
+#define Py_DECREF(op) gdb_Py_DECREF (op)
-/* In order to be able to parse symtab_and_line_to_sal_object function
+/* In order to be able to parse symtab_and_line_to_sal_object function
a real symtab_and_line structure is needed. */
#include "symtab.h"
@@ -113,17 +204,26 @@ struct program_space;
struct bpstats;
struct inferior;
+extern int gdb_python_initialized;
+
extern PyObject *gdb_module;
-extern PyTypeObject value_object_type;
-extern PyTypeObject block_object_type;
-extern PyTypeObject symbol_object_type;
-extern PyTypeObject event_object_type;
-extern PyTypeObject events_object_type;
-extern PyTypeObject stop_event_object_type;
-extern PyTypeObject breakpoint_object_type;
-extern PyTypeObject frame_object_type;
-
-typedef struct breakpoint_object
+extern PyObject *gdb_python_module;
+extern PyTypeObject value_object_type
+ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("value_object");
+extern PyTypeObject block_object_type
+ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("block_object");
+extern PyTypeObject symbol_object_type
+ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symbol_object");
+extern PyTypeObject event_object_type
+ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
+extern PyTypeObject stop_event_object_type
+ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
+extern PyTypeObject breakpoint_object_type
+ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("breakpoint_object");
+extern PyTypeObject frame_object_type
+ CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("frame_object");
+
+typedef struct gdbpy_breakpoint_object
{
PyObject_HEAD
@@ -136,7 +236,7 @@ typedef struct breakpoint_object
/* 1 is this is a FinishBreakpoint object, 0 otherwise. */
int is_finish_bp;
-} breakpoint_object;
+} gdbpy_breakpoint_object;
/* Require that BREAKPOINT be a valid breakpoint ID; throw a Python
exception if it is invalid. */
@@ -163,7 +263,7 @@ typedef struct breakpoint_object
/* Variables used to pass information between the Breakpoint
constructor and the breakpoint-created hook function. */
-extern breakpoint_object *bppy_pending_object;
+extern gdbpy_breakpoint_object *bppy_pending_object;
typedef struct
@@ -211,15 +311,22 @@ PyObject *block_to_block_object (const struct block *block,
PyObject *value_to_value_object (struct value *v);
PyObject *type_to_type_object (struct type *);
PyObject *frame_info_to_frame_object (struct frame_info *frame);
-
-PyObject *pspace_to_pspace_object (struct program_space *);
+PyObject *symtab_to_linetable_object (PyObject *symtab);
+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 *objfile_to_objfile_object (struct objfile *);
+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 *gdbarch_to_arch_object (struct gdbarch *gdbarch);
thread_object *create_thread_object (struct thread_info *tp);
-thread_object *find_thread_object (ptid_t ptid);
+thread_object *find_thread_object (ptid_t ptid)
+ CPYCHECKER_RETURNS_BORROWED_REF;
PyObject *find_inferior_object (int pid);
PyObject *inferior_to_inferior_object (struct inferior *inferior);
@@ -231,37 +338,72 @@ struct type *type_object_to_type (PyObject *obj);
struct symtab *symtab_object_to_symtab (PyObject *obj);
struct symtab_and_line *sal_object_to_symtab_and_line (PyObject *obj);
struct frame_info *frame_object_to_frame_info (PyObject *frame_obj);
-
-void gdbpy_initialize_auto_load (void);
-void gdbpy_initialize_values (void);
-void gdbpy_initialize_frames (void);
-void gdbpy_initialize_symtabs (void);
-void gdbpy_initialize_commands (void);
-void gdbpy_initialize_symbols (void);
-void gdbpy_initialize_symtabs (void);
-void gdbpy_initialize_blocks (void);
-void gdbpy_initialize_types (void);
-void gdbpy_initialize_functions (void);
-void gdbpy_initialize_pspace (void);
-void gdbpy_initialize_objfile (void);
-void gdbpy_initialize_breakpoints (void);
-void gdbpy_initialize_finishbreakpoints (void);
-void gdbpy_initialize_lazy_string (void);
-void gdbpy_initialize_parameters (void);
-void gdbpy_initialize_thread (void);
-void gdbpy_initialize_inferior (void);
-void gdbpy_initialize_eventregistry (void);
-void gdbpy_initialize_event (void);
-void gdbpy_initialize_py_events (void);
-void gdbpy_initialize_stop_event (void);
-void gdbpy_initialize_signal_event (void);
-void gdbpy_initialize_breakpoint_event (void);
-void gdbpy_initialize_continue_event (void);
-void gdbpy_initialize_exited_event (void);
-void gdbpy_initialize_thread_event (void);
-void gdbpy_initialize_new_objfile_event (void);
+struct gdbarch *arch_object_to_gdbarch (PyObject *obj);
+
+void gdbpy_initialize_gdb_readline (void);
+int gdbpy_initialize_auto_load (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_values (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_frames (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_symtabs (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_commands (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_symbols (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_symtabs (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_blocks (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_types (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_functions (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_pspace (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_objfile (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_breakpoints (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_finishbreakpoints (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_lazy_string (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_linetable (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_parameters (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_thread (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_inferior (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_eventregistry (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_event (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_py_events (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_stop_event (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_signal_event (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_breakpoint_event (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_continue_event (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_exited_event (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_thread_event (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_new_objfile_event (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_arch (void)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
struct cleanup *make_cleanup_py_decref (PyObject *py);
+struct cleanup *make_cleanup_py_xdecref (PyObject *py);
struct cleanup *ensure_python_env (struct gdbarch *gdbarch,
const struct language_defn *language);
@@ -271,11 +413,14 @@ extern const struct language_defn *python_language;
/* Use this after a TRY_EXCEPT to throw the appropriate Python
exception. */
-#define GDB_PY_HANDLE_EXCEPTION(Exception) \
- do { \
- if (Exception.reason < 0) \
- return gdbpy_convert_exception (Exception); \
- } while (0)
+#define GDB_PY_HANDLE_EXCEPTION(Exception) \
+ do { \
+ if (Exception.reason < 0) \
+ { \
+ gdbpy_convert_exception (Exception); \
+ return NULL; \
+ } \
+ } while (0)
/* Use this after a TRY_EXCEPT to throw the appropriate Python
exception. This macro is for use inside setter functions. */
@@ -298,14 +443,13 @@ char *unicode_to_target_string (PyObject *unicode_str);
char *python_string_to_target_string (PyObject *obj);
PyObject *python_string_to_target_python_string (PyObject *obj);
char *python_string_to_host_string (PyObject *obj);
-PyObject *target_string_to_unicode (const gdb_byte *str, int length);
int gdbpy_is_string (PyObject *obj);
char *gdbpy_obj_to_string (PyObject *obj);
char *gdbpy_exception_to_string (PyObject *ptype, PyObject *pvalue);
int gdbpy_is_lazy_string (PyObject *result);
void gdbpy_extract_lazy_string (PyObject *string, CORE_ADDR *addr,
- struct type **str_type,
+ struct type **str_type,
long *length, char **encoding);
int gdbpy_is_value_object (PyObject *obj);
@@ -319,8 +463,8 @@ PyObject *gdbpy_get_varobj_pretty_printer (struct value *value);
char *gdbpy_get_display_hint (PyObject *printer);
PyObject *gdbpy_default_visualizer (PyObject *self, PyObject *args);
-void bpfinishpy_pre_stop_hook (struct breakpoint_object *bp_obj);
-void bpfinishpy_post_stop_hook (struct breakpoint_object *bp_obj);
+void bpfinishpy_pre_stop_hook (struct gdbpy_breakpoint_object *bp_obj);
+void bpfinishpy_post_stop_hook (struct gdbpy_breakpoint_object *bp_obj);
extern PyObject *gdbpy_doc_cst;
extern PyObject *gdbpy_children_cst;
@@ -334,9 +478,11 @@ extern PyObject *gdbpy_gdb_error;
extern PyObject *gdbpy_gdb_memory_error;
extern PyObject *gdbpy_gdberror_exc;
-extern PyObject *gdbpy_convert_exception (struct gdb_exception);
+extern void gdbpy_convert_exception (struct gdb_exception)
+ CPYCHECKER_SETS_EXCEPTION;
-int get_addr_from_python (PyObject *obj, CORE_ADDR *addr);
+int get_addr_from_python (PyObject *obj, CORE_ADDR *addr)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
PyObject *gdb_py_object_from_longest (LONGEST l);
PyObject *gdb_py_object_from_ulongest (ULONGEST l);
@@ -344,4 +490,8 @@ int gdb_py_int_as_long (PyObject *, long *);
PyObject *gdb_py_generic_dict (PyObject *self, void *closure);
+int gdb_pymodule_addobject (PyObject *module, const char *name,
+ PyObject *object)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+
#endif /* GDB_PYTHON_INTERNAL_H */
« no previous file with comments | « gdb/python/python-config.py ('k') | gdb/ravenscar-sparc-thread.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698