From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id cQBtBQN/ImG4EQAAWB0awg (envelope-from ) for ; Sun, 22 Aug 2021 12:44:51 -0400 Received: by simark.ca (Postfix, from userid 112) id 051EE1EE18; Sun, 22 Aug 2021 12:44:51 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 7E3951E813 for ; Sun, 22 Aug 2021 12:44:49 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B8A6C3857413 for ; Sun, 22 Aug 2021 16:44:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B8A6C3857413 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1629650688; bh=LvzUzAR1IqJGTJPCTI5R2e6y1kThnyOO2ISkTq3fGrI=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=RpBB63TJG97Ey9kU4WS68BG4e3KhgtEKr4+EVOFnazzIB4YzoHkb2CdpTT2aVpMbt /yBJxg4L5p7LIb73pBTGzEddnu72MP0HymHabkhss3F29uqHLJu1WpHlu/qHLpxXp2 30nLy91kKUE5j3c8xr9Cb6QVviI/uyVIaz+cK9hY= Received: from vimdzmsp-nwas02.bluewin.ch (vimdzmsp-nwas02.bluewin.ch [195.186.228.50]) by sourceware.org (Postfix) with ESMTPS id 6564A3858D35 for ; Sun, 22 Aug 2021 16:44:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6564A3858D35 Received: from patrick.monnerat ([178.193.82.56]) by vimdzmsp-nwas02.bluewin.ch Swisscom AG with ESMTP id Hqa6mUTTlslQjHqaBmAPhA; Sun, 22 Aug 2021 18:44:27 +0200 Received: from patrick.monnerat (localhost [127.0.0.1]) by patrick.monnerat (8.16.1/8.16.1) with ESMTPS id 17MGiFJJ144986 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Sun, 22 Aug 2021 18:44:15 +0200 Received: (from patrick@localhost) by patrick.monnerat (8.16.1/8.16.1/Submit) id 17MGhwA0144923; Sun, 22 Aug 2021 18:43:58 +0200 X-Authentication-Warning: patrick.monnerat: patrick set sender to patrick@monnerat.net using -f To: gdb-patches@sourceware.org Subject: [PATCH] Replace deprecated_target_wait_hook by an observer Date: Sun, 22 Aug 2021 18:42:56 +0200 Message-Id: <20210822164256.144875-1-patrick@monnerat.net> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CMAE-Envelope: MS4xfPJON5wVUvVdzACL49CmUiOX50FpGIYtobW2mtqfmhbTsdtVedYcpQxZ9ovBBzA/xxk8r4IDM6GfRf0Qp/8XeWLfklx8Y2uRzIQcmzjiuV3C8vlBGWSv CIJ5mhisqHpqOBLfxNV5aKZIFm8USmtjC17XrUw7Bp7Nkh5jhsnH36UmabAs4++xjYJnxQ2t+ie5PpttPLwh523QDpRJcyleq8g= X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Patrick Monnerat via Gdb-patches Reply-To: Patrick Monnerat Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" Commit b60cea7 (Make target_wait options use enum flags) broke deprecated_target_wait_hook usage: there's a commit comment telling this hook has not been converted. Rather than trying to mend it, this patch replaces the hook by a target_wait observer: waiting_for_target (bool entering, ptid_t ptid) Upon target_wait entry, it is notified with entering=TRUE and ptid passed to target_wait. Upon exit, it is notified again with entering=FALSE and ptid = event ptid returned by target_wait. This change benefits to Insight (out-of-tree): there's no real use of the late hook in gdb itself. --- gdb/infrun.c | 15 +++------------ gdb/infrun.h | 5 ++--- gdb/interps.c | 1 - gdb/observable.c | 1 + gdb/observable.h | 3 +++ gdb/target.c | 7 ++++++- gdb/top.c | 7 ------- 7 files changed, 15 insertions(+), 24 deletions(-) diff --git a/gdb/infrun.c b/gdb/infrun.c index 5ee650fa464..695e3b0a586 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -366,7 +366,7 @@ show_stop_on_solib_events (struct ui_file *file, int from_tty, static bool stop_print_frame; /* This is a cached copy of the target/ptid/waitstatus of the last - event returned by target_wait()/deprecated_target_wait_hook(). + event returned by target_wait(). This information is returned by get_last_target_status(). */ static process_stratum_target *target_last_proc_target; static ptid_t target_last_wait_ptid; @@ -3478,7 +3478,6 @@ static ptid_t do_target_wait_1 (inferior *inf, ptid_t ptid, target_waitstatus *status, target_wait_flags options) { - ptid_t event_ptid; struct thread_info *tp; /* We know that we are looking for an event in the target of inferior @@ -3594,12 +3593,7 @@ do_target_wait_1 (inferior *inf, ptid_t ptid, if (!target_can_async_p ()) options &= ~TARGET_WNOHANG; - if (deprecated_target_wait_hook) - event_ptid = deprecated_target_wait_hook (ptid, status, options); - else - event_ptid = target_wait (ptid, status, options); - - return event_ptid; + return target_wait (ptid, status, options); } /* Wrapper for target_wait that first checks whether threads have @@ -4558,10 +4552,7 @@ poll_one_curr_target (struct target_waitstatus *ws) don't get any event. */ target_dcache_invalidate (); - if (deprecated_target_wait_hook) - event_ptid = deprecated_target_wait_hook (minus_one_ptid, ws, TARGET_WNOHANG); - else - event_ptid = target_wait (minus_one_ptid, ws, TARGET_WNOHANG); + event_ptid = target_wait (minus_one_ptid, ws, TARGET_WNOHANG); if (debug_infrun) print_target_wait_results (minus_one_ptid, event_ptid, ws); diff --git a/gdb/infrun.h b/gdb/infrun.h index 5a577365f94..a14e20b5f94 100644 --- a/gdb/infrun.h +++ b/gdb/infrun.h @@ -124,9 +124,8 @@ extern process_stratum_target *user_visible_resume_target (ptid_t resume_ptid); extern int normal_stop (void); /* Return the cached copy of the last target/ptid/waitstatus returned - by target_wait()/deprecated_target_wait_hook(). The data is - actually cached by handle_inferior_event(), which gets called - immediately after target_wait()/deprecated_target_wait_hook(). */ + by target_wait(). The data is actually cached by handle_inferior_event(), + which gets called immediately after target_wait(). */ extern void get_last_target_status (process_stratum_target **target, ptid_t *ptid, struct target_waitstatus *status); diff --git a/gdb/interps.c b/gdb/interps.c index ec19822b571..55bd10467c3 100644 --- a/gdb/interps.c +++ b/gdb/interps.c @@ -356,7 +356,6 @@ clear_interpreter_hooks (void) deprecated_readline_hook = 0; deprecated_readline_end_hook = 0; deprecated_context_hook = 0; - deprecated_target_wait_hook = 0; deprecated_call_command_hook = 0; deprecated_error_begin_hook = 0; } diff --git a/gdb/observable.c b/gdb/observable.c index 51f5edb0a1f..08d45c77ea7 100644 --- a/gdb/observable.c +++ b/gdb/observable.c @@ -77,6 +77,7 @@ DEFINE_OBSERVABLE (register_changed); DEFINE_OBSERVABLE (user_selected_context_changed); DEFINE_OBSERVABLE (source_styling_changed); DEFINE_OBSERVABLE (current_source_symtab_and_line_changed); +DEFINE_OBSERVABLE (waiting_for_target); } /* namespace observers */ } /* namespace gdb */ diff --git a/gdb/observable.h b/gdb/observable.h index 915770ff363..d61b5468c9e 100644 --- a/gdb/observable.h +++ b/gdb/observable.h @@ -251,6 +251,9 @@ extern observable<> source_styling_changed; extern observable<> current_source_symtab_and_line_changed; +/* About to enter target_wait () or leave it. */ +extern observable waiting_for_target; + } /* namespace observers */ } /* namespace gdb */ diff --git a/gdb/target.c b/gdb/target.c index ae2d659583e..df7c64e204f 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -26,6 +26,7 @@ #include "symtab.h" #include "inferior.h" #include "infrun.h" +#include "observable.h" #include "bfd.h" #include "symfile.h" #include "objfiles.h" @@ -2599,13 +2600,17 @@ target_wait (ptid_t ptid, struct target_waitstatus *status, { target_ops *target = current_inferior ()->top_target (); process_stratum_target *proc_target = current_inferior ()->process_target (); + ptid_t event_ptid; gdb_assert (!proc_target->commit_resumed_state); if (!target->can_async_p ()) gdb_assert ((options & TARGET_WNOHANG) == 0); - return target->wait (ptid, status, options); + gdb::observers::waiting_for_target.notify (true, ptid); + event_ptid = target->wait (ptid, status, options); + gdb::observers::waiting_for_target.notify (false, event_ptid); + return event_ptid; } /* See target.h. */ diff --git a/gdb/top.c b/gdb/top.c index 0c49f4f9eb4..368166720ac 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -249,13 +249,6 @@ void (*deprecated_readline_end_hook) (void); void (*deprecated_attach_hook) (void); void (*deprecated_detach_hook) (void); -/* Called when going to wait for the target. Usually allows the GUI - to run while waiting for target events. */ - -ptid_t (*deprecated_target_wait_hook) (ptid_t ptid, - struct target_waitstatus *status, - int options); - /* Used by UI as a wrapper around command execution. May do various things like enabling/disabling buttons, etc... */ -- 2.31.1