Module Name: src Committed By: njoly Date: Fri May 29 14:19:13 UTC 2009
Modified Files: src/sys/compat/linux/arch/amd64: linux_machdep.c src/sys/compat/linux/arch/i386: linux_machdep.c src/sys/compat/linux/common: linux_signal.c linux_signal.h src/sys/compat/linux32/arch/amd64: linux32_machdep.c Log Message: Add native to linux siginfo si_status translation, used on i386 and amd64. To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/compat/linux/arch/amd64/linux_machdep.c cvs rdiff -u -r1.144 -r1.145 src/sys/compat/linux/arch/i386/linux_machdep.c cvs rdiff -u -r1.67 -r1.68 src/sys/compat/linux/common/linux_signal.c cvs rdiff -u -r1.29 -r1.30 src/sys/compat/linux/common/linux_signal.h cvs rdiff -u -r1.21 -r1.22 \ src/sys/compat/linux32/arch/amd64/linux32_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/linux/arch/amd64/linux_machdep.c diff -u src/sys/compat/linux/arch/amd64/linux_machdep.c:1.35 src/sys/compat/linux/arch/amd64/linux_machdep.c:1.36 --- src/sys/compat/linux/arch/amd64/linux_machdep.c:1.35 Wed Mar 18 16:00:16 2009 +++ src/sys/compat/linux/arch/amd64/linux_machdep.c Fri May 29 14:19:12 2009 @@ -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 @@ #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 @@ 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; Index: src/sys/compat/linux/arch/i386/linux_machdep.c diff -u src/sys/compat/linux/arch/i386/linux_machdep.c:1.144 src/sys/compat/linux/arch/i386/linux_machdep.c:1.145 --- src/sys/compat/linux/arch/i386/linux_machdep.c:1.144 Thu Apr 23 17:37:51 2009 +++ src/sys/compat/linux/arch/i386/linux_machdep.c Fri May 29 14:19:13 2009 @@ -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 @@ 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; Index: src/sys/compat/linux/common/linux_signal.c diff -u src/sys/compat/linux/common/linux_signal.c:1.67 src/sys/compat/linux/common/linux_signal.c:1.68 --- src/sys/compat/linux/common/linux_signal.c:1.67 Wed Feb 18 14:43:22 2009 +++ src/sys/compat/linux/common/linux_signal.c Fri May 29 14:19:13 2009 @@ -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 @@ #include <sys/signal.h> #include <sys/signalvar.h> #include <sys/malloc.h> +#include <sys/wait.h> #include <sys/syscallargs.h> @@ -686,3 +687,27 @@ 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; +} Index: src/sys/compat/linux/common/linux_signal.h diff -u src/sys/compat/linux/common/linux_signal.h:1.29 src/sys/compat/linux/common/linux_signal.h:1.30 --- src/sys/compat/linux/common/linux_signal.h:1.29 Sun Oct 19 09:44:31 2008 +++ src/sys/compat/linux/common/linux_signal.h Fri May 29 14:19:13 2009 @@ -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 @@ const struct sigaltstack *); int native_to_linux_si_code(int); +int native_to_linux_si_status(int, int); __END_DECLS #endif /* !_KERNEL */ Index: src/sys/compat/linux32/arch/amd64/linux32_machdep.c diff -u src/sys/compat/linux32/arch/amd64/linux32_machdep.c:1.21 src/sys/compat/linux32/arch/amd64/linux32_machdep.c:1.22 --- src/sys/compat/linux32/arch/amd64/linux32_machdep.c:1.21 Sun Mar 15 15:56:50 2009 +++ src/sys/compat/linux32/arch/amd64/linux32_machdep.c Fri May 29 14:19:13 2009 @@ -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 @@ #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 @@ 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;