This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 09/28] introduce and use CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
- From: Tom Tromey <tromey at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Fri, 19 Apr 2013 08:32:01 -0600
- Subject: [PATCH 09/28] introduce and use CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
- References: <87ehe638ww dot fsf at fleche dot redhat dot com>
The checker provides an attribute that indicates that a function sets
the Python exception if it returns a negative value. This patch
introduces a new macro for this attribute and changes gdb to use it
where appropriate.
* python/py-event.h (gdbpy_initialize_event_generic): Use
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION.
* python/py-evts.c (add_new_registry): Use
CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION.
* python/python-internal.h
(CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION): New macro.
---
gdb/python/py-event.h | 7 ++++---
gdb/python/py-evts.c | 2 +-
gdb/python/python-internal.h | 7 +++++++
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/gdb/python/py-event.h b/gdb/python/py-event.h
index 1db8bd2..4850f1a 100644
--- a/gdb/python/py-event.h
+++ b/gdb/python/py-event.h
@@ -115,8 +115,9 @@ extern int emit_new_objfile_event (struct objfile *objfile);
extern void evpy_dealloc (PyObject *self);
extern int evpy_add_attribute (PyObject *event,
- char *name, PyObject *attr);
-int gdbpy_initialize_event_generic (PyTypeObject *type, char *name);
-
+ char *name, PyObject *attr)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
+int gdbpy_initialize_event_generic (PyTypeObject *type, char *name)
+ CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
#endif /* GDB_PY_EVENT_H */
diff --git a/gdb/python/py-evts.c b/gdb/python/py-evts.c
index 4c079e2..427b6d5 100644
--- a/gdb/python/py-evts.c
+++ b/gdb/python/py-evts.c
@@ -37,7 +37,7 @@ static struct PyModuleDef EventModuleDef =
/* Initialize python events. */
-static int
+static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
add_new_registry (eventregistry_object **registryp, char *name)
{
*registryp = create_eventregistry_object ();
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 57fcc74..b887b66 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -47,6 +47,13 @@
#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
--
1.8.1.4