New python event "clear_objfiles".
If one is watching new_objfile events in python, it helps to know when the list of objfiles is cleared. This patch adds a new clear_objfiles event to support this. This patch is all just cut-n-paste-n-tweak derived from the new_objfiles event. gdb/ChangeLog: * NEWS: Mention new event gdb.clear_objfiles. * python/py-event.h (emit_clear_objfiles_event): Clear * python/py-events.h (events_object): New member clear_objfiles. * python/py-evts.c (gdbpy_initialize_py_events): Add clear_objfiles event. * python/py-inferior.c (python_new_objfile): If objfile is NULL, emit clear_objfiles event. * python/py-newobjfileevent.c (create_clear_objfiles_event_object): New function. (emit_clear_objfiles_event): New function. (clear_objfiles): New event. * python/python-internal.h (gdbpy_initialize_clear_objfiles_event): Declare. * python/python.c (_initialize_python): Call gdbpy_initialize_clear_objfiles_event. gdb/doc/ChangeLog: * python.texi (Events In Python): Document clear_objfiles event. gdb/testsuite/ChangeLog: * gdb.python/py-events.exp: Update expected output for clear_objfiles event. * gdb.python/py-events.py: Add clear_objfiles event.
This commit is contained in:
parent
d096d8c11e
commit
4ffbba72f3
14 changed files with 126 additions and 7 deletions
|
@ -22,6 +22,8 @@
|
|||
|
||||
static PyTypeObject new_objfile_event_object_type
|
||||
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
|
||||
static PyTypeObject clear_objfiles_event_object_type
|
||||
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
|
||||
|
||||
static PyObject *
|
||||
create_new_objfile_event_object (struct objfile *objfile)
|
||||
|
@ -72,3 +74,56 @@ GDBPY_NEW_EVENT_TYPE (new_objfile,
|
|||
"GDB new object file event object",
|
||||
event_object_type,
|
||||
static);
|
||||
|
||||
/* Subroutine of emit_clear_objfiles_event to simplify it. */
|
||||
|
||||
static PyObject *
|
||||
create_clear_objfiles_event_object (void)
|
||||
{
|
||||
PyObject *objfile_event;
|
||||
PyObject *py_progspace;
|
||||
|
||||
objfile_event = create_event_object (&clear_objfiles_event_object_type);
|
||||
if (!objfile_event)
|
||||
goto fail;
|
||||
|
||||
/* Note that pspace_to_pspace_object returns a borrowed reference,
|
||||
so we don't need a decref here. */
|
||||
py_progspace = pspace_to_pspace_object (current_program_space);
|
||||
if (!py_progspace || evpy_add_attribute (objfile_event,
|
||||
"progspace",
|
||||
py_progspace) < 0)
|
||||
goto fail;
|
||||
|
||||
return objfile_event;
|
||||
|
||||
fail:
|
||||
Py_XDECREF (objfile_event);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Callback function which notifies observers when the "clear objfiles"
|
||||
event occurs.
|
||||
This function will create a new Python clear_objfiles event object.
|
||||
Return -1 if emit fails. */
|
||||
|
||||
int
|
||||
emit_clear_objfiles_event (void)
|
||||
{
|
||||
PyObject *event;
|
||||
|
||||
if (evregpy_no_listeners_p (gdb_py_events.clear_objfiles))
|
||||
return 0;
|
||||
|
||||
event = create_clear_objfiles_event_object ();
|
||||
if (event)
|
||||
return evpy_emit_event (event, gdb_py_events.clear_objfiles);
|
||||
return -1;
|
||||
}
|
||||
|
||||
GDBPY_NEW_EVENT_TYPE (clear_objfiles,
|
||||
"gdb.ClearObjFilesEvent",
|
||||
"ClearObjFilesEvent",
|
||||
"GDB clear object files event object",
|
||||
event_object_type,
|
||||
static);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue