gdb/python/py-event.h - gdb

Data types defined

Macros defined

Source code

  1. /* Python interface to inferior events.

  2.    Copyright (C) 2009-2015 Free Software Foundation, Inc.

  3.    This file is part of GDB.

  4.    This program is free software; you can redistribute it and/or modify
  5.    it under the terms of the GNU General Public License as published by
  6.    the Free Software Foundation; either version 3 of the License, or
  7.    (at your option) any later version.

  8.    This program is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.    GNU General Public License for more details.

  12.    You should have received a copy of the GNU General Public License
  13.    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

  14. #ifndef GDB_PY_EVENT_H
  15. #define GDB_PY_EVENT_H

  16. #include "py-events.h"
  17. #include "command.h"
  18. #include "python-internal.h"
  19. #include "inferior.h"

  20. /* This macro creates the following functions:

  21.      gdbpy_initialize_{NAME}_event
  22.      Used to add the newly created event type to the gdb module.

  23.    and the python type data structure for the event:

  24.      struct PyTypeObject {NAME}_event_object_type

  25.   NAME is the name of the event.
  26.   PY_PATH is a string representing the module and python name of
  27.     the event.
  28.   PY_NAME a string representing what the event should be called in
  29.     python.
  30.   DOC Python documentation for the new event type
  31.   BASE the base event for this event usually just event_object_type.
  32.   QUAL qualification for the create event usually 'static'
  33. */

  34. #define GDBPY_NEW_EVENT_TYPE(name, py_path, py_name, doc, base, qual) \
  35. \
  36.     qual PyTypeObject name##_event_object_type \
  37.         CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object") \
  38.     = { \
  39.       PyVarObject_HEAD_INIT (NULL, 0)                                \
  40.       py_path,                                    /* tp_name */ \
  41.       sizeof (event_object),                      /* tp_basicsize */ \
  42.       0,                                          /* tp_itemsize */ \
  43.       evpy_dealloc,                               /* tp_dealloc */ \
  44.       0,                                          /* tp_print */ \
  45.       0,                                          /* tp_getattr */ \
  46.       0,                                          /* tp_setattr */ \
  47.       0,                                          /* tp_compare */ \
  48.       0,                                          /* tp_repr */ \
  49.       0,                                          /* tp_as_number */ \
  50.       0,                                          /* tp_as_sequence */ \
  51.       0,                                          /* tp_as_mapping */ \
  52.       0,                                          /* tp_hash  */ \
  53.       0,                                          /* tp_call */ \
  54.       0,                                          /* tp_str */ \
  55.       0,                                          /* tp_getattro */ \
  56.       0,                                          /* tp_setattro */ \
  57.       0,                                          /* tp_as_buffer */ \
  58.       Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,   /* tp_flags */ \
  59.       doc,                                        /* tp_doc */ \
  60.       0,                                          /* tp_traverse */ \
  61.       0,                                          /* tp_clear */ \
  62.       0,                                          /* tp_richcompare */ \
  63.       0,                                          /* tp_weaklistoffset */ \
  64.       0,                                          /* tp_iter */ \
  65.       0,                                          /* tp_iternext */ \
  66.       0,                                          /* tp_methods */ \
  67.       0,                                          /* tp_members */ \
  68.       0,                                          /* tp_getset */ \
  69.       &base,                                      /* tp_base */ \
  70.       0,                                          /* tp_dict */ \
  71.       0,                                          /* tp_descr_get */ \
  72.       0,                                          /* tp_descr_set */ \
  73.       0,                                          /* tp_dictoffset */ \
  74.       0,                                          /* tp_init */ \
  75.       0                                           /* tp_alloc */ \
  76.     }; \
  77. \
  78. int \
  79. gdbpy_initialize_##name##_event (void) \
  80. { \
  81.   return gdbpy_initialize_event_generic (&name##_event_object_type, \
  82.                                          py_name);                    \
  83. }

  84. typedef struct
  85. {
  86.   PyObject_HEAD

  87.   PyObject *dict;
  88. } event_object;

  89. extern int emit_continue_event (ptid_t ptid);
  90. extern int emit_exited_event (const LONGEST *exit_code, struct inferior *inf);

  91. /* For inferior function call events, discriminate whether event is
  92.    before or after the call. */

  93. typedef enum
  94. {
  95.   /* Before the call */
  96.   INFERIOR_CALL_PRE,
  97.   /* after the call */
  98.   INFERIOR_CALL_POST,
  99. } inferior_call_kind;

  100. extern int emit_inferior_call_event (inferior_call_kind kind,
  101.                                      ptid_t thread, CORE_ADDR addr);
  102. extern int emit_register_changed_event (struct frame_info *frame,
  103.                                         int regnum);
  104. extern int emit_memory_changed_event (CORE_ADDR addr, ssize_t len);
  105. extern int evpy_emit_event (PyObject *event,
  106.                             eventregistry_object *registry)
  107.   CPYCHECKER_STEALS_REFERENCE_TO_ARG (1);

  108. extern PyObject *create_event_object (PyTypeObject *py_type);
  109. extern PyObject *create_thread_event_object (PyTypeObject *py_type);
  110. extern int emit_new_objfile_event (struct objfile *objfile);
  111. extern int emit_clear_objfiles_event (void);

  112. extern void evpy_dealloc (PyObject *self);
  113. extern int evpy_add_attribute (PyObject *event,
  114.                                char *name, PyObject *attr)
  115.   CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;
  116. int gdbpy_initialize_event_generic (PyTypeObject *type, char *name)
  117.   CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION;

  118. #endif /* GDB_PY_EVENT_H */