GDB (xrefs)
py-event.h
Go to the documentation of this file.
1 /* Python interface to inferior events.
2 
3  Copyright (C) 2009-2015 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 */
45 
46 #define GDBPY_NEW_EVENT_TYPE(name, py_path, py_name, doc, base) \
47 \
48  PyTypeObject name##_event_object_type \
49  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object") \
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 int \
91 gdbpy_initialize_##name##_event (void) \
92 { \
93  return 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 /* For inferior function call events, discriminate whether event is
108  before or after the call. */
109 
110 typedef enum
111 {
112  /* Before the call */
114  /* after the call */
117 
119  ptid_t thread, CORE_ADDR addr);
120 extern int emit_register_changed_event (struct frame_info *frame,
121  int regnum);
122 extern int emit_memory_changed_event (CORE_ADDR addr, ssize_t len);
123 extern int evpy_emit_event (PyObject *event,
124  eventregistry_object *registry)
126 
127 extern PyObject *create_event_object (PyTypeObject *py_type);
128 extern PyObject *create_thread_event_object (PyTypeObject *py_type);
129 extern int emit_new_objfile_event (struct objfile *objfile);
130 extern int emit_clear_objfiles_event (void);
131 
132 extern void evpy_dealloc (PyObject *self);
133 extern int evpy_add_attribute (PyObject *event,
134  char *name, PyObject *attr)
136 int gdbpy_initialize_event_generic (PyTypeObject *type, char *name)
138 
139 #endif /* GDB_PY_EVENT_H */
#define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n)
PyObject_HEAD PyObject * dict
Definition: py-event.h:101
bfd_vma CORE_ADDR
Definition: common-types.h:41
int gdbpy_initialize_event_generic(PyTypeObject *type, char *name) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-event.c:75
PyObject * create_event_object(PyTypeObject *py_type)
Definition: py-event.c:31
int evpy_emit_event(PyObject *event, eventregistry_object *registry) CPYCHECKER_STEALS_REFERENCE_TO_ARG(1)
Definition: py-event.c:89
void evpy_dealloc(PyObject *self)
Definition: py-event.c:24
int emit_clear_objfiles_event(void)
int emit_inferior_call_event(inferior_call_kind kind, ptid_t thread, CORE_ADDR addr)
Definition: py-infevents.c:188
Definition: ptid.h:35
const char *const name
Definition: aarch64-tdep.c:68
int emit_exited_event(const LONGEST *exit_code, struct inferior *inf)
int emit_memory_changed_event(CORE_ADDR addr, ssize_t len)
Definition: py-infevents.c:206
Definition: gdbtypes.h:749
Definition: gnu-nat.c:163
int emit_register_changed_event(struct frame_info *frame, int regnum)
Definition: py-infevents.c:223
int regnum
Definition: aarch64-tdep.c:69
#define CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
int emit_new_objfile_event(struct objfile *objfile)
inferior_call_kind
Definition: py-event.h:110
PyObject * create_thread_event_object(PyTypeObject *py_type)
int evpy_add_attribute(PyObject *event, char *name, PyObject *attr) CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION
Definition: py-event.c:56
long long LONGEST
Definition: common-types.h:52
int emit_continue_event(ptid_t ptid)
const ULONGEST const LONGEST len
Definition: target.h:309