mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-19 23:33:31 +08:00
76727919ce
This converts observers from using a special source-generating script to be plain C++. This version of the patch takes advantage of C++11 by using std::function and variadic templates; incorporates Pedro's patches; and renames the header file to "observable.h" (this change eliminates the need for a clean rebuild). Note that Pedro's patches used a template lambda in tui-hooks.c, but this failed to compile on some buildbot instances (presumably due to differing C++ versions); I replaced this with an ordinary template function. Regression tested on the buildbot. gdb/ChangeLog 2018-03-19 Pedro Alves <palves@redhat.com> Tom Tromey <tom@tromey.com> * unittests/observable-selftests.c: New file. * common/observable.h: New file. * observable.h: New file. * ada-lang.c, ada-tasks.c, agent.c, aix-thread.c, annotate.c, arm-tdep.c, auto-load.c, auxv.c, break-catch-syscall.c, breakpoint.c, bsd-uthread.c, cli/cli-interp.c, cli/cli-setshow.c, corefile.c, dummy-frame.c, event-loop.c, event-top.c, exec.c, extension.c, frame.c, gdbarch.c, guile/scm-breakpoint.c, infcall.c, infcmd.c, inferior.c, inflow.c, infrun.c, jit.c, linux-tdep.c, linux-thread-db.c, m68klinux-tdep.c, mi/mi-cmd-break.c, mi/mi-interp.c, mi/mi-main.c, objfiles.c, ppc-linux-nat.c, ppc-linux-tdep.c, printcmd.c, procfs.c, python/py-breakpoint.c, python/py-finishbreakpoint.c, python/py-inferior.c, python/py-unwind.c, ravenscar-thread.c, record-btrace.c, record-full.c, record.c, regcache.c, remote.c, riscv-tdep.c, sol-thread.c, solib-aix.c, solib-spu.c, solib.c, spu-multiarch.c, spu-tdep.c, stack.c, symfile-mem.c, symfile.c, symtab.c, thread.c, top.c, tracepoint.c, tui/tui-hooks.c, tui/tui-interp.c, valops.c: Update all users. * tui/tui-hooks.c (tui_bp_created_observer) (tui_bp_deleted_observer, tui_bp_modified_observer) (tui_inferior_exit_observer, tui_before_prompt_observer) (tui_normal_stop_observer, tui_register_changed_observer): Remove. (tui_observers_token): New global. (attach_or_detach, tui_attach_detach_observers): New functions. (tui_install_hooks, tui_remove_hooks): Use tui_attach_detach_observers. * record-btrace.c (record_btrace_thread_observer): Remove. (record_btrace_thread_observer_token): New global. * observer.sh: Remove. * observer.c: Rename to observable.c. * observable.c (namespace gdb_observers): Define new objects. (observer_debug): Move into gdb_observers namespace. (struct observer, struct observer_list, xalloc_observer_list_node) (xfree_observer_list_node, generic_observer_attach) (generic_observer_detach, generic_observer_notify): Remove. (_initialize_observer): Update. Don't include observer.inc. * Makefile.in (generated_files): Remove observer.h, observer.inc. (clean mostlyclean): Likewise. (observer.h, observer.inc): Remove targets. (SUBDIR_UNITTESTS_SRCS): Add observable-selftests.c. (COMMON_SFILES): Use observable.c, not observer.c. * .gitignore: Remove observer.h. gdb/doc/ChangeLog 2018-03-19 Tom Tromey <tom@tromey.com> * observer.texi: Remove. gdb/testsuite/ChangeLog 2018-03-19 Tom Tromey <tom@tromey.com> * gdb.gdb/observer.exp: Remove.
236 lines
9.0 KiB
C++
236 lines
9.0 KiB
C++
/* Observers
|
|
|
|
Copyright (C) 2016-2018 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/>. */
|
|
|
|
#if !defined (GDB_OBSERVER_H)
|
|
#define GDB_OBSERVER_H
|
|
|
|
#include "common/observable.h"
|
|
|
|
struct bpstats;
|
|
struct so_list;
|
|
struct objfile;
|
|
struct thread_info;
|
|
struct inferior;
|
|
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 bpstats *, int> normal_stop;
|
|
|
|
/* The inferior was stopped by a signal. */
|
|
extern observable<enum gdb_signal> signal_received;
|
|
|
|
/* We are done with a step/next/si/ni command. */
|
|
extern observable<> end_stepping_range;
|
|
|
|
/* The inferior was terminated by a signal. */
|
|
extern observable<enum gdb_signal> signal_exited;
|
|
|
|
/* The inferior program is finished. */
|
|
extern observable<int> exited;
|
|
|
|
/* Reverse execution: target ran out of history info. */
|
|
extern observable<> no_history;
|
|
|
|
/* A synchronous command finished. */
|
|
extern observable<> sync_execution_done;
|
|
|
|
/* An error was caught while executing a command. */
|
|
extern observable<> command_error;
|
|
|
|
/* The target's register contents have changed. */
|
|
extern observable<struct target_ops *> 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<struct target_ops *, int> inferior_created;
|
|
|
|
/* The status of process record for inferior inferior in gdb has
|
|
changed. The process record is started if started is true, and
|
|
the process record is stopped if started is false.
|
|
|
|
When started is true, method indicates the short name of the
|
|
method used for recording. If the method supports multiple
|
|
formats, format indicates which one is being used, otherwise it
|
|
is NULL. When started is false, they are both NULL. */
|
|
extern observable<struct inferior *, int, const char *, const char *>
|
|
record_changed;
|
|
|
|
/* 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_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_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 *> new_objfile;
|
|
|
|
/* The object file specified by objfile is about to be freed. */
|
|
extern observable<struct objfile *> free_objfile;
|
|
|
|
/* The thread specified by t has been created. */
|
|
extern observable<struct thread_info *> 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 *, int> 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> 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> 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 *> breakpoint_created;
|
|
|
|
/* A breakpoint has been destroyed. The argument b is the
|
|
pointer to the destroyed breakpoint. */
|
|
extern observable<struct breakpoint *> breakpoint_deleted;
|
|
|
|
/* A breakpoint has been modified in some way. The argument b
|
|
is the modified breakpoint. */
|
|
extern observable<struct breakpoint *> breakpoint_modified;
|
|
|
|
/* The trace frame is changed to tfnum (e.g., by using the 'tfind'
|
|
command). If tfnum is negative, it means gdb resumes live
|
|
debugging. The number of the tracepoint associated with this
|
|
traceframe is tpnum. */
|
|
extern observable<int, int> traceframe_changed;
|
|
|
|
/* The current architecture has changed. The argument newarch is a
|
|
pointer to the new architecture. */
|
|
extern observable<struct gdbarch *> 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<ptid_t, ptid_t> 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 *> inferior_added;
|
|
|
|
/* The inferior identified by inf has been attached to a
|
|
process. */
|
|
extern observable<struct inferior *> inferior_appeared;
|
|
|
|
/* Either the inferior associated with inf has been detached from
|
|
the process, or the process has exited. */
|
|
extern observable<struct inferior *> 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 *> inferior_removed;
|
|
|
|
/* Bytes from data to data + len have been written to the inferior
|
|
at addr. */
|
|
extern observable<struct inferior *, CORE_ADDR, ssize_t, const bfd_byte *>
|
|
memory_changed;
|
|
|
|
/* Called before a top-level prompt is displayed. current_prompt is
|
|
the current top-level prompt. */
|
|
extern observable<const char *> before_prompt;
|
|
|
|
/* Variable gdb_datadir has been set. The value may not necessarily
|
|
change. */
|
|
extern observable<> gdb_datadir_changed;
|
|
|
|
/* The parameter of some 'set' commands in console are changed.
|
|
This method is called after a command 'set param value'. param
|
|
is the parameter of 'set' command, and value is the value of
|
|
changed parameter. */
|
|
extern observable<const char *, const char *> command_param_changed;
|
|
|
|
/* The new trace state variable tsv is created. */
|
|
extern observable<const struct trace_state_variable *> tsv_created;
|
|
|
|
/* The trace state variable tsv is deleted. If tsv is NULL, all
|
|
trace state variables are deleted. */
|
|
extern observable<const struct trace_state_variable *> tsv_deleted;
|
|
|
|
/* The trace state value tsv is modified. */
|
|
extern observable<const struct trace_state_variable *> tsv_modified;
|
|
|
|
/* An inferior function at address is about to be called in thread
|
|
thread. */
|
|
extern observable<ptid_t, CORE_ADDR> 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, CORE_ADDR> inferior_call_post;
|
|
|
|
/* A register in the inferior has been modified by the gdb user. */
|
|
extern observable<struct frame_info *, int> 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> user_selected_context_changed;
|
|
|
|
} /* namespace observers */
|
|
|
|
} /* namespace gdb */
|
|
|
|
#endif /* GDB_OBSERVER_H */
|