Files
binutils-gdb/gdb/python/py-event-types.def
Andrew Burgess 42f297ad36 gdb/python: make the executable_changed event available from Python
This commit makes the executable_changed observable available through
the Python API as an event.  There's nothing particularly interesting
going on here, it just follows the same pattern as many of the other
Python events we support.

The new event registry is called events.executable_changed, and this
emits an ExecutableChangedEvent object which has two attributes, a
gdb.Progspace called 'progspace', this is the program space in which
the executable changed, and a Boolean called 'reload', which is True
if the same executable changed on disk and has been reloaded, or is
False when a new executable has been loaded.

One interesting thing did come up during testing though, you'll notice
the test contains a setup_kfail call.  During testing I observed that
the executable_changed event would trigger twice when GDB restarted an
inferior.  However, the ExecutableChangedEvent object is identical for
both calls, so the wrong information is never sent out, we just see
one too many events.

I tracked this down to how the reload_symbols function (symfile.c)
takes care to also reload the executable, however, I've split fixing
this into a separate commit, so see the next commit for details.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
2023-09-28 15:33:13 +01:00

133 lines
3.7 KiB
C++

/* Python event definitions -*- c++ -*-
Copyright (C) 2017-2023 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* To use this file, define GDB_PY_DEFINE_EVENT_TYPE to expand how you
like, then include the file.
Each invocation is of the form:
GDB_PY_DEFINE_EVENT_TYPE(name, py_name, doc, base)
NAME is the name of the event.
PY_NAME a string representing what the event should be called in
python.
DOC Python documentation for the new event type
BASE the base event for this event usually just event_object_type.
*/
GDB_PY_DEFINE_EVENT_TYPE (breakpoint,
"BreakpointEvent",
"GDB breakpoint stop event object",
stop_event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (continue,
"ContinueEvent",
"GDB continue event object",
thread_event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (exited,
"ExitedEvent",
"GDB exited event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (new_thread,
"NewThreadEvent",
"GDB new thread event object",
thread_event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (thread_exited,
"ThreadExitedEvent",
"GDB thread exited event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (new_inferior,
"NewInferiorEvent",
"GDB new inferior event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (inferior_deleted,
"InferiorDeletedEvent",
"GDB inferior deleted event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (inferior_call_pre,
"InferiorCallPreEvent",
"GDB inferior function pre-call event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (inferior_call_post,
"InferiorCallPostEvent",
"GDB inferior function post-call event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (register_changed,
"RegisterChangedEvent",
"GDB register change event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (memory_changed,
"MemoryChangedEvent",
"GDB memory change event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (new_objfile,
"NewObjFileEvent",
"GDB new object file event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (free_objfile,
"FreeObjFileEvent",
"GDB free object file event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (clear_objfiles,
"ClearObjFilesEvent",
"GDB clear object files event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (signal,
"SignalEvent",
"GDB signal event object",
stop_event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (stop,
"StopEvent",
"GDB stop event object",
thread_event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (thread,
"ThreadEvent",
"GDB thread event object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (gdb_exiting,
"GdbExitingEvent",
"GDB is about to exit",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (connection,
"ConnectionEvent",
"GDB connection added or removed object",
event_object_type);
GDB_PY_DEFINE_EVENT_TYPE (executable_changed,
"ExecutableChangedEvent",
"GDB executable changed event",
event_object_type);