aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport/observable.h
AgeCommit message (Collapse)AuthorFilesLines
2023-03-09gdb, gdbserver, gdbsupport: fix whitespace issuesSimon Marchi1-10/+10
Replace spaces with tabs in a bunch of places. Change-Id: If0f87180f1d13028dc178e5a8af7882a067868b0
2023-01-01Update copyright year range in header of all files managed by GDBJoel Brobecker1-1/+1
This commit is the result of running the gdb/copyright.py script, which automated the update of the copyright year range for all source files managed by the GDB project to be updated to include year 2023.
2022-05-10Move non-dependent gdb::observers::observable::visit_state outside templatePedro Alves1-15/+24
The other day, while looking at the symbols that end up in a GDB index, I noticed that the gdb::observers::observable::visit_state enum class appears a number of times: $ grep VISIT gdb-index-symbol-names.txt gdb::observers::observable<bpstat*, int>::visit_state::NOT_VISITED gdb::observers::observable<bpstat*, int>::visit_state::VISITED gdb::observers::observable<bpstat*, int>::visit_state::VISITING gdb::observers::observable<breakpoint*>::visit_state::NOT_VISITED gdb::observers::observable<breakpoint*>::visit_state::VISITED gdb::observers::observable<breakpoint*>::visit_state::VISITING gdb::observers::observable<char const*, char const*>::visit_state::NOT_VISITED gdb::observers::observable<char const*, char const*>::visit_state::VISITED gdb::observers::observable<char const*, char const*>::visit_state::VISITING gdb::observers::observable<char const*>::visit_state::NOT_VISITED gdb::observers::observable<char const*>::visit_state::VISITED gdb::observers::observable<char const*>::visit_state::VISITING gdb::observers::observable<enum_flags<user_selected_what_flag> >::visit_state::NOT_VISITED gdb::observers::observable<enum_flags<user_selected_what_flag> >::visit_state::VISITED gdb::observers::observable<enum_flags<user_selected_what_flag> >::visit_state::VISITING gdb::observers::observable<frame_info*, int>::visit_state::NOT_VISITED gdb::observers::observable<frame_info*, int>::visit_state::VISITED gdb::observers::observable<frame_info*, int>::visit_state::VISITING gdb::observers::observable<gdbarch*>::visit_state::NOT_VISITED gdb::observers::observable<gdbarch*>::visit_state::VISITED gdb::observers::observable<gdbarch*>::visit_state::VISITING gdb::observers::observable<gdb_signal>::visit_state::NOT_VISITED gdb::observers::observable<gdb_signal>::visit_state::VISITED gdb::observers::observable<gdb_signal>::visit_state::VISITING [... snip ...] $ grep VISIT gdb-index-symbol-names.txt | wc -l 72 enum class visit_state is defined inside the class template observable, but it doesn't have to be, as it does not depend on the template parameters. This commit moves it out, so that only one such type exists. This reduces the size of a -O0 -g3 build for me by around 0.6%, like so: $ du -b gdb.before gdb.after 164685280 gdb.before 163707424 gdb.fixed and codesize by some 0.5%. Change-Id: I405f4ef27b8358fdd22158245b145d849b45658e
2022-01-01Automatic Copyright Year update after running gdb/copyright.pyJoel Brobecker1-1/+1
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
2021-04-27gdbsupport: allow to specify dependencies between observersMichael Weghorn1-16/+100
Previously, the observers attached to an observable were always notified in the order in which they had been attached. That order is not easily controlled, because observers are typically attached in _initialize_* functions, which are called in an undefined order. However, an observer may require that another observer attached only later is called before itself is. Therefore, extend the 'observable' class to allow explicitly specifying dependencies when attaching observers, by adding the possibility to specify tokens for observers that it depends on. To make sure dependencies are notified before observers depending on them, the vector holding the observers is sorted in a way that dependencies come before observers depending on them. The current implementation for sorting uses the depth-first search algorithm for topological sorting as described at [1]. Extend the observable unit tests to cover this case as well. Check that this works for a few different orders in which the observers are attached. This newly introduced mechanism to explicitly specify dependencies will be used in a follow-up commit. [1] https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search Tested on x86_64-linux (Debian testing). gdb/ChangeLog: * unittests/observable-selftests.c (dependency_test_counters): New. (observer_token0, observer_token1, observer_token2, observer_token3, observer_token4, observer_token5): New. (struct dependency_observer_data): New struct. (observer_dependency_test_callback): New function. (test_observers): New. (run_dependency_test): New function. (test_dependency): New. (_initialize_observer_selftest): Register dependency test. gdbsupport/ChangeLog: * observable.h (class observable): Extend to allow specifying dependencies between observers, keep vector holding observers sorted so that dependencies are notified before observers depending on them. Change-Id: I5399def1eeb69ca99e28c9f1fdf321d78b530bdb
2021-04-24gdbsupport: add observer_debug_printf, OBSERVER_SCOPED_DEBUG_ENTER_EXITSimon Marchi1-4/+26
Switch observer to use the "new" debug printf mechanism and sprinkle a few debug prints. Here's a small example of the output with "infrun" and "observer" debug output enabled: [infrun] proceed: enter [observer] notify: start: observable target_resumed notify() called [observer] notify: start: calling observer mi-interp of observable target_resumed [observer] notify: end: calling observer mi-interp of observable target_resumed [observer] notify: start: calling observer py-inferior of observable target_resumed [observer] notify: end: calling observer py-inferior of observable target_resumed [observer] notify: end: observable target_resumed notify() called ... gdbsupport/ChangeLog: * observable.h (observer_debug_printf, OBSERVER_SCOPED_DEBUG_START_END): New. (class observable) <notify, attach>: Use them. Change-Id: If3ae4b6b65450ca3b7cae56698a87fc526688b86
2021-04-24gdbsupport, gdb: give names to observersSimon Marchi1-8/+15
Give a name to each observer, this will help produce more meaningful debug message. gdbsupport/ChangeLog: * observable.h (class observable) <struct observer> <observer>: Add name parameter. <name>: New field. <attach>: Add name parameter, update all callers. Change-Id: Ie0cc4664925215b8d2b09e026011b7803549fba0
2021-04-24gdbsupport: introduce struct observerSimon Marchi1-6/+16
Instead of using a pair. This allows keeping more data per observer in a structured way, and using field names is clearer than first/second. gdbsupport/ChangeLog: * observable.h (class observable) <struct observer>: New. <detach, notify>: Update. <m_observers>: Change type to vector of observers. Change-Id: Iadf7d1fa25049cfb089e6b1b429ddebc548825ab
2021-04-23gdbsupport, gdb: change observer_debug to boolSimon Marchi1-1/+1
gdb/ChangeLog: * observable.c (observer_debug): Change to bool. gdbsupport/ChangeLog: * observable.h (observer_debug): Change to bool. Change-Id: I58634235a20740a66eacb1c83bae3cf3304ae1fd
2021-01-01Update copyright year range in all GDB filesJoel Brobecker1-1/+1
This commits the result of running gdb/copyright.py as per our Start of New Year procedure... gdb/ChangeLog Update copyright year range in copyright header of all GDB files.
2020-01-14Move gdbsupport to the top levelTom Tromey1-0/+119
This patch moves the gdbsupport directory to the top level. This is the next step in the ongoing project to move gdbserver to the top level. The bulk of this patch was created by "git mv gdb/gdbsupport gdbsupport". This patch then adds a build system to gdbsupport and wires it into the top level. Then it changes gdb to use the top-level build. gdbserver, on the other hand, is not yet changed. It still does its own build of gdbsupport. ChangeLog 2020-01-14 Tom Tromey <tom@tromey.com> * src-release.sh (GDB_SUPPORT_DIRS): Add gdbsupport. * MAINTAINERS: Add gdbsupport. * configure: Rebuild. * configure.ac (configdirs): Add gdbsupport. * gdbsupport: New directory, move from gdb/gdbsupport. * Makefile.def (host_modules, dependencies): Add gnulib. * Makefile.in: Rebuild. gdb/ChangeLog 2020-01-14 Tom Tromey <tom@tromey.com> * nat/x86-linux-dregs.c: Include configh.h. * nat/linux-ptrace.c: Include configh.h. * nat/linux-btrace.c: Include configh.h. * defs.h: Include config.h, bfd.h. * configure.ac: Don't source common.host. (CONFIG_OBS, CONFIG_SRCS): Remove gdbsupport files. * configure: Rebuild. * acinclude.m4: Update path. * Makefile.in (SUPPORT, LIBSUPPORT, INCSUPPORT): New variables. (CONFIG_SRC_SUBDIR): Remove gdbsupport. (INTERNAL_CFLAGS_BASE): Add INCSUPPORT. (CLIBS): Add LIBSUPPORT. (CDEPS): Likewise. (COMMON_SFILES): Remove gdbsupport files. (HFILES_NO_SRCDIR): Likewise. (stamp-version): Update path to create-version.sh. (ALLDEPFILES): Remove gdbsupport files. gdb/gdbserver/ChangeLog 2020-01-14 Tom Tromey <tom@tromey.com> * server.h: Include config.h. * gdbreplay.c: Include config.h. * configure: Rebuild. * configure.ac: Don't source common.host. * acinclude.m4: Update path. * Makefile.in (INCSUPPORT): New variable. (INCLUDE_CFLAGS): Add INCSUPPORT. (SFILES): Update paths. (version-generated.c): Update path to create-version.sh. (gdbsupport/%-ipa.o, gdbsupport/%.o): Update paths. gdbsupport/ChangeLog 2020-01-14 Tom Tromey <tom@tromey.com> * common-defs.h: Add GDBSERVER case. Update includes. * acinclude.m4, aclocal.m4, config.in, configure, configure.ac, Makefile.am, Makefile.in, README: New files. * Moved from ../gdb/gdbsupport/ Change-Id: I07632e7798635c1bab389bf885971e584fb4bb78