From 62eec1a534a27c721360713b21e14fb800e21e36 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 20 May 2013 20:09:01 +0000 Subject: [PATCH] * python/py-arch.c (arch_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-block.c (block_syms_iterator_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-bpevent.c (breakpoint_event_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-cmd.c (cmdpy_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-continueevent.c (continue_event_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-event.h (GDBPY_NEW_EVENT_TYPE): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-events.h (thread_event_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-evtregistry.c (eventregistry_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-exitedevent.c (exited_event_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-finishbreakpoint.c (finish_breakpoint_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-function.c (fnpy_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-inferior.c (inferior_object_type, membuf_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-infthread.c (thread_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-lazy-string.c (lazy_string_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-newobjfileevent.c (new_objfile_event_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-objfile.c (objfile_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-param.c (parmpy_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-progspace.c (pspace_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-signalevent.c (signal_event_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-symtab.c (symtab_object_type, sal_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-type.c (type_object_type, field_object_type) (type_iterator_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. * python/py-internal.h (CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF): New define. (value_object_type, block_object_type, symbol_object_type) (event_object_type, stop_event_object_type, breakpoint_object_type) (frame_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. --- gdb/ChangeLog | 50 ++++++++++++++++++++++++++++++++++++++++ gdb/python/py-arch.c | 4 +++- gdb/python/py-block.c | 3 ++- gdb/python/py-bpevent.c | 3 ++- gdb/python/py-cmd.c | 3 ++- gdb/python/py-continueevent.c | 3 ++- gdb/python/py-event.h | 5 ++-- gdb/python/py-events.h | 3 ++- gdb/python/py-evtregistry.c | 3 ++- gdb/python/py-exitedevent.c | 3 ++- gdb/python/py-finishbreakpoint.c | 5 ++-- gdb/python/py-function.c | 3 ++- gdb/python/py-inferior.c | 6 +++-- gdb/python/py-infthread.c | 3 ++- gdb/python/py-lazy-string.c | 3 ++- gdb/python/py-newobjfileevent.c | 3 ++- gdb/python/py-objfile.c | 3 ++- gdb/python/py-param.c | 3 ++- gdb/python/py-progspace.c | 3 ++- gdb/python/py-signalevent.c | 3 ++- gdb/python/py-symtab.c | 6 +++-- gdb/python/py-type.c | 9 +++++--- gdb/python/python-internal.h | 34 +++++++++++++++++++++------ 23 files changed, 130 insertions(+), 34 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7b77a06..89504b3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,53 @@ +2013-05-20 Tom Tromey + + * python/py-arch.c (arch_object_type): Use + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-block.c (block_syms_iterator_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-bpevent.c (breakpoint_event_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-cmd.c (cmdpy_object_type): Use + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-continueevent.c (continue_event_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-event.h (GDBPY_NEW_EVENT_TYPE): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-events.h (thread_event_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-evtregistry.c (eventregistry_object_type): Use + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-exitedevent.c (exited_event_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-finishbreakpoint.c (finish_breakpoint_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-function.c (fnpy_object_type): Use + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-inferior.c (inferior_object_type, membuf_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-infthread.c (thread_object_type): Use + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-lazy-string.c (lazy_string_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-newobjfileevent.c (new_objfile_event_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-objfile.c (objfile_object_type): Use + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-param.c (parmpy_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-progspace.c (pspace_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-signalevent.c (signal_event_object_type): + Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-symtab.c (symtab_object_type, sal_object_type): Use + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-type.c (type_object_type, field_object_type) + (type_iterator_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + * python/py-internal.h (CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF): New + define. + (value_object_type, block_object_type, symbol_object_type) + (event_object_type, stop_event_object_type, breakpoint_object_type) + (frame_object_type): Use CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF. + 2013-05-20 Andreas Tobler * Makefile.in (ALL_TARGET_OBS): Add ppcfbsd-tdep.o. diff --git a/gdb/python/py-arch.c b/gdb/python/py-arch.c index ddfebdb..7eb6eea 100644 --- a/gdb/python/py-arch.c +++ b/gdb/python/py-arch.c @@ -29,7 +29,9 @@ typedef struct arch_object_type_object { } arch_object; static struct gdbarch_data *arch_object_data = NULL; -static PyTypeObject arch_object_type; + +static PyTypeObject arch_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("arch_object"); /* Associates an arch_object with GDBARCH as gdbarch_data via the gdbarch post init registration mechanism (gdbarch_data_register_post_init). */ diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c index f0b8322..afc8959 100644 --- a/gdb/python/py-block.c +++ b/gdb/python/py-block.c @@ -78,7 +78,8 @@ typedef struct { } \ } while (0) -static PyTypeObject block_syms_iterator_object_type; +static PyTypeObject block_syms_iterator_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("block_syms_iterator_object"); static const struct objfile_data *blpy_objfile_data_key; static PyObject * diff --git a/gdb/python/py-bpevent.c b/gdb/python/py-bpevent.c index dad93dc..5238ad8 100644 --- a/gdb/python/py-bpevent.c +++ b/gdb/python/py-bpevent.c @@ -20,7 +20,8 @@ #include "defs.h" #include "py-stopevent.h" -static PyTypeObject breakpoint_event_object_type; +static PyTypeObject breakpoint_event_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); /* Create and initialize a BreakpointEvent object. This acquires new references to BREAKPOINT_LIST and FIRST_BP. */ diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c index 161b4bc..3da9960 100644 --- a/gdb/python/py-cmd.c +++ b/gdb/python/py-cmd.c @@ -68,7 +68,8 @@ struct cmdpy_object typedef struct cmdpy_object cmdpy_object; -static PyTypeObject cmdpy_object_type; +static PyTypeObject cmdpy_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("cmdpy_object"); /* Constants used by this module. */ static PyObject *invoke_cst; diff --git a/gdb/python/py-continueevent.c b/gdb/python/py-continueevent.c index 6412c01..c1f8f65 100644 --- a/gdb/python/py-continueevent.c +++ b/gdb/python/py-continueevent.c @@ -20,7 +20,8 @@ #include "defs.h" #include "py-event.h" -static PyTypeObject continue_event_object_type; +static PyTypeObject continue_event_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); static PyObject * create_continue_event_object (void) diff --git a/gdb/python/py-event.h b/gdb/python/py-event.h index 86da974..970595b 100644 --- a/gdb/python/py-event.h +++ b/gdb/python/py-event.h @@ -46,8 +46,9 @@ #define GDBPY_NEW_EVENT_TYPE(name, py_path, py_name, doc, base, qual) \ \ - qual PyTypeObject name##_event_object_type = \ - { \ + qual PyTypeObject name##_event_object_type \ + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object") \ + = { \ PyVarObject_HEAD_INIT (NULL, 0) \ py_path, /* tp_name */ \ sizeof (event_object), /* tp_basicsize */ \ diff --git a/gdb/python/py-events.h b/gdb/python/py-events.h index 537bcc9..4ec3832 100644 --- a/gdb/python/py-events.h +++ b/gdb/python/py-events.h @@ -24,7 +24,8 @@ #include "python-internal.h" #include "inferior.h" -extern PyTypeObject thread_event_object_type; +extern PyTypeObject thread_event_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); /* Stores a list of objects to be notified when the event for which this registry tracks occurs. */ diff --git a/gdb/python/py-evtregistry.c b/gdb/python/py-evtregistry.c index 2e338cc..c8003af 100644 --- a/gdb/python/py-evtregistry.c +++ b/gdb/python/py-evtregistry.c @@ -23,7 +23,8 @@ events_object gdb_py_events; -static PyTypeObject eventregistry_object_type; +static PyTypeObject eventregistry_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("eventregistry_object"); /* Implementation of EventRegistry.connect () -> NULL. Add FUNCTION to the list of listeners. */ diff --git a/gdb/python/py-exitedevent.c b/gdb/python/py-exitedevent.c index 725518b..49c3100 100644 --- a/gdb/python/py-exitedevent.c +++ b/gdb/python/py-exitedevent.c @@ -20,7 +20,8 @@ #include "defs.h" #include "py-event.h" -static PyTypeObject exited_event_object_type; +static PyTypeObject exited_event_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); static PyObject * create_exited_event_object (const LONGEST *exit_code, struct inferior *inf) diff --git a/gdb/python/py-finishbreakpoint.c b/gdb/python/py-finishbreakpoint.c index 6e095b5..b52bd7e 100644 --- a/gdb/python/py-finishbreakpoint.c +++ b/gdb/python/py-finishbreakpoint.c @@ -31,8 +31,6 @@ #include "inferior.h" #include "block.h" -static PyTypeObject finish_breakpoint_object_type; - /* Function that is called when a Python finish bp is found out of scope. */ static char * const outofscope_func = "out_of_scope"; @@ -55,6 +53,9 @@ struct finish_breakpoint_object PyObject *return_value; }; +static PyTypeObject finish_breakpoint_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("finish_breakpoint_object"); + /* Python function to get the 'return_value' attribute of FinishBreakpoint. */ diff --git a/gdb/python/py-function.c b/gdb/python/py-function.c index bd25263..e2ba19f 100644 --- a/gdb/python/py-function.c +++ b/gdb/python/py-function.c @@ -29,7 +29,8 @@ #include "expression.h" #include "language.h" -static PyTypeObject fnpy_object_type; +static PyTypeObject fnpy_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("PyObject"); diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index cee3a0d..d35d09a 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -51,7 +51,8 @@ typedef struct int nthreads; } inferior_object; -static PyTypeObject inferior_object_type; +static PyTypeObject inferior_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("inferior_object"); static const struct inferior_data *infpy_inf_data_key; @@ -64,7 +65,8 @@ typedef struct { CORE_ADDR length; } membuf_object; -static PyTypeObject membuf_object_type; +static PyTypeObject membuf_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("membuf_object"); /* Require that INFERIOR be a valid inferior ID. */ #define INFPY_REQUIRE_VALID(Inferior) \ diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c index a5a083f..a0545ec 100644 --- a/gdb/python/py-infthread.c +++ b/gdb/python/py-infthread.c @@ -23,7 +23,8 @@ #include "inferior.h" #include "python-internal.h" -static PyTypeObject thread_object_type; +static PyTypeObject thread_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("thread_object"); /* Require that INFERIOR be a valid inferior ID. */ #define THPY_REQUIRE_VALID(Thread) \ diff --git a/gdb/python/py-lazy-string.c b/gdb/python/py-lazy-string.c index 6835067..df54cf4 100644 --- a/gdb/python/py-lazy-string.c +++ b/gdb/python/py-lazy-string.c @@ -47,7 +47,8 @@ typedef struct { struct type *type; } lazy_string_object; -static PyTypeObject lazy_string_object_type; +static PyTypeObject lazy_string_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("lazy_string_object"); static PyObject * stpy_get_address (PyObject *self, void *closure) diff --git a/gdb/python/py-newobjfileevent.c b/gdb/python/py-newobjfileevent.c index 538e2d8..d781e92 100644 --- a/gdb/python/py-newobjfileevent.c +++ b/gdb/python/py-newobjfileevent.c @@ -20,7 +20,8 @@ #include "defs.h" #include "py-event.h" -static PyTypeObject new_objfile_event_object_type; +static PyTypeObject new_objfile_event_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); static PyObject * create_new_objfile_event_object (struct objfile *objfile) diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index 6fa3035..27f3463 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -39,7 +39,8 @@ typedef struct PyObject *type_printers; } objfile_object; -static PyTypeObject objfile_object_type; +static PyTypeObject objfile_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("objfile_object"); static const struct objfile_data *objfpy_objfile_data_key; diff --git a/gdb/python/py-param.c b/gdb/python/py-param.c index acb48cd..176bbc2 100644 --- a/gdb/python/py-param.c +++ b/gdb/python/py-param.c @@ -89,7 +89,8 @@ struct parmpy_object typedef struct parmpy_object parmpy_object; -static PyTypeObject parmpy_object_type; +static PyTypeObject parmpy_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("parmpy_object"); /* Some handy string constants. */ static PyObject *set_doc_cst; diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c index 104b36d..5d4911a 100644 --- a/gdb/python/py-progspace.c +++ b/gdb/python/py-progspace.c @@ -41,7 +41,8 @@ typedef struct PyObject *type_printers; } pspace_object; -static PyTypeObject pspace_object_type; +static PyTypeObject pspace_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("pspace_object"); static const struct program_space_data *pspy_pspace_data_key; diff --git a/gdb/python/py-signalevent.c b/gdb/python/py-signalevent.c index 3d64936..1d723f0 100644 --- a/gdb/python/py-signalevent.c +++ b/gdb/python/py-signalevent.c @@ -20,7 +20,8 @@ #include "defs.h" #include "py-stopevent.h" -static PyTypeObject signal_event_object_type; +static PyTypeObject signal_event_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object"); PyObject * create_signal_event_object (enum gdb_signal stop_signal) diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index 6fa8ecb..94c05be 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -37,7 +37,8 @@ typedef struct stpy_symtab_object { struct stpy_symtab_object *next; } symtab_object; -static PyTypeObject symtab_object_type; +static PyTypeObject symtab_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("symtab_object"); static const struct objfile_data *stpy_objfile_data_key; /* Require a valid symbol table. All access to symtab_object->symtab @@ -67,7 +68,8 @@ typedef struct salpy_sal_object { struct salpy_sal_object *next; } sal_object; -static PyTypeObject sal_object_type; +static PyTypeObject sal_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("sal_object"); static const struct objfile_data *salpy_objfile_data_key; /* Require a valid symbol table and line object. All access to diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index 051cff0..7cc89ca 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -44,7 +44,8 @@ typedef struct pyty_type_object struct pyty_type_object *next; } type_object; -static PyTypeObject type_object_type; +static PyTypeObject type_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("type_object"); /* A Field object. */ typedef struct pyty_field_object @@ -55,7 +56,8 @@ typedef struct pyty_field_object PyObject *dict; } field_object; -static PyTypeObject field_object_type; +static PyTypeObject field_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("field_object"); /* A type iterator object. */ typedef struct { @@ -68,7 +70,8 @@ typedef struct { struct pyty_type_object *source; } typy_iterator_object; -static PyTypeObject type_iterator_object_type; +static PyTypeObject type_iterator_object_type + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("typy_iterator_object"); /* This is used to initialize various gdb.TYPE_ constants. */ struct pyty_code diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 7337bff..b6a2e76 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -20,6 +20,19 @@ #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_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 + #include /* Python 2.4 doesn't include stdint.h soon enough to get {u,}intptr_t @@ -151,14 +164,21 @@ struct inferior; extern PyObject *gdb_module; extern PyObject *gdb_python_module; -extern PyTypeObject value_object_type; -extern PyTypeObject block_object_type; -extern PyTypeObject symbol_object_type; -extern PyTypeObject event_object_type; +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 events_object_type; -extern PyTypeObject stop_event_object_type; -extern PyTypeObject breakpoint_object_type; -extern PyTypeObject frame_object_type; +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 breakpoint_object { -- 2.7.4