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