/* Observers

   Copyright (C) 2016-2024 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 GDB_OBSERVABLE_H
#define GDB_OBSERVABLE_H

#include "gdbsupport/observable.h"
#include "target/waitstatus.h"

struct bpstat;
struct solib;
struct objfile;
struct thread_info;
struct inferior;
struct process_stratum_target;
struct target_ops;
struct trace_state_variable;
struct program_space;

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 in PSPACE 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).  The path to the new executable can be found
   by examining PSPACE->exec_filename.

   When RELOAD is true the path to the executable hasn't changed, but the
   file does appear to have changed, so GDB reloaded it, e.g. if the user
   recompiled the executable.  when RELOAD is false then the path to the
   executable has not changed.  */
extern observable<struct program_space */* pspace */,
		  bool /*reload */> 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<solib &/* solib */> solib_loaded;

/* The shared library SOLIB has been unloaded from program space PSPACE.
   Note  when gdb calls this observer, the library's symbols have not
   been unloaded yet, and thus are still available.  */
extern observable<program_space *, const solib &/* solib */> solib_unloaded;

/* The symbol file specified by OBJFILE has been loaded.  */
extern observable<struct objfile */* objfile */> new_objfile;

/*  All objfiles from PSPACE were removed.  */
extern observable<program_space */* pspace */> all_objfiles_removed;

/* 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.  EXIT_CODE is the thread's
   exit code, if available.  The SILENT argument indicates that GDB is
   removing the thread from its tables without wanting to notify the
   CLI about it.  */
extern observable<thread_info */* t */,
		  std::optional<ULONGEST> /* exit_code */,
		  bool /* silent */> thread_exit;

/* The thread specified by T has been deleted, with delete_thread.
   This is called just before the thread_info object is destroyed with
   operator delete.  */
extern observable<thread_info */* t */> thread_deleted;

/* 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;

/* GDB has instantiated a new architecture, NEWARCH is a pointer to the new
   architecture.  */
extern observable<struct gdbarch */* newarch */> new_architecture;

/* 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;

/* The inferior CLONE has been created by cloning INF.  */
extern observable<struct inferior */* inf */, struct inferior */* clone */>
    inferior_cloned;

/* 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<const 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;

/* New program space PSPACE was created.  */
extern observable <program_space */* pspace */> new_program_space;

/* The program space PSPACE is about to be deleted.  */
extern observable <program_space */* pspace */> free_program_space;

extern observable<bool /* enabled */> tui_enabled;

} /* namespace observers */

} /* namespace gdb */

#endif /* GDB_OBSERVABLE_H */
