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
This commit is contained in:
parent
857dfb92de
commit
7509b82979
8 changed files with 20 additions and 19 deletions
|
@ -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. */
|
||||
|
|
|
@ -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 ()
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -2353,7 +2353,7 @@ wait_again:
|
|||
}
|
||||
|
||||
if (status)
|
||||
store_waitstatus (status, wstat);
|
||||
*status = host_status_to_waitstatus (wstat);
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue