summaryrefslogtreecommitdiffstats
path: root/sys/alpha/linux
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>1998-12-19 02:55:34 +0000
committerjulian <julian@FreeBSD.org>1998-12-19 02:55:34 +0000
commit61490236bcee0615867517e76eb92c1b20075f82 (patch)
tree9a109f9996daee77886aee1062aa97f90896dd47 /sys/alpha/linux
parentda7c7a2e129d402169d2fbc6d83f596d7d16d83a (diff)
downloadFreeBSD-src-61490236bcee0615867517e76eb92c1b20075f82.zip
FreeBSD-src-61490236bcee0615867517e76eb92c1b20075f82.tar.gz
Reviewed by: Luoqi Chen, Jordan Hubbard
Submitted by: "Richard Seaman, Jr." <lists@tar.com> Obtained from: linux :-) Code to allow Linux Threads to run under FreeBSD. By default not enabled This code is dependent on the conditional COMPAT_LINUX_THREADS (suggested by Garret) This is not yet a 'real' option but will be within some number of hours.
Diffstat (limited to 'sys/alpha/linux')
-rw-r--r--sys/alpha/linux/linux.h3
-rw-r--r--sys/alpha/linux/linux_dummy.c9
-rw-r--r--sys/alpha/linux/linux_sysvec.c23
-rw-r--r--sys/alpha/linux/syscalls.master4
4 files changed, 27 insertions, 12 deletions
diff --git a/sys/alpha/linux/linux.h b/sys/alpha/linux/linux.h
index 691ed55..820028f 100644
--- a/sys/alpha/linux/linux.h
+++ b/sys/alpha/linux/linux.h
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: linux.h,v 1.23 1998/10/05 16:37:36 jfieber Exp $
+ * $Id: linux.h,v 1.24 1998/11/12 00:42:08 jkh Exp $
*/
#ifndef _I386_LINUX_LINUX_H_
@@ -418,6 +418,7 @@ struct trapframe;
#define LINUX_MAP_PRIVATE 0x0002
#define LINUX_MAP_FIXED 0x0010
#define LINUX_MAP_ANON 0x0020
+#define LINUX_MAP_GROWSDOWN 0x0100
/* SystemV ipc defines */
#define LINUX_SEMOP 1
diff --git a/sys/alpha/linux/linux_dummy.c b/sys/alpha/linux/linux_dummy.c
index 30a0dba..6a7ce1e 100644
--- a/sys/alpha/linux/linux_dummy.c
+++ b/sys/alpha/linux/linux_dummy.c
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: linux_dummy.c,v 1.7 1997/10/29 08:17:09 kato Exp $
+ * $Id: linux_dummy.c,v 1.8 1997/11/06 19:28:52 phk Exp $
*/
#include <sys/param.h>
@@ -212,13 +212,6 @@ linux_sysinfo(struct proc *p, struct linux_sysinfo_args *args)
}
int
-linux_clone(struct proc *p, struct linux_clone_args *args)
-{
- printf("Linux-emul(%d): clone() not supported\n", p->p_pid);
- return ENOSYS;
-}
-
-int
linux_uname(struct proc *p, struct linux_uname_args *args)
{
printf("Linux-emul(%d): uname() not supported\n", p->p_pid);
diff --git a/sys/alpha/linux/linux_sysvec.c b/sys/alpha/linux/linux_sysvec.c
index 188e3d5..b863951 100644
--- a/sys/alpha/linux/linux_sysvec.c
+++ b/sys/alpha/linux/linux_sysvec.c
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: linux_sysvec.c,v 1.39 1998/12/14 18:54:01 dt Exp $
+ * $Id: linux_sysvec.c,v 1.40 1998/12/16 16:28:57 bde Exp $
*/
/* XXX we use functions that might not exist. */
@@ -50,6 +50,10 @@
#include <vm/vm_prot.h>
#include <vm/vm_page.h>
#include <vm/vm_extern.h>
+#ifdef COMPAT_LINUX_THREADS
+#include <sys/lock.h> /* needed, for now, by vm_map.h */
+#include <vm/vm_map.h> /* needed, for now, for VM_STACK defines */
+#endif /* COMPAT_LINUX_THREADS */
#include <sys/exec.h>
#include <sys/kernel.h>
#include <sys/module.h>
@@ -217,7 +221,24 @@ linux_sendsig(sig_t catcher, int sig, int mask, u_long code)
* and the stack can not be grown. useracc will return FALSE
* if access is denied.
*/
+#ifdef COMPAT_LINUX_THREADS
+#ifdef USE_VM_STACK
+#ifndef USE_VM_STACK_FOR_EXEC
+ if ((((caddr_t)fp > p->p_vmspace->vm_maxsaddr &&
+ (caddr_t)fp < (caddr_t)USRSTACK &&
+ grow(p, (int)fp) == FALSE) ||
+ (((caddr_t)fp <= p->p_vmspace->vm_maxsaddr ||
+ (caddr_t)fp >= (caddr_t)USRSTACK) &&
+ grow_stack (p, (int)fp) == FALSE)) ||
+#else
+ if ((grow_stack (p, (int)fp) == FALSE) ||
+#endif
+#else
+#endif /* COMPAT_LINUX_THREADS */
if ((grow(p, (int)fp) == FALSE) ||
+#ifdef COMPAT_LINUX_THREADS
+#endif
+#endif /* COMPAT_LINUX_THREADS */
(useracc((caddr_t)fp, sizeof (struct linux_sigframe), B_WRITE) == FALSE)) {
/*
* Process has trashed its stack; give it an illegal
diff --git a/sys/alpha/linux/syscalls.master b/sys/alpha/linux/syscalls.master
index 912cb32..3b24f13 100644
--- a/sys/alpha/linux/syscalls.master
+++ b/sys/alpha/linux/syscalls.master
@@ -1,4 +1,4 @@
- $Id: syscalls.master,v 1.11 1998/06/09 03:28:14 bde Exp $
+ $Id: syscalls.master,v 1.12 1998/07/10 22:30:08 jkh Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
; System call name/number master file (or rather, slave, from LINUX).
@@ -171,7 +171,7 @@
caddr_t ptr); }
118 NOPROTO LINUX { int fsync(int fd); }
119 STD LINUX { int linux_sigreturn(struct linux_sigcontext *scp); }
-120 STD LINUX { int linux_clone(void); }
+120 STD LINUX { int linux_clone(int flags, void *stack); }
121 NOPROTO LINUX { int setdomainname(char *name, \
int len); }
122 STD LINUX { int linux_newuname(struct linux_newuname_t *buf); }
OpenPOWER on IntegriCloud