On Tue, May 2, 2023 at 10:50 PM Simon Marchi via Gdb-patches < gdb-patches@sourceware.org> wrote: > Instead of having the interpreter code registering observers for the > signal_received observable, add a "signal_received" virtual method to > struct interp. Add a interps_notify_signal_received function that loops > over all UIs and calls the signal_received method on the interpreter. > Finally, add a notify_signal_received function that calls > interps_notify_signal_received and then notifies the observers. Replace > all existing notifications to the signal_received observers with calls > to notify_signal_received. > > Before this patch, the CLI and MI code both register a signal_received > observer. These observer go over all UIs, and, for those that have a > interpreter of the right kind, print the stop notifiation. > > After this patch, we have just one "loop over all UIs", inside > interps_notify_signal_received. Since the interp::on_signal_received > method gets called once for each interpreter, the implementations only > need to deal with the current interpreter (the "this" pointer). > > The motivation for this patch comes from a future patch, that makes the > amdgpu code register an observer to print a warning after the CLI's > signal stop message. Since the amdgpu and the CLI code both use > observers, the order of the two messages is not stable, unless we define > the priority using the observer dependency system. However, the > approach of using virtual methods on the interpreters seems like a good > change anyway, I think it's more straightforward and simple to > understand than the current solution that uses observers. We are sure > that the amdgpu message gets printed after the CLI message, since > observers are notified after interpreters. > > Keep the signal_received, even if nothing uses if, because we will be > using it in the upcoming amdgpu patch implementing the warning described > above. > > Change-Id: I4d8614bb8f6e0717f4bfc2a59abded3702f23ac4 > --- > gdb/cli/cli-interp.c | 17 +++-------------- > gdb/cli/cli-interp.h | 2 ++ > gdb/infrun.c | 14 ++++++++++++-- > gdb/infrun.h | 4 ++++ > gdb/interps.c | 23 +++++++++++++++++++++++ > gdb/interps.h | 8 ++++++++ > gdb/mi/mi-interp.c | 20 ++++---------------- > gdb/mi/mi-interp.h | 2 ++ > gdb/remote.c | 2 +- > 9 files changed, 59 insertions(+), 33 deletions(-) > > I can confirm this causes no regressions when tested on Fedora-Rawhide, > ppc64le. >