From patchwork Mon Nov 21 17:58:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 60938 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 092C9384F4A9 for ; Mon, 21 Nov 2022 17:59:11 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from alt-proxy28.mail.unifiedlayer.com (alt-proxy28.mail.unifiedlayer.com [74.220.216.123]) by sourceware.org (Postfix) with ESMTPS id 250C43852222 for ; Mon, 21 Nov 2022 17:58:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 250C43852222 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com Received: from cmgw11.mail.unifiedlayer.com (unknown [10.0.90.126]) by progateway1.mail.pro1.eigbox.com (Postfix) with ESMTP id 6195F10127CE8 for ; Mon, 21 Nov 2022 17:58:41 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id xB45oBmnUMa19xB45oBibG; Mon, 21 Nov 2022 17:58:41 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=bKPTnNyZ c=1 sm=1 tr=0 ts=637bbc51 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=9xFQ1JgjjksA:10:nop_rcvd_month_year a=Qbun_eYptAEA:10:endurance_base64_authed_username_1 a=1PmWp5JYAAAA:8 a=PXZhN_D_T06KqPmzxUwA:9 a=YgU2nCY4GfN3Jg0JtKmw:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject: Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Z8DPZhG4mlqUjTKFwvcE/OZahzXBrEjlgcZvS8ijXos=; b=X4h7+2y6PgDtPrLdqr+8OirgdM 785f0nVd0oxcAanxdCnlOhKIdMAuR1q2gSnp1w1lIpxXbNL0jp9GZ+WCavlzSKj0QhAaVpLNg/2S9 QHQubaJzkV7eI4BfKUhUOrljt; Received: from 97-122-76-186.hlrn.qwest.net ([97.122.76.186]:42424 helo=localhost.localdomain) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1oxB44-002P6w-VY; Mon, 21 Nov 2022 10:58:41 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Remove reset_ecs Date: Mon, 21 Nov 2022 10:58:30 -0700 Message-Id: <20221121175830.3585569-1-tom@tromey.com> X-Mailer: git-send-email 2.34.3 MIME-Version: 1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 97.122.76.186 X-Source-L: No X-Exim-ID: 1oxB44-002P6w-VY X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 97-122-76-186.hlrn.qwest.net (localhost.localdomain) [97.122.76.186]:42424 X-Source-Auth: tom+tromey.com X-Email-Count: 1 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3028.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" I noticed that execution_control_state has a 'reset' method, and there's also a 'reset_ecs' function that calls it. This patch cleans this area up a little by adding a parameter to the constructor and the reset method. Some extraneous variables are also removed, like here: - struct execution_control_state ecss; - struct execution_control_state *ecs = &ecss; Here 'ecs' is never changed, so this patch removes it entirely in favor of just using the object everywhere. Regression tested on x86-64 Fedora 34. --- gdb/infrun.c | 103 +++++++++++++++++++++------------------------------ 1 file changed, 42 insertions(+), 61 deletions(-) diff --git a/gdb/infrun.c b/gdb/infrun.c index 96346e1f25b..33818852c18 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1854,16 +1854,19 @@ displaced_step_finish (thread_info *event_thread, enum gdb_signal signal) discarded between events. */ struct execution_control_state { - execution_control_state () + explicit execution_control_state (thread_info *thr = nullptr) { - this->reset (); + this->reset (thr); } - void reset () + void reset (thread_info *thr) { this->target = nullptr; - this->ptid = null_ptid; - this->event_thread = nullptr; + this->event_thread = thr; + if (thr == nullptr) + this->ptid = null_ptid; + else + this->ptid = thr->ptid; ws = target_waitstatus (); stop_func_filled_in = 0; stop_func_start = 0; @@ -1893,16 +1896,6 @@ struct execution_control_state int hit_singlestep_breakpoint; }; -/* Clear ECS and set it to point at TP. */ - -static void -reset_ecs (struct execution_control_state *ecs, struct thread_info *tp) -{ - ecs->reset (); - ecs->event_thread = tp; - ecs->ptid = tp->ptid; -} - static void keep_going_pass_signal (struct execution_control_state *ecs); static void prepare_to_wait (struct execution_control_state *ecs); static bool keep_going_stepped_thread (struct thread_info *tp); @@ -1955,8 +1948,6 @@ start_step_over (void) for (thread_info *tp : range) { - struct execution_control_state ecss; - struct execution_control_state *ecs = &ecss; step_over_what step_what; int must_be_in_line; @@ -2027,10 +2018,10 @@ start_step_over (void) continue; switch_to_thread (tp); - reset_ecs (ecs, tp); - keep_going_pass_signal (ecs); + execution_control_state ecs (tp); + keep_going_pass_signal (&ecs); - if (!ecs->wait_some_more) + if (!ecs.wait_some_more) error (_("Command aborted.")); /* If the thread's step over could not be initiated because no buffers @@ -3161,8 +3152,6 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal) struct regcache *regcache; struct gdbarch *gdbarch; CORE_ADDR pc; - struct execution_control_state ecss; - struct execution_control_state *ecs = &ecss; /* If we're stopped at a fork/vfork, follow the branch set by the "set follow-fork-mode" command; otherwise, we'll just proceed @@ -3374,10 +3363,10 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal) infrun_debug_printf ("resuming %s", tp->ptid.to_string ().c_str ()); - reset_ecs (ecs, tp); + execution_control_state ecs (tp); switch_to_thread (tp); - keep_going_pass_signal (ecs); - if (!ecs->wait_some_more) + keep_going_pass_signal (&ecs); + if (!ecs.wait_some_more) error (_("Command aborted.")); } } @@ -3390,10 +3379,10 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal) && cur_thr->inf->thread_waiting_for_vfork_done != nullptr)) { /* The thread wasn't started, and isn't queued, run it now. */ - reset_ecs (ecs, cur_thr); + execution_control_state ecs (cur_thr); switch_to_thread (cur_thr); - keep_going_pass_signal (ecs); - if (!ecs->wait_some_more) + keep_going_pass_signal (&ecs); + if (!ecs.wait_some_more) error (_("Command aborted.")); } @@ -4001,8 +3990,7 @@ wait_for_inferior (inferior *inf) while (1) { - struct execution_control_state ecss; - struct execution_control_state *ecs = &ecss; + execution_control_state ecs; overlay_cache_invalid = 1; @@ -4012,16 +4000,16 @@ wait_for_inferior (inferior *inf) don't get any event. */ target_dcache_invalidate (); - ecs->ptid = do_target_wait_1 (inf, minus_one_ptid, &ecs->ws, 0); - ecs->target = inf->process_target (); + ecs.ptid = do_target_wait_1 (inf, minus_one_ptid, &ecs.ws, 0); + ecs.target = inf->process_target (); if (debug_infrun) - print_target_wait_results (minus_one_ptid, ecs->ptid, ecs->ws); + print_target_wait_results (minus_one_ptid, ecs.ptid, ecs.ws); /* Now figure out what to do with the result of the result. */ - handle_inferior_event (ecs); + handle_inferior_event (&ecs); - if (!ecs->wait_some_more) + if (!ecs.wait_some_more) break; } @@ -4147,8 +4135,7 @@ fetch_inferior_event () { INFRUN_SCOPED_DEBUG_ENTER_EXIT; - struct execution_control_state ecss; - struct execution_control_state *ecs = &ecss; + execution_control_state ecs; int cmd_done = 0; /* Events are always processed with the main UI as current UI. This @@ -4198,27 +4185,27 @@ fetch_inferior_event () the event. */ scoped_disable_commit_resumed disable_commit_resumed ("handling event"); - if (!do_target_wait (ecs, TARGET_WNOHANG)) + if (!do_target_wait (&ecs, TARGET_WNOHANG)) { infrun_debug_printf ("do_target_wait returned no event"); disable_commit_resumed.reset_and_commit (); return; } - gdb_assert (ecs->ws.kind () != TARGET_WAITKIND_IGNORE); + gdb_assert (ecs.ws.kind () != TARGET_WAITKIND_IGNORE); /* Switch to the target that generated the event, so we can do target calls. */ - switch_to_target_no_thread (ecs->target); + switch_to_target_no_thread (ecs.target); if (debug_infrun) - print_target_wait_results (minus_one_ptid, ecs->ptid, ecs->ws); + print_target_wait_results (minus_one_ptid, ecs.ptid, ecs.ws); /* If an error happens while handling the event, propagate GDB's knowledge of the executing state to the frontend/user running state. */ - ptid_t finish_ptid = !target_is_non_stop_p () ? minus_one_ptid : ecs->ptid; - scoped_finish_thread_state finish_state (ecs->target, finish_ptid); + ptid_t finish_ptid = !target_is_non_stop_p () ? minus_one_ptid : ecs.ptid; + scoped_finish_thread_state finish_state (ecs.target, finish_ptid); /* Get executed before scoped_restore_current_thread above to apply still for the thread which has thrown the exception. */ @@ -4228,13 +4215,13 @@ fetch_inferior_event () = make_scope_exit (delete_just_stopped_threads_infrun_breakpoints); /* Now figure out what to do with the result of the result. */ - handle_inferior_event (ecs); + handle_inferior_event (&ecs); - if (!ecs->wait_some_more) + if (!ecs.wait_some_more) { - struct inferior *inf = find_inferior_ptid (ecs->target, ecs->ptid); + struct inferior *inf = find_inferior_ptid (ecs.target, ecs.ptid); bool should_stop = true; - struct thread_info *thr = ecs->event_thread; + struct thread_info *thr = ecs.event_thread; delete_just_stopped_threads_infrun_breakpoints (); @@ -4243,7 +4230,7 @@ fetch_inferior_event () if (!should_stop) { - keep_going (ecs); + keep_going (&ecs); } else { @@ -4252,7 +4239,7 @@ fetch_inferior_event () stop_all_threads_if_all_stop_mode (); - clean_up_just_stopped_threads_fsms (ecs); + clean_up_just_stopped_threads_fsms (&ecs); if (thr != nullptr && thr->thread_fsm () != nullptr) should_notify_stop @@ -4281,7 +4268,7 @@ fetch_inferior_event () selected.". */ if (!non_stop && cmd_done - && ecs->ws.kind () != TARGET_WAITKIND_NO_RESUMED) + && ecs.ws.kind () != TARGET_WAITKIND_NO_RESUMED) restore_thread.dont_restore (); } } @@ -5977,14 +5964,11 @@ restart_threads (struct thread_info *event_thread, inferior *inf) } else { - struct execution_control_state ecss; - struct execution_control_state *ecs = &ecss; - infrun_debug_printf ("restart threads: [%s] continuing", tp->ptid.to_string ().c_str ()); - reset_ecs (ecs, tp); + execution_control_state ecs (tp); switch_to_thread (tp); - keep_going_pass_signal (ecs); + keep_going_pass_signal (&ecs); } } } @@ -7660,8 +7644,7 @@ restart_after_all_stop_detach (process_stratum_target *proc_target) if (thr->state != THREAD_RUNNING) continue; - execution_control_state ecs; - reset_ecs (&ecs, thr); + execution_control_state ecs (thr); switch_to_thread (thr); keep_going (&ecs); return; @@ -7676,8 +7659,6 @@ static bool keep_going_stepped_thread (struct thread_info *tp) { frame_info_ptr frame; - struct execution_control_state ecss; - struct execution_control_state *ecs = &ecss; /* If the stepping thread exited, then don't try to switch back and resume it, which could fail in several different ways depending @@ -7708,7 +7689,7 @@ keep_going_stepped_thread (struct thread_info *tp) infrun_debug_printf ("resuming previously stepped thread"); - reset_ecs (ecs, tp); + execution_control_state ecs (tp); switch_to_thread (tp); tp->set_stop_pc (regcache_read_pc (get_thread_regcache (tp))); @@ -7757,7 +7738,7 @@ keep_going_stepped_thread (struct thread_info *tp) { infrun_debug_printf ("expected thread still hasn't advanced"); - keep_going_pass_signal (ecs); + keep_going_pass_signal (&ecs); } return true;