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;
+ }
+}