mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-24 14:22:27 +08:00

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>
133 lines
3.7 KiB
C++
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);
|