xref: /dflybsd-src/contrib/gdb-7/gdb/python/py-evts.c (revision de8e141f24382815c10a4012d209bbbf7abf1112)
1c50c785cSJohn Marino /* Python interface to inferior events.
2c50c785cSJohn Marino 
3*ef5ccd6cSJohn Marino    Copyright (C) 2009-2013 Free Software Foundation, Inc.
4c50c785cSJohn Marino 
5c50c785cSJohn Marino    This file is part of GDB.
6c50c785cSJohn Marino 
7c50c785cSJohn Marino    This program is free software; you can redistribute it and/or modify
8c50c785cSJohn Marino    it under the terms of the GNU General Public License as published by
9c50c785cSJohn Marino    the Free Software Foundation; either version 3 of the License, or
10c50c785cSJohn Marino    (at your option) any later version.
11c50c785cSJohn Marino 
12c50c785cSJohn Marino    This program is distributed in the hope that it will be useful,
13c50c785cSJohn Marino    but WITHOUT ANY WARRANTY; without even the implied warranty of
14c50c785cSJohn Marino    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15c50c785cSJohn Marino    GNU General Public License for more details.
16c50c785cSJohn Marino 
17c50c785cSJohn Marino    You should have received a copy of the GNU General Public License
18c50c785cSJohn Marino    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19c50c785cSJohn Marino 
20*ef5ccd6cSJohn Marino #include "defs.h"
21c50c785cSJohn Marino #include "py-events.h"
22c50c785cSJohn Marino 
23*ef5ccd6cSJohn Marino #ifdef IS_PY3K
24*ef5ccd6cSJohn Marino static struct PyModuleDef EventModuleDef =
25*ef5ccd6cSJohn Marino {
26*ef5ccd6cSJohn Marino   PyModuleDef_HEAD_INIT,
27*ef5ccd6cSJohn Marino   "gdb.events",
28*ef5ccd6cSJohn Marino   NULL,
29*ef5ccd6cSJohn Marino   -1,
30*ef5ccd6cSJohn Marino   NULL,
31*ef5ccd6cSJohn Marino   NULL,
32*ef5ccd6cSJohn Marino   NULL,
33*ef5ccd6cSJohn Marino   NULL,
34*ef5ccd6cSJohn Marino   NULL
35*ef5ccd6cSJohn Marino };
36*ef5ccd6cSJohn Marino #endif
37*ef5ccd6cSJohn Marino 
38c50c785cSJohn Marino /* Initialize python events.  */
39c50c785cSJohn Marino 
40c50c785cSJohn Marino static int
add_new_registry(eventregistry_object ** registryp,char * name)41c50c785cSJohn Marino add_new_registry (eventregistry_object **registryp, char *name)
42c50c785cSJohn Marino {
43c50c785cSJohn Marino   *registryp = create_eventregistry_object ();
44c50c785cSJohn Marino 
45c50c785cSJohn Marino   if (*registryp == NULL)
46c50c785cSJohn Marino     goto fail;
47c50c785cSJohn Marino 
48c50c785cSJohn Marino   if (PyModule_AddObject (gdb_py_events.module,
49c50c785cSJohn Marino                              name,
50c50c785cSJohn Marino                              (PyObject *)(*registryp)) < 0)
51c50c785cSJohn Marino     goto fail;
52c50c785cSJohn Marino 
53c50c785cSJohn Marino   return 0;
54c50c785cSJohn Marino 
55c50c785cSJohn Marino   fail:
56c50c785cSJohn Marino    Py_XDECREF (*registryp);
57c50c785cSJohn Marino    return -1;
58c50c785cSJohn Marino }
59c50c785cSJohn Marino 
60c50c785cSJohn Marino void
gdbpy_initialize_py_events(void)61c50c785cSJohn Marino gdbpy_initialize_py_events (void)
62c50c785cSJohn Marino {
63*ef5ccd6cSJohn Marino #ifdef IS_PY3K
64*ef5ccd6cSJohn Marino   gdb_py_events.module = PyModule_Create (&EventModuleDef);
65*ef5ccd6cSJohn Marino #else
66c50c785cSJohn Marino   gdb_py_events.module = Py_InitModule ("events", NULL);
67*ef5ccd6cSJohn Marino #endif
68c50c785cSJohn Marino 
69c50c785cSJohn Marino   if (!gdb_py_events.module)
70c50c785cSJohn Marino     goto fail;
71c50c785cSJohn Marino 
72c50c785cSJohn Marino   if (add_new_registry (&gdb_py_events.stop, "stop") < 0)
73c50c785cSJohn Marino     goto fail;
74c50c785cSJohn Marino 
75c50c785cSJohn Marino   if (add_new_registry (&gdb_py_events.cont, "cont") < 0)
76c50c785cSJohn Marino     goto fail;
77c50c785cSJohn Marino 
78c50c785cSJohn Marino   if (add_new_registry (&gdb_py_events.exited, "exited") < 0)
79c50c785cSJohn Marino     goto fail;
80c50c785cSJohn Marino 
81a45ae5f8SJohn Marino   if (add_new_registry (&gdb_py_events.new_objfile, "new_objfile") < 0)
82a45ae5f8SJohn Marino     goto fail;
83a45ae5f8SJohn Marino 
84*ef5ccd6cSJohn Marino #ifndef IS_PY3K
85c50c785cSJohn Marino   Py_INCREF (gdb_py_events.module);
86*ef5ccd6cSJohn Marino #endif
87c50c785cSJohn Marino   if (PyModule_AddObject (gdb_module,
88c50c785cSJohn Marino                           "events",
89c50c785cSJohn Marino                           (PyObject *) gdb_py_events.module) < 0)
90c50c785cSJohn Marino     goto fail;
91c50c785cSJohn Marino 
92c50c785cSJohn Marino   return;
93c50c785cSJohn Marino 
94c50c785cSJohn Marino   fail:
95c50c785cSJohn Marino    gdbpy_print_stack ();
96c50c785cSJohn Marino }
97