diff options
| author | njoly <njoly@NetBSD.org> | 2009-05-29 14:19:12 +0000 |
|---|---|---|
| committer | njoly <njoly@NetBSD.org> | 2009-05-29 14:19:12 +0000 |
| commit | d22e6f64ab506ef4ba2c366aca4e71ba2f666207 (patch) | |
| tree | 001b92ea46346e2f01801daa015b32e38001d563 | |
| parent | 4c494f7678a94d301a0b4643623bcfe63b8f2cbb (diff) | |
Add native to linux siginfo si_status translation, used on i386 and
amd64.
| -rw-r--r-- | sys/compat/linux/arch/amd64/linux_machdep.c | 21 | ||||
| -rw-r--r-- | sys/compat/linux/arch/i386/linux_machdep.c | 8 | ||||
| -rw-r--r-- | sys/compat/linux/common/linux_signal.c | 29 | ||||
| -rw-r--r-- | sys/compat/linux/common/linux_signal.h | 3 | ||||
| -rw-r--r-- | sys/compat/linux32/arch/amd64/linux32_machdep.c | 12 |
5 files changed, 41 insertions, 32 deletions
diff --git a/sys/compat/linux/arch/amd64/linux_machdep.c b/sys/compat/linux/arch/amd64/linux_machdep.c index 218d4f93217..5313e94cc67 100644 --- a/sys/compat/linux/arch/amd64/linux_machdep.c +++ b/sys/compat/linux/arch/amd64/linux_machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux_machdep.c,v 1.35 2009/03/18 16:00:16 cegger Exp $ */ +/* $NetBSD: linux_machdep.c,v 1.36 2009/05/29 14:19:12 njoly Exp $ */ /*- * Copyright (c) 2005 Emmanuel Dreyfus, all rights reserved. @@ -33,7 +33,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.35 2009/03/18 16:00:16 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.36 2009/05/29 14:19:12 njoly Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -43,7 +43,6 @@ __KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.35 2009/03/18 16:00:16 cegger Ex #include <sys/proc.h> #include <sys/ptrace.h> /* for process_read_fpregs() */ #include <sys/user.h> -#include <sys/wait.h> #include <sys/ucontext.h> #include <sys/conf.h> @@ -246,20 +245,8 @@ linux_sendsig(const ksiginfo_t *ksi, const sigset_t *mask) sigframe.info._sifields._sigchld._uid = ksi->ksi_uid; sigframe.info._sifields._sigchld._utime = ksi->ksi_utime; sigframe.info._sifields._sigchld._stime = ksi->ksi_stime; - - if (WCOREDUMP(ksi->ksi_status)) { - sigframe.info.lsi_code = LINUX_CLD_DUMPED; - sigframe.info._sifields._sigchld._status = - _WSTATUS(ksi->ksi_status); - } else if (_WSTATUS(ksi->ksi_status)) { - sigframe.info.lsi_code = LINUX_CLD_KILLED; - sigframe.info._sifields._sigchld._status = - _WSTATUS(ksi->ksi_status); - } else { - sigframe.info.lsi_code = LINUX_CLD_EXITED; - sigframe.info._sifields._sigchld._status = - ((ksi->ksi_status & 0xff00U) >> 8); - } + sigframe.info._sifields._sigchld._status = + native_to_linux_si_status(ksi->ksi_code, ksi->ksi_status); break; case LINUX_SIGIO: sigframe.info._sifields._sigpoll._band = ksi->ksi_band; diff --git a/sys/compat/linux/arch/i386/linux_machdep.c b/sys/compat/linux/arch/i386/linux_machdep.c index 08f127fb236..b63e73f6e00 100644 --- a/sys/compat/linux/arch/i386/linux_machdep.c +++ b/sys/compat/linux/arch/i386/linux_machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux_machdep.c,v 1.144 2009/04/23 17:37:51 njoly Exp $ */ +/* $NetBSD: linux_machdep.c,v 1.145 2009/05/29 14:19:13 njoly Exp $ */ /*- * Copyright (c) 1995, 2000, 2008, 2009 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.144 2009/04/23 17:37:51 njoly Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.145 2009/05/29 14:19:13 njoly Exp $"); #if defined(_KERNEL_OPT) #include "opt_vm86.h" @@ -298,8 +298,8 @@ linux_rt_sendsig(const ksiginfo_t *ksi, const sigset_t *mask) lsi->lsi_pid = ksi->ksi_pid; lsi->lsi_utime = ksi->ksi_utime; lsi->lsi_stime = ksi->ksi_stime; - /* XXX is that right? */ - lsi->lsi_status = WEXITSTATUS(ksi->ksi_status); + lsi->lsi_status = + native_to_linux_si_status(ksi->ksi_code, ksi->ksi_status); break; case LINUX_SIGIO: lsi->lsi_band = ksi->ksi_band; diff --git a/sys/compat/linux/common/linux_signal.c b/sys/compat/linux/common/linux_signal.c index 197f85556a8..22a9d58c7d4 100644 --- a/sys/compat/linux/common/linux_signal.c +++ b/sys/compat/linux/common/linux_signal.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux_signal.c,v 1.67 2009/02/18 14:43:22 njoly Exp $ */ +/* $NetBSD: linux_signal.c,v 1.68 2009/05/29 14:19:13 njoly Exp $ */ /*- * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_signal.c,v 1.67 2009/02/18 14:43:22 njoly Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_signal.c,v 1.68 2009/05/29 14:19:13 njoly Exp $"); #define COMPAT_LINUX 1 @@ -63,6 +63,7 @@ __KERNEL_RCSID(0, "$NetBSD: linux_signal.c,v 1.67 2009/02/18 14:43:22 njoly Exp #include <sys/signal.h> #include <sys/signalvar.h> #include <sys/malloc.h> +#include <sys/wait.h> #include <sys/syscallargs.h> @@ -686,3 +687,27 @@ native_to_linux_si_code(int code) return code; } + +int +native_to_linux_si_status(int code, int status) +{ + int sts; + + switch (code) { + case CLD_CONTINUED: + sts = LINUX_SIGCONT; + break; + case CLD_EXITED: + sts = WEXITSTATUS(status); + break; + case CLD_STOPPED: + case CLD_TRAPPED: + case CLD_DUMPED: + case CLD_KILLED: + default: + sts = native_to_linux_signo[WTERMSIG(status)]; + break; + } + + return sts; +} diff --git a/sys/compat/linux/common/linux_signal.h b/sys/compat/linux/common/linux_signal.h index 31036b9b472..1c442252b3f 100644 --- a/sys/compat/linux/common/linux_signal.h +++ b/sys/compat/linux/common/linux_signal.h @@ -1,4 +1,4 @@ -/* $NetBSD: linux_signal.h,v 1.29 2008/10/19 09:44:31 njoly Exp $ */ +/* $NetBSD: linux_signal.h,v 1.30 2009/05/29 14:19:13 njoly Exp $ */ /*- * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc. @@ -93,6 +93,7 @@ void native_to_linux_sigaltstack(struct linux_sigaltstack *, const struct sigaltstack *); int native_to_linux_si_code(int); +int native_to_linux_si_status(int, int); __END_DECLS #endif /* !_KERNEL */ diff --git a/sys/compat/linux32/arch/amd64/linux32_machdep.c b/sys/compat/linux32/arch/amd64/linux32_machdep.c index 98da2e0ba0a..1d399694987 100644 --- a/sys/compat/linux32/arch/amd64/linux32_machdep.c +++ b/sys/compat/linux32/arch/amd64/linux32_machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: linux32_machdep.c,v 1.21 2009/03/15 15:56:50 cegger Exp $ */ +/* $NetBSD: linux32_machdep.c,v 1.22 2009/05/29 14:19:13 njoly Exp $ */ /*- * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved. @@ -31,7 +31,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux32_machdep.c,v 1.21 2009/03/15 15:56:50 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux32_machdep.c,v 1.22 2009/05/29 14:19:13 njoly Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -56,7 +56,6 @@ __KERNEL_RCSID(0, "$NetBSD: linux32_machdep.c,v 1.21 2009/03/15 15:56:50 cegger #include <sys/exec_elf.h> #include <sys/disklabel.h> #include <sys/ioctl.h> -#include <sys/wait.h> #include <miscfs/specfs/specdev.h> #include <machine/netbsd32_machdep.h> @@ -225,11 +224,8 @@ linux32_rt_sendsig(const ksiginfo_t *ksi, const sigset_t *mask) lsi->lsi_pid = ksi->ksi_pid; lsi->lsi_utime = ksi->ksi_utime; lsi->lsi_stime = ksi->ksi_stime; - - /* We use the same codes */ - lsi->lsi_code = ksi->ksi_code; - /* XXX is that right? */ - lsi->lsi_status = WEXITSTATUS(ksi->ksi_status); + lsi->lsi_status = native_to_linux_si_status(ksi->ksi_code, + ksi->ksi_status); break; case LINUX32_SIGIO: lsi->lsi_band = ksi->ksi_band; |
