| 1 | /* Python interface to inferior events. |
| 2 | |
| 3 | Copyright (C) 2009-2013 Free Software Foundation, Inc. |
| 4 | |
| 5 | This file is part of GDB. |
| 6 | |
| 7 | This program is free software; you can redistribute it and/or modify |
| 8 | it under the terms of the GNU General Public License as published by |
| 9 | the Free Software Foundation; either version 3 of the License, or |
| 10 | (at your option) any later version. |
| 11 | |
| 12 | This program is distributed in the hope that it will be useful, |
| 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 | GNU General Public License for more details. |
| 16 | |
| 17 | You should have received a copy of the GNU General Public License |
| 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| 19 | |
| 20 | #ifndef GDB_PY_EVENT_H |
| 21 | #define GDB_PY_EVENT_H |
| 22 | |
| 23 | #include "py-events.h" |
| 24 | #include "command.h" |
| 25 | #include "python-internal.h" |
| 26 | #include "inferior.h" |
| 27 | |
| 28 | /* This macro creates the following functions: |
| 29 | |
| 30 | gdbpy_initialize_{NAME}_event |
| 31 | Used to add the newly created event type to the gdb module. |
| 32 | |
| 33 | and the python type data structure for the event: |
| 34 | |
| 35 | struct PyTypeObject {NAME}_event_object_type |
| 36 | |
| 37 | NAME is the name of the event. |
| 38 | PY_PATH is a string representing the module and python name of |
| 39 | the event. |
| 40 | PY_NAME a string representing what the event should be called in |
| 41 | python. |
| 42 | DOC Python documentation for the new event type |
| 43 | BASE the base event for this event usually just event_object_type. |
| 44 | QUAL qualification for the create event usually 'static' |
| 45 | */ |
| 46 | |
| 47 | #define GDBPY_NEW_EVENT_TYPE(name, py_path, py_name, doc, base, qual) \ |
| 48 | \ |
| 49 | qual PyTypeObject name##_event_object_type = \ |
| 50 | { \ |
| 51 | PyVarObject_HEAD_INIT (NULL, 0) \ |
| 52 | py_path, /* tp_name */ \ |
| 53 | sizeof (event_object), /* tp_basicsize */ \ |
| 54 | 0, /* tp_itemsize */ \ |
| 55 | evpy_dealloc, /* tp_dealloc */ \ |
| 56 | 0, /* tp_print */ \ |
| 57 | 0, /* tp_getattr */ \ |
| 58 | 0, /* tp_setattr */ \ |
| 59 | 0, /* tp_compare */ \ |
| 60 | 0, /* tp_repr */ \ |
| 61 | 0, /* tp_as_number */ \ |
| 62 | 0, /* tp_as_sequence */ \ |
| 63 | 0, /* tp_as_mapping */ \ |
| 64 | 0, /* tp_hash */ \ |
| 65 | 0, /* tp_call */ \ |
| 66 | 0, /* tp_str */ \ |
| 67 | 0, /* tp_getattro */ \ |
| 68 | 0, /* tp_setattro */ \ |
| 69 | 0, /* tp_as_buffer */ \ |
| 70 | Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ \ |
| 71 | doc, /* tp_doc */ \ |
| 72 | 0, /* tp_traverse */ \ |
| 73 | 0, /* tp_clear */ \ |
| 74 | 0, /* tp_richcompare */ \ |
| 75 | 0, /* tp_weaklistoffset */ \ |
| 76 | 0, /* tp_iter */ \ |
| 77 | 0, /* tp_iternext */ \ |
| 78 | 0, /* tp_methods */ \ |
| 79 | 0, /* tp_members */ \ |
| 80 | 0, /* tp_getset */ \ |
| 81 | &base, /* tp_base */ \ |
| 82 | 0, /* tp_dict */ \ |
| 83 | 0, /* tp_descr_get */ \ |
| 84 | 0, /* tp_descr_set */ \ |
| 85 | 0, /* tp_dictoffset */ \ |
| 86 | 0, /* tp_init */ \ |
| 87 | 0 /* tp_alloc */ \ |
| 88 | }; \ |
| 89 | \ |
| 90 | void \ |
| 91 | gdbpy_initialize_##name##_event (void) \ |
| 92 | { \ |
| 93 | gdbpy_initialize_event_generic (&name##_event_object_type, \ |
| 94 | py_name); \ |
| 95 | } |
| 96 | |
| 97 | typedef struct |
| 98 | { |
| 99 | PyObject_HEAD |
| 100 | |
| 101 | PyObject *dict; |
| 102 | } event_object; |
| 103 | |
| 104 | extern int emit_continue_event (ptid_t ptid); |
| 105 | extern int emit_exited_event (const LONGEST *exit_code, struct inferior *inf); |
| 106 | |
| 107 | extern int evpy_emit_event (PyObject *event, |
| 108 | eventregistry_object *registry); |
| 109 | |
| 110 | extern PyObject *create_event_object (PyTypeObject *py_type); |
| 111 | extern PyObject *create_thread_event_object (PyTypeObject *py_type); |
| 112 | extern int emit_new_objfile_event (struct objfile *objfile); |
| 113 | |
| 114 | extern void evpy_dealloc (PyObject *self); |
| 115 | extern int evpy_add_attribute (PyObject *event, |
| 116 | char *name, PyObject *attr); |
| 117 | int gdbpy_initialize_event_generic (PyTypeObject *type, char *name); |
| 118 | |
| 119 | |
| 120 | #endif /* GDB_PY_EVENT_H */ |