Module Name:    src
Committed By:   pooka
Date:           Thu Feb 20 00:42:27 UTC 2014

Modified Files:
        src/lib/librumpclient: rumpclient.c
        src/lib/librumpuser: Makefile rumpuser.c
Added Files:
        src/lib/librumpuser: rumpuser_sigtrans.c

Log Message:
Translate signal numbers between rump kernel and (POSIX) host.


To generate a diff of this commit:
cvs rdiff -u -r1.55 -r1.56 src/lib/librumpclient/rumpclient.c
cvs rdiff -u -r1.15 -r1.16 src/lib/librumpuser/Makefile
cvs rdiff -u -r1.55 -r1.56 src/lib/librumpuser/rumpuser.c
cvs rdiff -u -r0 -r1.1 src/lib/librumpuser/rumpuser_sigtrans.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/librumpclient/rumpclient.c
diff -u src/lib/librumpclient/rumpclient.c:1.55 src/lib/librumpclient/rumpclient.c:1.56
--- src/lib/librumpclient/rumpclient.c:1.55	Tue Sep 10 16:53:06 2013
+++ src/lib/librumpclient/rumpclient.c	Thu Feb 20 00:42:27 2014
@@ -1,4 +1,4 @@
-/*      $NetBSD: rumpclient.c,v 1.55 2013/09/10 16:53:06 pooka Exp $	*/
+/*      $NetBSD: rumpclient.c,v 1.56 2014/02/20 00:42:27 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -48,7 +48,7 @@
 #define USE_KQUEUE
 #endif
 
-__RCSID("$NetBSD: rumpclient.c,v 1.55 2013/09/10 16:53:06 pooka Exp $");
+__RCSID("$NetBSD: rumpclient.c,v 1.56 2014/02/20 00:42:27 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/mman.h>
@@ -99,6 +99,7 @@ int	(*host_kevent)(int, const struct kev
 int	(*host_execve)(const char *, char *const[], char *const[]);
 
 #include "sp_common.c"
+#include "rumpuser_sigtrans.c"
 
 static struct spclient clispc = {
 	.spc_fd = -1,
@@ -590,6 +591,7 @@ handlereq(struct spclient *spc)
 	void *mapaddr;
 	size_t maplen;
 	int reqtype = spc->spc_hdr.rsp_type;
+	int sig;
 
 	switch (reqtype) {
 	case RUMPSP_COPYIN:
@@ -623,8 +625,9 @@ handlereq(struct spclient *spc)
 		send_anonmmap_resp(spc, spc->spc_hdr.rsp_reqno, mapaddr);
 		break;
 	case RUMPSP_RAISE:
-		DPRINTF(("rump_sp handlereq: raise sig %d\n", rhdr->rsp_signo));
-		raise((int)rhdr->rsp_signo);
+		sig = rumpuser__sig_rump2host(rhdr->rsp_signo);
+		DPRINTF(("rump_sp handlereq: raise sig %d\n", sig));
+		raise(sig);
 		/*
 		 * We most likely have signals blocked, but the signal
 		 * will be handled soon enough when we return.

Index: src/lib/librumpuser/Makefile
diff -u src/lib/librumpuser/Makefile:1.15 src/lib/librumpuser/Makefile:1.16
--- src/lib/librumpuser/Makefile:1.15	Tue Sep 10 16:51:24 2013
+++ src/lib/librumpuser/Makefile	Thu Feb 20 00:42:27 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.15 2013/09/10 16:51:24 pooka Exp $
+#	$NetBSD: Makefile,v 1.16 2014/02/20 00:42:27 pooka Exp $
 #
 
 .include <bsd.own.mk>
@@ -19,7 +19,9 @@ CPPFLAGS+=	-DLIBRUMPUSER
 
 SRCS=		rumpuser.c
 SRCS+=		rumpuser_pth.c
-SRCS+=		rumpuser_component.c rumpuser_errtrans.c rumpuser_bio.c
+SRCS+=		rumpuser_component.c rumpuser_bio.c
+
+SRCS+=		rumpuser_errtrans.c rumpuser_sigtrans.c
 
 # optional
 SRCS+=		rumpuser_dl.c rumpuser_sp.c rumpuser_daemonize.c

Index: src/lib/librumpuser/rumpuser.c
diff -u src/lib/librumpuser/rumpuser.c:1.55 src/lib/librumpuser/rumpuser.c:1.56
--- src/lib/librumpuser/rumpuser.c:1.55	Sun Oct 27 16:39:46 2013
+++ src/lib/librumpuser/rumpuser.c	Thu Feb 20 00:42:27 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpuser.c,v 1.55 2013/10/27 16:39:46 rmind Exp $	*/
+/*	$NetBSD: rumpuser.c,v 1.56 2014/02/20 00:42:27 pooka Exp $	*/
 
 /*
  * Copyright (c) 2007-2010 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
 #include "rumpuser_port.h"
 
 #if !defined(lint)
-__RCSID("$NetBSD: rumpuser.c,v 1.55 2013/10/27 16:39:46 rmind Exp $");
+__RCSID("$NetBSD: rumpuser.c,v 1.56 2014/02/20 00:42:27 pooka Exp $");
 #endif /* !lint */
 
 #include <sys/ioctl.h>
@@ -643,13 +643,12 @@ rumpuser_dprintf(const char *format, ...
 }
 
 int
-rumpuser_kill(int64_t pid, int sig)
+rumpuser_kill(int64_t pid, int rumpsig)
 {
-	int rv;
-
-#ifdef __NetBSD__
+	int rv, sig;
 	int error;
 
+	sig = rumpuser__sig_rump2host(rumpsig);
 	if (pid == RUMPUSER_PID_SELF) {
 		error = raise(sig);
 	} else {
@@ -659,10 +658,6 @@ rumpuser_kill(int64_t pid, int sig)
 		rv = errno;
 	else
 		rv = 0;
-#else
-	/* XXXfixme: signal numbers may not match on non-NetBSD */
-	rv = EOPNOTSUPP;
-#endif
 
 	ET(rv);
 }

Added files:

Index: src/lib/librumpuser/rumpuser_sigtrans.c
diff -u /dev/null src/lib/librumpuser/rumpuser_sigtrans.c:1.1
--- /dev/null	Thu Feb 20 00:42:27 2014
+++ src/lib/librumpuser/rumpuser_sigtrans.c	Thu Feb 20 00:42:27 2014
@@ -0,0 +1,126 @@
+/*	$NetBSD: rumpuser_sigtrans.c,v 1.1 2014/02/20 00:42:27 pooka Exp $	*/
+
+/*
+ * pseudo-automatically generated.  PLEASE DO EDIT (e.g. in case there
+ * are errnos which are defined to be the same value)
+ *
+ * The body of the switch statement was generated using:
+ *
+ * awk '/^#define/ && $2 ~ "^SIG[A-Z]" \
+ *   {printf "#ifdef %s\n\tcase %d\t: return %s;\n#endif\n", $2, $3, $2}' \
+ *   signal.h
+ */
+
+#include <signal.h>
+
+/*
+ * Translate rump kernel signal number to host signal number
+ */
+int rumpuser__sig_rump2host(int); /* a naughty decouple */
+int
+rumpuser__sig_rump2host(int rumpsig)
+{
+
+	switch(rumpsig) {
+	case 0  : return 0;
+#ifdef SIGHUP
+	case 1	: return SIGHUP;
+#endif
+#ifdef SIGINT
+	case 2	: return SIGINT;
+#endif
+#ifdef SIGQUIT
+	case 3	: return SIGQUIT;
+#endif
+#ifdef SIGILL
+	case 4	: return SIGILL;
+#endif
+#ifdef SIGTRAP
+	case 5	: return SIGTRAP;
+#endif
+#ifdef SIGABRT
+	case 6	: return SIGABRT;
+#endif
+#ifdef SIGEMT
+	case 7	: return SIGEMT;
+#endif
+#ifdef SIGFPE
+	case 8	: return SIGFPE;
+#endif
+#ifdef SIGKILL
+	case 9	: return SIGKILL;
+#endif
+#ifdef SIGBUS
+	case 10	: return SIGBUS;
+#endif
+#ifdef SIGSEGV
+	case 11	: return SIGSEGV;
+#endif
+#ifdef SIGSYS
+	case 12	: return SIGSYS;
+#endif
+#ifdef SIGPIPE
+	case 13	: return SIGPIPE;
+#endif
+#ifdef SIGALRM
+	case 14	: return SIGALRM;
+#endif
+#ifdef SIGTERM
+	case 15	: return SIGTERM;
+#endif
+#ifdef SIGURG
+	case 16	: return SIGURG;
+#endif
+#ifdef SIGSTOP
+	case 17	: return SIGSTOP;
+#endif
+#ifdef SIGTSTP
+	case 18	: return SIGTSTP;
+#endif
+#ifdef SIGCONT
+	case 19	: return SIGCONT;
+#endif
+#ifdef SIGCHLD
+	case 20	: return SIGCHLD;
+#elif defined(SIGCLD)
+	case 20	: return SIGCLD;
+#endif
+#ifdef SIGTTIN
+	case 21	: return SIGTTIN;
+#endif
+#ifdef SIGTTOU
+	case 22	: return SIGTTOU;
+#endif
+#ifdef SIGIO
+	case 23	: return SIGIO;
+#endif
+#ifdef SIGXCPU
+	case 24	: return SIGXCPU;
+#endif
+#ifdef SIGXFSZ
+	case 25	: return SIGXFSZ;
+#endif
+#ifdef SIGVTALRM
+	case 26	: return SIGVTALRM;
+#endif
+#ifdef SIGPROF
+	case 27	: return SIGPROF;
+#endif
+#ifdef SIGWINCH
+	case 28	: return SIGWINCH;
+#endif
+#ifdef SIGINFO
+	case 29	: return SIGINFO;
+#endif
+#ifdef SIGUSR1
+	case 30	: return SIGUSR1;
+#endif
+#ifdef SIGUSR2
+	case 31	: return SIGUSR2;
+#endif
+#ifdef SIGPWR
+	case 32	: return SIGPWR;
+#endif
+	default:	return -1;
+	}
+}

Reply via email to