@@ -213,6 +213,15 @@ static inline void host_to_target_siginfo_noswap(target_siginfo_t *tinfo,
/* should never come here, but who knows. The information for
the target is irrelevant */
tinfo->_sifields._sigfault._addr = 0;
+ } else if (sig == SIGKILL || sig == SIGCHLD) {
+ tinfo->_sifields._kill._pid = info->si_pid;
+ tinfo->_sifields._kill._uid = info->si_uid;
+
+ if (sig == SIGCHLD) {
+ tinfo->_sifields._sigchld._status = info->si_status;
+ tinfo->_sifields._sigchld._utime = info->si_utime;
+ tinfo->_sifields._sigchld._stime = info->si_stime;
+ }
} else if (sig == SIGIO) {
tinfo->_sifields._sigpoll._fd = info->si_fd;
} else if (sig >= TARGET_SIGRTMIN) {
@@ -236,6 +245,18 @@ static void tswap_siginfo(target_siginfo_t *tinfo,
sig == SIGBUS || sig == SIGTRAP) {
tinfo->_sifields._sigfault._addr =
tswapl(info->_sifields._sigfault._addr);
+ } else if (sig == SIGKILL || sig == SIGCHLD) {
+ tinfo->_sifields._kill._pid = tswap32(info->_sifields._kill._pid);
+ tinfo->_sifields._kill._uid = tswap32(info->_sifields._kill._uid);
+
+ if (sig == SIGCHLD) {
+ tinfo->_sifields._sigchld._status
+ = tswap32(info->_sifields._sigchld._status);
+ tinfo->_sifields._sigchld._utime
+ = tswap32(info->_sifields._sigchld._utime);
+ tinfo->_sifields._sigchld._stime
+ = tswap32(info->_sifields._sigchld._stime);
+ }
} else if (sig == SIGIO) {
tinfo->_sifields._sigpoll._fd = tswap32(info->_sifields._sigpoll._fd);
} else if (sig >= TARGET_SIGRTMIN) {