diff options
author | Tom Tromey <tom@tromey.com> | 2016-10-02 10:50:20 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-03-19 09:37:49 -0600 |
commit | 76727919ceb590f03ff0f6db08b7ceab5b7aeaff (patch) | |
tree | bf78b72a63f09f3d2c619048b15d73c5f343e806 /gdb/doc | |
parent | 194ed4130dadb7dd1668f6af87405bdcd8041199 (diff) | |
download | gdb-76727919ceb590f03ff0f6db08b7ceab5b7aeaff.zip gdb-76727919ceb590f03ff0f6db08b7ceab5b7aeaff.tar.gz gdb-76727919ceb590f03ff0f6db08b7ceab5b7aeaff.tar.bz2 |
Convert observers to C++
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.
Diffstat (limited to 'gdb/doc')
-rw-r--r-- | gdb/doc/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/doc/observer.texi | 313 |
2 files changed, 4 insertions, 313 deletions
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index dca13c6..2441f15 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2018-03-19 Tom Tromey <tom@tromey.com> + + * observer.texi: Remove. + 2018-03-04 John Baldwin <jhb@FreeBSD.org> * gdb.texinfo (Debugging Output): Document "set/show debug diff --git a/gdb/doc/observer.texi b/gdb/doc/observer.texi deleted file mode 100644 index 8ab8da7..0000000 --- a/gdb/doc/observer.texi +++ /dev/null @@ -1,313 +0,0 @@ -@c -*-texinfo-*- - -@c This file is part of the GDB manual. -@c -@c Copyright (C) 2003-2018 Free Software Foundation, Inc. -@c -@c See the file gdbint.texinfo for copying conditions. -@c -@c Also, the @deftypefun lines from this file are processed into a -@c header file during the GDB build process. Permission is granted -@c to redistribute and/or modify those lines under the terms of the -@c GNU General Public License as published by the Free Software -@c Foundation; either version 3 of the License, or (at your option) -@c any later version. - -@node GDB Observers -@appendix @value{GDBN} Currently available observers - -@section Implementation rationale -@cindex observers implementation rationale - -An @dfn{observer} is an entity which is interested in being notified -when GDB reaches certain states, or certain events occur in GDB. -The entity being observed is called the @dfn{subject}. To receive -notifications, the observer attaches a callback to the subject. -One subject can have several observers. - -@file{observer.c} implements an internal generic low-level event -notification mechanism. This generic event notification mechanism is -then re-used to implement the exported high-level notification -management routines for all possible notifications. - -The current implementation of the generic observer provides support -for contextual data. This contextual data is given to the subject -when attaching the callback. In return, the subject will provide -this contextual data back to the observer as a parameter of the -callback. - -Note that the current support for the contextual data is only partial, -as it lacks a mechanism that would deallocate this data when the -callback is detached. This is not a problem so far, as this contextual -data is only used internally to hold a function pointer. Later on, if -a certain observer needs to provide support for user-level contextual -data, then the generic notification mechanism will need to be -enhanced to allow the observer to provide a routine to deallocate the -data when attaching the callback. - -The observer implementation is also currently not reentrant. -In particular, it is therefore not possible to call the attach -or detach routines during a notification. - -@section Debugging -Observer notifications can be traced using the command @samp{set debug -observer 1} (@pxref{Debugging Output, , Optional messages about -internal happenings, gdb, Debugging with @var{GDBN}}). - -@section @code{normal_stop} Notifications -@cindex @code{normal_stop} observer -@cindex notification about inferior execution stop - -@value{GDBN} notifies all @code{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 @code{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. - -The following interfaces are available to manage observers: - -@deftypefun extern struct observer *observer_attach_@var{event} (observer_@var{event}_ftype *@var{f}) -Using the function @var{f}, create an observer that is notified when -ever @var{event} occurs, return the observer. -@end deftypefun - -@deftypefun extern void observer_detach_@var{event} (struct observer *@var{observer}); -Remove @var{observer} from the list of observers to be notified when -@var{event} occurs. -@end deftypefun - -@deftypefun extern void observer_notify_@var{event} (void); -Send a notification to all @var{event} observers. -@end deftypefun - -The following observable events are defined: - -@deftypefun void normal_stop (struct bpstats *@var{bs}, int @var{print_frame}) -The inferior has stopped for real. The @var{bs} argument describes -the breakpoints were are stopped at, if any. Second argument -@var{print_frame} non-zero means display the location where the -inferior has stopped. -@end deftypefun - -@deftypefun void signal_received (enum gdb_signal @var{siggnal}) -The inferior was stopped by a signal. -@end deftypefun - -@deftypefun void end_stepping_range (void) -We are done with a step/next/si/ni command. -@end deftypefun - -@deftypefun void signal_exited (enum gdb_signal @var{siggnal}) -The inferior was terminated by a signal. -@end deftypefun - -@deftypefun void exited (int @var{exitstatus}) -The inferior program is finished. -@end deftypefun - -@deftypefun void no_history (void) -Reverse execution: target ran out of history info. -@end deftypefun - -@deftypefun void sync_execution_done (void) -A synchronous command finished. -@end deftypefun - -@deftypefun void command_error (void) -An error was caught while executing a command. -@end deftypefun - -@deftypefun void target_changed (struct target_ops *@var{target}) -The target's register contents have changed. -@end deftypefun - -@deftypefun void executable_changed (void) -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). -@end deftypefun - -@deftypefun void inferior_created (struct target_ops *@var{objfile}, int @var{from_tty}) -@value{GDBN} has just connected to an inferior. For @samp{run}, -@value{GDBN} calls this observer while the inferior is still stopped -at the entry-point instruction. For @samp{attach} and @samp{core}, -@value{GDBN} calls this observer immediately after connecting to the -inferior, and before any information on the inferior has been printed. -@end deftypefun - -@deftypefun void record_changed (struct inferior *@var{inferior}, int @var{started}, const char *@var{method}, const char *@var{format}) -The status of process record for inferior @var{inferior} in -@value{GDBN} has changed. The process record is started if -@var{started} is true, and the process record is stopped if -@var{started} is false. - -When @var{started} is true, @var{method} indicates the short name of the method -used for recording. If the method supports multiple formats, @var{format} -indicates which one is being used, otherwise it is NULL. When @var{started} is -false, they are both NULL. -@end deftypefun - -@deftypefun void solib_loaded (struct so_list *@var{solib}) -The shared library specified by @var{solib} has been loaded. Note that -when @value{GDBN} calls this observer, the library's symbols probably -haven't been loaded yet. -@end deftypefun - -@deftypefun void solib_unloaded (struct so_list *@var{solib}) -The shared library specified by @var{solib} has been unloaded. -Note that when @value{GDBN} calls this observer, the library's -symbols have not been unloaded yet, and thus are still available. -@end deftypefun - -@deftypefun void new_objfile (struct objfile *@var{objfile}) -The symbol file specified by @var{objfile} has been loaded. -Called with @var{objfile} equal to @code{NULL} to indicate -previously loaded symbol table data has now been invalidated. -@end deftypefun - -@deftypefun void free_objfile (struct objfile *@var{objfile}) -The object file specified by @var{objfile} is about to be freed. -@end deftypefun - -@deftypefun void new_thread (struct thread_info *@var{t}) -The thread specified by @var{t} has been created. -@end deftypefun - -@deftypefun void thread_exit (struct thread_info *@var{t}, int @var{silent}) -The thread specified by @var{t} has exited. The @var{silent} argument -indicates that @value{GDBN} is removing the thread from its tables -without wanting to notify the user about it. -@end deftypefun - -@deftypefun void thread_stop_requested (ptid_t @var{ptid}) -An explicit stop request was issued to @var{ptid}. If @var{ptid} -equals @var{minus_one_ptid}, the request applied to all threads. If -@code{ptid_is_pid(ptid)} returns true, the request applied to all -threads of the process pointed at by @var{ptid}. Otherwise, the -request applied to the single thread pointed at by @var{ptid}. -@end deftypefun - -@deftypefun void target_resumed (ptid_t @var{ptid}) -The target was resumed. The @var{ptid} parameter specifies which -thread was resume, and may be RESUME_ALL if all threads are resumed. -@end deftypefun - -@deftypefun void about_to_proceed (void) -The target is about to be proceeded. -@end deftypefun - -@deftypefun void breakpoint_created (struct breakpoint *@var{b}) -A new breakpoint @var{b} has been created. -@end deftypefun - -@deftypefun void breakpoint_deleted (struct breakpoint *@var{b}) -A breakpoint has been destroyed. The argument @var{b} is the -pointer to the destroyed breakpoint. -@end deftypefun - -@deftypefun void breakpoint_modified (struct breakpoint *@var{b}) -A breakpoint has been modified in some way. The argument @var{b} -is the modified breakpoint. -@end deftypefun - -@deftypefun void traceframe_changed (int @var{tfnum}, int @var{tpnum}) -The trace frame is changed to @var{tfnum} (e.g., by using the -@code{tfind} command). If @var{tfnum} is negative, it means -@value{GDBN} resumes live debugging. The number of the tracepoint -associated with this traceframe is @var{tpnum}. -@end deftypefun - -@deftypefun void architecture_changed (struct gdbarch *@var{newarch}) -The current architecture has changed. The argument @var{newarch} is -a pointer to the new architecture. -@end deftypefun - -@deftypefun void thread_ptid_changed (ptid_t @var{old_ptid}, ptid_t @var{new_ptid}) -The thread's ptid has changed. The @var{old_ptid} parameter specifies -the old value, and @var{new_ptid} specifies the new value. -@end deftypefun - -@deftypefun void inferior_added (struct inferior *@var{inf}) -The inferior @var{inf} has been added to the list of inferiors. At -this point, it might not be associated with any process. -@end deftypefun - -@deftypefun void inferior_appeared (struct inferior *@var{inf}) -The inferior identified by @var{inf} has been attached to a process. -@end deftypefun - -@deftypefun void inferior_exit (struct inferior *@var{inf}) -Either the inferior associated with @var{inf} has been detached from the -process, or the process has exited. -@end deftypefun - -@deftypefun void inferior_removed (struct inferior *@var{inf}) -The inferior @var{inf} has been removed from the list of inferiors. -This method is called immediately before freeing @var{inf}. -@end deftypefun - -@deftypefun void memory_changed (struct inferior *@var{inferior}, CORE_ADDR @var{addr}, ssize_t @var{len}, const bfd_byte *@var{data}) -Bytes from @var{data} to @var{data} + @var{len} have been written -to the @var{inferior} at @var{addr}. -@end deftypefun - -@deftypefun void before_prompt (const char *@var{current_prompt}) -Called before a top-level prompt is displayed. @var{current_prompt} is -the current top-level prompt. -@end deftypefun - -@deftypefun void gdb_datadir_changed (void) -Variable gdb_datadir has been set. The value may not necessarily change. -@end deftypefun - -@deftypefun void command_param_changed (const char *@var{param}, const char *@var{value}) -The parameter of some @code{set} commands in console are changed. This -method is called after a command @code{set @var{param} @var{value}}. -@var{param} is the parameter of @code{set} command, and @var{value} -is the value of changed parameter. -@end deftypefun - -@deftypefun void tsv_created (const struct trace_state_variable *@var{tsv}) -The new trace state variable @var{tsv} is created. -@end deftypefun - -@deftypefun void tsv_deleted (const struct trace_state_variable *@var{tsv}) -The trace state variable @var{tsv} is deleted. If @var{tsv} is -@code{NULL}, all trace state variables are deleted. -@end deftypefun - -@deftypefun void tsv_modified (const struct trace_state_variable *@var{tsv}) -The trace state value @var{tsv} is modified. -@end deftypefun - -@deftypefun void inferior_call_pre (ptid_t @var{thread}, CORE_ADDR @var{address}) -An inferior function at @var{address} is about to be called in thread -@var{thread}. -@end deftypefun - -@deftypefun void inferior_call_post (ptid_t @var{thread}, CORE_ADDR @var{address}) -The inferior function at @var{address} has just been called. This observer -is called even if the inferior exits during the call. @var{thread} is the -thread in which the function was called, which may be different from the -current thread. -@end deftypefun - -@deftypefun void register_changed (struct frame_info *@var{frame}, int @var{regnum}) -A register in the inferior has been modified by the @value{GDBN} user. -@end deftypefun - -@deftypefun void test_notification (int @var{somearg}) -This observer is used for internal testing. Do not use. -See testsuite/gdb.gdb/observer.exp. -@end deftypefun - -@deftypefun void user_selected_context_changed (user_selected_what @var{selection}) -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. -@end deftypefun |