diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2021-12-01 13:09:56 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2021-12-03 08:31:05 -0500 |
commit | 7509b82979550970342a4494d727b3fb06bffd65 (patch) | |
tree | dcb494b490c750bc3ea370ed875b1b59ddbcd28d | |
parent | 857dfb92de66c1ce66e78ae40a4b7d0e8fdbf2f0 (diff) | |
download | gdb-7509b82979550970342a4494d727b3fb06bffd65.zip gdb-7509b82979550970342a4494d727b3fb06bffd65.tar.gz gdb-7509b82979550970342a4494d727b3fb06bffd65.tar.bz2 |
gdb: change store_waitstatus to return a target_waitstatus by value
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
-rw-r--r-- | gdb/gnu-nat.c | 2 | ||||
-rw-r--r-- | gdb/inf-child.c | 17 | ||||
-rw-r--r-- | gdb/inf-child.h | 5 | ||||
-rw-r--r-- | gdb/inf-ptrace.c | 3 | ||||
-rw-r--r-- | gdb/linux-nat.c | 6 | ||||
-rw-r--r-- | gdb/netbsd-nat.c | 2 | ||||
-rw-r--r-- | gdb/procfs.c | 2 | ||||
-rw-r--r-- | 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 13127cd..6ea836a 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_status_to_waitstatus (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 5e821f4..b65bbf3 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 aa33c53..1e009b6 100644 --- a/gdb/inf-child.h +++ b/gdb/inf-child.h @@ -104,10 +104,9 @@ protected: 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 852636b..2e7a03c 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 fbb60a3..656a097 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 e06c036..7dfc586 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 2c96919..d77458b 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -2353,7 +2353,7 @@ wait_again: } 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 72e59e5..d74211f 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); } |