Module Name:    src
Committed By:   pooka
Date:           Thu Mar  7 18:49:13 UTC 2013

Modified Files:
        src/sys/rump/librump/rumpkern: lwproc.c rumpkern.ifspec

Log Message:
Support multiple syscall emuls.

Rump kernels with only local clients have it easy, since they have to
support at most two syscall vectors (some calls such as mount/unmount
can be made only through the "native" NetBSD vector).  Remote clients
are a whole different tin of green beans.  This change addresses local
clients only.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/rump/librump/rumpkern/lwproc.c
cvs rdiff -u -r1.10 -r1.11 src/sys/rump/librump/rumpkern/rumpkern.ifspec

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

Modified files:

Index: src/sys/rump/librump/rumpkern/lwproc.c
diff -u src/sys/rump/librump/rumpkern/lwproc.c:1.19 src/sys/rump/librump/rumpkern/lwproc.c:1.20
--- src/sys/rump/librump/rumpkern/lwproc.c:1.19	Tue Nov 13 20:10:02 2012
+++ src/sys/rump/librump/rumpkern/lwproc.c	Thu Mar  7 18:49:13 2013
@@ -1,4 +1,4 @@
-/*      $NetBSD: lwproc.c,v 1.19 2012/11/13 20:10:02 pooka Exp $	*/
+/*      $NetBSD: lwproc.c,v 1.20 2013/03/07 18:49:13 pooka Exp $	*/
 
 /*
  * Copyright (c) 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1.19 2012/11/13 20:10:02 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1.20 2013/03/07 18:49:13 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -44,6 +44,8 @@ __KERNEL_RCSID(0, "$NetBSD: lwproc.c,v 1
 
 #include "rump_private.h"
 
+struct emul *emul_default = &emul_netbsd;
+
 static void
 lwproc_proc_free(struct proc *p)
 {
@@ -90,7 +92,7 @@ lwproc_proc_free(struct proc *p)
 /*
  * Allocate a new process.  Mostly mimic fork by
  * copying the properties of the parent.  However, there are some
- * differences.  For example, we never share the fd table.
+ * differences.
  *
  * Switch to the new lwp and return a pointer to it.
  */
@@ -125,7 +127,7 @@ lwproc_newproc(struct proc *parent, int 
 	p->p_stats = pstatscopy(parent->p_stats);
 
 	p->p_vmspace = vmspace_kernel();
-	p->p_emul = &emul_netbsd;
+	p->p_emul = emul_default;
 	if (*parent->p_comm)
 		strcpy(p->p_comm, parent->p_comm);
 	else
@@ -400,3 +402,14 @@ rump_lwproc_curlwp(void)
 		return NULL;
 	return l;
 }
+
+/* this interface is under construction (like the proverbial 90's web page) */
+int rump_i_know_what_i_am_doing_with_sysents = 0;
+void
+rump_lwproc_sysent_usenative()
+{
+
+	if (!rump_i_know_what_i_am_doing_with_sysents)
+		panic("don't use rump_lwproc_sysent_usenative()");
+	curproc->p_emul = &emul_netbsd;
+}

Index: src/sys/rump/librump/rumpkern/rumpkern.ifspec
diff -u src/sys/rump/librump/rumpkern/rumpkern.ifspec:1.10 src/sys/rump/librump/rumpkern/rumpkern.ifspec:1.11
--- src/sys/rump/librump/rumpkern/rumpkern.ifspec:1.10	Sun Jan  2 12:52:25 2011
+++ src/sys/rump/librump/rumpkern/rumpkern.ifspec	Thu Mar  7 18:49:13 2013
@@ -1,4 +1,4 @@
-;	$NetBSD: rumpkern.ifspec,v 1.10 2011/01/02 12:52:25 pooka Exp $
+;	$NetBSD: rumpkern.ifspec,v 1.11 2013/03/07 18:49:13 pooka Exp $
 
 NAME|kern
 PUBHDR|include/rump/rumpkern_if_pub.h
@@ -28,5 +28,6 @@ int		|lwproc_newlwp		|pid_t
 void		|lwproc_switch		|struct lwp *
 void		|lwproc_releaselwp	|void
 struct lwp *	|lwproc_curlwp		|void
+void		|lwproc_sysent_usenative|void
 
 void		|allbetsareoff_setid	|pid_t, int

Reply via email to