GDB (xrefs)
py-newobjfileevent.c
Go to the documentation of this file.
1 /* Python interface to new object file loading events.
2 
3  Copyright (C) 2011-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 #include "defs.h"
21 #include "py-event.h"
22 
23 extern PyTypeObject new_objfile_event_object_type
24  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
25 extern PyTypeObject clear_objfiles_event_object_type
26  CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
27 
28 static PyObject *
30 {
31  PyObject *objfile_event;
32  PyObject *py_objfile;
33 
34  objfile_event = create_event_object (&new_objfile_event_object_type);
35  if (!objfile_event)
36  goto fail;
37 
38  /* Note that objfile_to_objfile_object returns a borrowed reference,
39  so we don't need a decref here. */
40  py_objfile = objfile_to_objfile_object (objfile);
41  if (!py_objfile || evpy_add_attribute (objfile_event,
42  "new_objfile",
43  py_objfile) < 0)
44  goto fail;
45 
46  return objfile_event;
47 
48  fail:
49  Py_XDECREF (objfile_event);
50  return NULL;
51 }
52 
53 /* Callback function which notifies observers when a new objfile event occurs.
54  This function will create a new Python new_objfile event object.
55  Return -1 if emit fails. */
56 
57 int
59 {
60  PyObject *event;
61 
63  return 0;
64 
65  event = create_new_objfile_event_object (objfile);
66  if (event)
68  return -1;
69 }
70 
72  "gdb.NewObjFileEvent",
73  "NewObjFileEvent",
74  "GDB new object file event object",
76 
77 /* Subroutine of emit_clear_objfiles_event to simplify it. */
78 
79 static PyObject *
81 {
82  PyObject *objfile_event;
83  PyObject *py_progspace;
84 
85  objfile_event = create_event_object (&clear_objfiles_event_object_type);
86  if (!objfile_event)
87  goto fail;
88 
89  /* Note that pspace_to_pspace_object returns a borrowed reference,
90  so we don't need a decref here. */
92  if (!py_progspace || evpy_add_attribute (objfile_event,
93  "progspace",
94  py_progspace) < 0)
95  goto fail;
96 
97  return objfile_event;
98 
99  fail:
100  Py_XDECREF (objfile_event);
101  return NULL;
102 }
103 
104 /* Callback function which notifies observers when the "clear objfiles"
105  event occurs.
106  This function will create a new Python clear_objfiles event object.
107  Return -1 if emit fails. */
108 
109 int
111 {
112  PyObject *event;
113 
115  return 0;
116 
118  if (event)
120  return -1;
121 }
122 
123 GDBPY_NEW_EVENT_TYPE (clear_objfiles,
124  "gdb.ClearObjFilesEvent",
125  "ClearObjFilesEvent",
126  "GDB clear object files event object",
eventregistry_object * new_objfile
Definition: py-events.h:48
PyTypeObject new_objfile_event_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF("event_object")
PyObject * objfile_to_objfile_object(struct objfile *objfile)
Definition: py-objfile.c:632
static PyObject * create_clear_objfiles_event_object(void)
static PyObject * create_new_objfile_event_object(struct objfile *objfile)
int emit_clear_objfiles_event(void)
int evpy_add_attribute(PyObject *event, char *name, PyObject *attr)
Definition: py-event.c:56
PyObject * create_event_object(PyTypeObject *py_type)
Definition: py-event.c:31
static void new_objfile(struct objfile *objfile)
Definition: aix-thread.c:949
events_object gdb_py_events
GDBPY_NEW_EVENT_TYPE(new_objfile,"gdb.NewObjFileEvent","NewObjFileEvent","GDB new object file event object", event_object_type)
PyTypeObject event_object_type
Definition: py-event.c:143
int emit_new_objfile_event(struct objfile *objfile)
eventregistry_object * clear_objfiles
Definition: py-events.h:49
struct program_space * current_program_space
Definition: progspace.c:35
int evpy_emit_event(PyObject *event, eventregistry_object *registry)
Definition: py-event.c:89
int evregpy_no_listeners_p(eventregistry_object *registry)
PyObject * pspace_to_pspace_object(struct program_space *pspace)
Definition: py-progspace.c:350