From: Simon Marchi via Gdb-patches <gdb-patches@sourceware.org>
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 [thread overview]
Message-ID: <20211202014002.796783-2-simon.marchi@polymtl.ca> (raw)
In-Reply-To: <20211202014002.796783-1-simon.marchi@polymtl.ca>
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
next prev parent reply other threads:[~2021-12-02 1:41 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-02 1:40 [PATCH 1/2] gdb: return *this in target_waitstatus setters Simon Marchi via Gdb-patches
2021-12-02 1:40 ` Simon Marchi via Gdb-patches [this message]
2021-12-02 17:20 ` [PATCH 2/2] gdb: change store_waitstatus to return a target_waitstatus by value John Baldwin
2021-12-02 17:21 ` Simon Marchi via Gdb-patches
2021-12-03 13:10 ` [PATCH 1/2] gdb: return *this in target_waitstatus setters Pedro Alves
2021-12-03 13:35 ` Simon Marchi via Gdb-patches
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211202014002.796783-2-simon.marchi@polymtl.ca \
--to=gdb-patches@sourceware.org \
--cc=simon.marchi@polymtl.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox