From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id aAauOEckqGHWMQAAWB0awg (envelope-from ) for ; Wed, 01 Dec 2021 20:41:27 -0500 Received: by simark.ca (Postfix, from userid 112) id E5C221F0CE; Wed, 1 Dec 2021 20:41:27 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.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 62E5D1EDF0 for ; Wed, 1 Dec 2021 20:41:27 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A0E6F3857C42 for ; Thu, 2 Dec 2021 01:41:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A0E6F3857C42 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1638409286; bh=pGQKzbb2fFXwMVAqdC6KnNOuGRO8BtazGA0jVn2Fads=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=CGEKxdfiwHP35xsF0otNNEfqXjJ4iUhkzkjrY1ZqjzGLO3uubo2nC+p+d3tD0ER9B zsFWoRxlnHeT6iG0pHW2mpGuz+OZ74wzckWWAZD1apUScGEaZW/Hf9LJHMgzalfSKa oTk/Uyoz0c19Y7LcEV8BMNYp4Tx0b04fO5DCnrqc= Received: from barracuda.ebox.ca (barracuda.ebox.ca [96.127.255.19]) by sourceware.org (Postfix) with ESMTPS id 27D0C3858414 for ; Thu, 2 Dec 2021 01:40:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 27D0C3858414 X-ASG-Debug-ID: 1638409203-0c856e2e46402980001-fS2M51 Received: from smtp.ebox.ca (smtp.ebox.ca [96.127.255.82]) by barracuda.ebox.ca with ESMTP id tf3JEx7PAKoopBab (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 01 Dec 2021 20:40:03 -0500 (EST) X-Barracuda-Envelope-From: simon.marchi@polymtl.ca X-Barracuda-RBL-Trusted-Forwarder: 96.127.255.82 Received: from simark.localdomain (192-222-157-6.qc.cable.ebox.net [192.222.157.6]) by smtp.ebox.ca (Postfix) with ESMTP id 2BCDE441D64; Wed, 1 Dec 2021 20:40:03 -0500 (EST) X-Barracuda-RBL-IP: 192.222.157.6 X-Barracuda-Effective-Source-IP: 192-222-157-6.qc.cable.ebox.net[192.222.157.6] X-Barracuda-Apparent-Source-IP: 192.222.157.6 To: gdb-patches@sourceware.org Subject: [PATCH 2/2] gdb: change store_waitstatus to return a target_waitstatus by value Date: Wed, 1 Dec 2021 20:40:02 -0500 X-ASG-Orig-Subj: [PATCH 2/2] gdb: change store_waitstatus to return a target_waitstatus by value Message-Id: <20211202014002.796783-2-simon.marchi@polymtl.ca> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211202014002.796783-1-simon.marchi@polymtl.ca> References: <20211202014002.796783-1-simon.marchi@polymtl.ca> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: smtp.ebox.ca[96.127.255.82] X-Barracuda-Start-Time: 1638409203 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://96.127.255.19:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at ebox.ca X-Barracuda-Scan-Msg-Size: 6024 X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.50 X-Barracuda-Spam-Status: No, SCORE=0.50 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=8.0 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.94340 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M 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: Simon Marchi via Gdb-patches Reply-To: Simon Marchi Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" store_waitstatus is basically a translation function between a status integer and an equivalent target_waitstatus object. It would make sense for it to take the integer as a parameter and return the target_waitstatus by value. Do that, and rename to host_status_to_waitstatus. Users can then do: ws = host_status_to_waitstatus (status) which does the right thing, given the move constructor of target_waitstatus. Change-Id: I7a07d59d3dc19d3ed66929642f82f44f3e85d61b --- gdb/gnu-nat.c | 2 +- gdb/inf-child.c | 17 +++++++++-------- gdb/inf-child.h | 5 ++--- gdb/inf-ptrace.c | 3 ++- gdb/linux-nat.c | 6 +++--- gdb/netbsd-nat.c | 2 +- gdb/procfs.c | 2 +- gdb/rs6000-aix-nat.c | 2 +- 8 files changed, 20 insertions(+), 19 deletions(-) diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c index 13127cd82461..f24e1c523c6b 100644 --- a/gdb/gnu-nat.c +++ b/gdb/gnu-nat.c @@ -1821,7 +1821,7 @@ S_proc_wait_reply (mach_port_t reply, kern_return_t err, } else if (pid == inf->pid) { - store_waitstatus (&inf->wait.status, status); + inf->wait.status = host_address_to_string (status); if (inf->wait.status.kind () == TARGET_WAITKIND_STOPPED) /* The process has sent us a signal, and stopped itself in a sane state pending our actions. */ diff --git a/gdb/inf-child.c b/gdb/inf-child.c index 5e821f455982..b65bbf300747 100644 --- a/gdb/inf-child.c +++ b/gdb/inf-child.c @@ -51,18 +51,19 @@ inf_child_target::info () const return inf_child_target_info; } -/* Helper function for child_wait and the derivatives of child_wait. - HOSTSTATUS is the waitstatus from wait() or the equivalent; store our - translation of that in OURSTATUS. */ -void -store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus) +/* See inf-child.h. */ + +target_waitstatus +host_status_to_waitstatus (int hoststatus) { if (WIFEXITED (hoststatus)) - ourstatus->set_exited (WEXITSTATUS (hoststatus)); + return target_waitstatus ().set_exited (WEXITSTATUS (hoststatus)); else if (!WIFSTOPPED (hoststatus)) - ourstatus->set_signalled (gdb_signal_from_host (WTERMSIG (hoststatus))); + return target_waitstatus ().set_signalled + (gdb_signal_from_host (WTERMSIG (hoststatus))); else - ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (hoststatus))); + return target_waitstatus ().set_stopped + (gdb_signal_from_host (WSTOPSIG (hoststatus))); } inf_child_target::~inf_child_target () diff --git a/gdb/inf-child.h b/gdb/inf-child.h index aa33c5381381..1e009b6b74ae 100644 --- a/gdb/inf-child.h +++ b/gdb/inf-child.h @@ -104,10 +104,9 @@ class inf_child_target void maybe_unpush_target (); }; -/* Functions for helping to write a native target. */ +/* Convert the host wait(2) status to a target_waitstatus. */ -/* This is for native targets which use a unix/POSIX-style waitstatus. */ -extern void store_waitstatus (struct target_waitstatus *, int); +extern target_waitstatus host_status_to_waitstatus (int hoststatus); /* Register TARGET as native target and set it up to respond to the "target native" command. */ diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c index 852636ba646f..2e7a03c63f5e 100644 --- a/gdb/inf-ptrace.c +++ b/gdb/inf-ptrace.c @@ -334,7 +334,8 @@ inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, } while (pid == -1); - store_waitstatus (ourstatus, status); + *ourstatus = host_status_to_waitstatus (status); + return ptid_t (pid); } diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index fbb60a398b0c..656a0975dddf 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -2159,7 +2159,7 @@ wait_lwp (struct lwp_info *lp) process is gone. Store the status to report to the core. Store it in lp->waitstatus, because lp->status would be ambiguous (W_EXITCODE(0,0) == 0). */ - store_waitstatus (&lp->waitstatus, status); + lp->waitstatus = host_status_to_waitstatus (status); return 0; } @@ -2932,7 +2932,7 @@ linux_nat_filter_event (int lwpid, int status) /* Store the pending event in the waitstatus, because W_EXITCODE(0,0) == 0. */ - store_waitstatus (&lp->waitstatus, status); + lp->waitstatus = host_status_to_waitstatus (status); return; } @@ -3306,7 +3306,7 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus, lp->waitstatus.set_ignore (); } else - store_waitstatus (ourstatus, status); + *ourstatus = host_status_to_waitstatus (status); linux_nat_debug_printf ("exit"); diff --git a/gdb/netbsd-nat.c b/gdb/netbsd-nat.c index e06c036fcdd3..7dfc586fc7b1 100644 --- a/gdb/netbsd-nat.c +++ b/gdb/netbsd-nat.c @@ -560,7 +560,7 @@ nbsd_wait (ptid_t ptid, struct target_waitstatus *ourstatus, if (pid == -1) perror_with_name (_("Child process unexpectedly missing")); - store_waitstatus (ourstatus, status); + *ourstatus = host_status_to_waitstatus (status); return pid; } diff --git a/gdb/procfs.c b/gdb/procfs.c index 2c96919dcebd..d77458b6c6ab 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -2353,7 +2353,7 @@ procfs_target::wait (ptid_t ptid, struct target_waitstatus *status, } if (status) - store_waitstatus (status, wstat); + *status = host_status_to_waitstatus (wstat); } return retval; diff --git a/gdb/rs6000-aix-nat.c b/gdb/rs6000-aix-nat.c index 72e59e5e4844..d74211f048e6 100644 --- a/gdb/rs6000-aix-nat.c +++ b/gdb/rs6000-aix-nat.c @@ -539,7 +539,7 @@ rs6000_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, ourstatus->set_spurious (); /* A normal waitstatus. Let the usual macros deal with it. */ else - store_waitstatus (ourstatus, status); + *ourstatus = host_status_to_waitstatus (status); return ptid_t (pid); } -- 2.33.1