| /* Observers | 
 |  | 
 |    Copyright (C) 2016-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/>.  */ | 
 |  | 
 | #ifndef OBSERVABLE_H | 
 | #define OBSERVABLE_H | 
 |  | 
 | #include "gdbsupport/observable.h" | 
 | #include "target/waitstatus.h" | 
 |  | 
 | struct bpstat; | 
 | struct so_list; | 
 | struct objfile; | 
 | struct thread_info; | 
 | struct inferior; | 
 | struct process_stratum_target; | 
 | struct target_ops; | 
 | struct trace_state_variable; | 
 |  | 
 | namespace gdb | 
 | { | 
 |  | 
 | namespace observers | 
 | { | 
 |  | 
 | /* The inferior has stopped for real.  The BS argument describes the | 
 |    breakpoints were are stopped at, if any.  Second argument | 
 |    PRINT_FRAME non-zero means display the location where the | 
 |    inferior has stopped. | 
 |  | 
 |    gdb notifies all normal_stop observers when the inferior execution | 
 |    has just stopped, the associated messages and annotations have been | 
 |    printed, and the control is about to be returned to the user. | 
 |  | 
 |    Note that the normal_stop notification is not emitted when the | 
 |    execution stops due to a breakpoint, and this breakpoint has a | 
 |    condition that is not met.  If the breakpoint has any associated | 
 |    commands list, the commands are executed after the notification is | 
 |    emitted.  */ | 
 | extern observable<struct bpstat */* bs */, int /* print_frame */> normal_stop; | 
 |  | 
 | /* The inferior was stopped by a signal.  */ | 
 | extern observable<enum gdb_signal /* siggnal */> signal_received; | 
 |  | 
 | /* The target's register contents have changed.  */ | 
 | extern observable<struct target_ops */* target */> target_changed; | 
 |  | 
 | /* The executable being debugged by GDB has changed: The user | 
 |    decided to debug a different program, or the program he was | 
 |    debugging has been modified since being loaded by the debugger | 
 |    (by being recompiled, for instance).  */ | 
 | extern observable<> executable_changed; | 
 |  | 
 | /* gdb has just connected to an inferior.  For 'run', gdb calls this | 
 |    observer while the inferior is still stopped at the entry-point | 
 |    instruction.  For 'attach' and 'core', gdb calls this observer | 
 |    immediately after connecting to the inferior, and before any | 
 |    information on the inferior has been printed.  */ | 
 | extern observable<inferior */* inferior */> inferior_created; | 
 |  | 
 | /* The inferior EXEC_INF has exec'ed a new executable file. | 
 |  | 
 |    Execution continues in FOLLOW_INF, which may or may not be the same as | 
 |    EXEC_INF, depending on "set follow-exec-mode".  */ | 
 | extern observable<inferior */* exec_inf */, inferior */* follow_inf */> | 
 |     inferior_execd; | 
 |  | 
 | /* The inferior PARENT_INF has forked.  If we are setting up an inferior for | 
 |    the child (because we follow only the child or we follow both), CHILD_INF | 
 |    is the child inferior.  Otherwise, CHILD_INF is nullptr. | 
 |  | 
 |    FORK_KIND is TARGET_WAITKIND_FORKED or TARGET_WAITKIND_VFORKED.  */ | 
 | extern observable<inferior */* parent_inf */, inferior */* child_inf */, | 
 | 		  target_waitkind /* fork_kind */> inferior_forked; | 
 |  | 
 | /* The shared library specified by SOLIB has been loaded.  Note that | 
 |    when gdb calls this observer, the library's symbols probably | 
 |    haven't been loaded yet.  */ | 
 | extern observable<struct so_list */* solib */> solib_loaded; | 
 |  | 
 | /* The shared library specified by SOLIB has been unloaded.  Note | 
 |    that when gdb calls this observer, the library's symbols have not | 
 |    been unloaded yet, and thus are still available.  */ | 
 | extern observable<struct so_list */* solib */> solib_unloaded; | 
 |  | 
 | /* The symbol file specified by OBJFILE has been loaded.  Called | 
 |    with OBJFILE equal to NULL to indicate previously loaded symbol | 
 |    table data has now been invalidated.  */ | 
 | extern observable<struct objfile */* objfile */> new_objfile; | 
 |  | 
 | /* The object file specified by OBJFILE is about to be freed.  */ | 
 | extern observable<struct objfile */* objfile */> free_objfile; | 
 |  | 
 | /* The thread specified by T has been created.  */ | 
 | extern observable<struct thread_info */* t */> new_thread; | 
 |  | 
 | /* The thread specified by T has exited.  The SILENT argument | 
 |    indicates that gdb is removing the thread from its tables without | 
 |    wanting to notify the user about it.  */ | 
 | extern observable<struct thread_info */* t */, int /* silent */> thread_exit; | 
 |  | 
 | /* An explicit stop request was issued to PTID.  If PTID equals | 
 |    minus_one_ptid, the request applied to all threads.  If | 
 |    ptid_is_pid(PTID) returns true, the request applied to all | 
 |    threads of the process pointed at by PTID.  Otherwise, the | 
 |    request applied to the single thread pointed at by PTID.  */ | 
 | extern observable<ptid_t /* ptid */> thread_stop_requested; | 
 |  | 
 | /* The target was resumed.  The PTID parameter specifies which | 
 |    thread was resume, and may be RESUME_ALL if all threads are | 
 |    resumed.  */ | 
 | extern observable<ptid_t /* ptid */> target_resumed; | 
 |  | 
 | /* The target is about to be proceeded.  */ | 
 | extern observable<> about_to_proceed; | 
 |  | 
 | /* A new breakpoint B has been created.  */ | 
 | extern observable<struct breakpoint */* b */> breakpoint_created; | 
 |  | 
 | /* A breakpoint has been destroyed.  The argument B is the | 
 |    pointer to the destroyed breakpoint.  */ | 
 | extern observable<struct breakpoint */* b */> breakpoint_deleted; | 
 |  | 
 | /* A breakpoint has been modified in some way.  The argument B | 
 |    is the modified breakpoint.  */ | 
 | extern observable<struct breakpoint */* b */> breakpoint_modified; | 
 |  | 
 | /* The current architecture has changed.  The argument NEWARCH is a | 
 |    pointer to the new architecture.  */ | 
 | extern observable<struct gdbarch */* newarch */> architecture_changed; | 
 |  | 
 | /* The thread's ptid has changed.  The OLD_PTID parameter specifies | 
 |    the old value, and NEW_PTID specifies the new value.  */ | 
 | extern observable<process_stratum_target * /* target */, | 
 | 		  ptid_t /* old_ptid */, ptid_t /* new_ptid */> | 
 |   thread_ptid_changed; | 
 |  | 
 | /* The inferior INF has been added to the list of inferiors.  At | 
 |    this point, it might not be associated with any process.  */ | 
 | extern observable<struct inferior */* inf */> inferior_added; | 
 |  | 
 | /* The inferior identified by INF has been attached to a | 
 |    process.  */ | 
 | extern observable<struct inferior */* inf */> inferior_appeared; | 
 |  | 
 | /* Inferior INF is about to be detached.  */ | 
 | extern observable<struct inferior */* inf */> inferior_pre_detach; | 
 |  | 
 | /* Either the inferior associated with INF has been detached from | 
 |    the process, or the process has exited.  */ | 
 | extern observable<struct inferior */* inf */> inferior_exit; | 
 |  | 
 | /* The inferior INF has been removed from the list of inferiors. | 
 |    This method is called immediately before freeing INF.  */ | 
 | extern observable<struct inferior */* inf */> inferior_removed; | 
 |  | 
 | /* Bytes from DATA to DATA + LEN have been written to the inferior | 
 |    at ADDR.  */ | 
 | extern observable<struct inferior */* inferior */, CORE_ADDR /* addr */, | 
 | 		  ssize_t /* len */, const bfd_byte */* data */> | 
 |     memory_changed; | 
 |  | 
 | /* Called before a top-level prompt is displayed.  CURRENT_PROMPT is | 
 |    the current top-level prompt.  */ | 
 | extern observable<const char */* current_prompt */> before_prompt; | 
 |  | 
 | /* Variable gdb_datadir has been set.  The value may not necessarily | 
 |    change.  */ | 
 | extern observable<> gdb_datadir_changed; | 
 |  | 
 | /* An inferior function at ADDRESS is about to be called in thread | 
 |    THREAD.  */ | 
 | extern observable<ptid_t /* thread */, CORE_ADDR /* address */> | 
 |     inferior_call_pre; | 
 |  | 
 | /* The inferior function at ADDRESS has just been called.  This | 
 |    observer is called even if the inferior exits during the call. | 
 |    THREAD is the thread in which the function was called, which may | 
 |    be different from the current thread.  */ | 
 | extern observable<ptid_t /* thread */, CORE_ADDR /* address */> | 
 |     inferior_call_post; | 
 |  | 
 | /* A register in the inferior has been modified by the gdb user.  */ | 
 | extern observable<frame_info_ptr /* frame */, int /* regnum */> | 
 |     register_changed; | 
 |  | 
 | /* The user-selected inferior, thread and/or frame has changed.  The | 
 |    user_select_what flag specifies if the inferior, thread and/or | 
 |    frame has changed.  */ | 
 | extern observable<user_selected_what /* selection */> | 
 |     user_selected_context_changed; | 
 |  | 
 | /* This is notified when a styling setting has changed, content may need | 
 |    to be updated based on the new settings.  */ | 
 | extern observable<> styling_changed; | 
 |  | 
 | /* The CLI's notion of the current source has changed.  This differs | 
 |    from user_selected_context_changed in that it is also set by the | 
 |    "list" command.  */ | 
 | extern observable<> current_source_symtab_and_line_changed; | 
 |  | 
 | /* Called when GDB is about to exit.  */ | 
 | extern observable<int> gdb_exiting; | 
 |  | 
 | /* When a connection is removed.  */ | 
 | extern observable<process_stratum_target */* target */> connection_removed; | 
 |  | 
 | /* About to enter target_wait (). */ | 
 | extern observable <ptid_t /* ptid */> target_pre_wait; | 
 |  | 
 | /* About to leave target_wait (). */ | 
 | extern observable <ptid_t /* event_ptid */> target_post_wait; | 
 |  | 
 | } /* namespace observers */ | 
 |  | 
 | } /* namespace gdb */ | 
 |  | 
 | #endif /* OBSERVABLE_H */ |