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;

Reply via email to