diff --git a/bin/ps/keyword.c b/bin/ps/keyword.c
index 6cd2c3572dc9..9ac0f22a6715 100644
--- a/bin/ps/keyword.c
+++ b/bin/ps/keyword.c
@@ -36,7 +36,7 @@
 static char sccsid[] = "@(#)keyword.c	8.5 (Berkeley) 4/2/94";
 #else
 static const char rcsid[] =
-	"$Id: keyword.c,v 1.21 1998/12/19 02:55:32 julian Exp $";
+	"$Id: keyword.c,v 1.22 1999/01/13 03:11:43 julian Exp $";
 #endif
 #endif /* not lint */
 
@@ -157,17 +157,10 @@ VAR var[] = {
 	{"ruser", "RUSER", NULL, LJUST|DSIZ, runame, s_runame, USERLEN},
 	{"sess", "SESS", NULL, 0, evar, NULL, 6, EOFF(e_sess), KPTR, "lx"},
 	{"sig", "PENDING", NULL, 0, pvar, NULL, 8, POFF(p_siglist), INT, "x"},
-#ifndef COMPAT_LINUX_THREADS
-	{"sigcatch", "CAUGHT",
-		NULL, 0, pvar, NULL, 8, POFF(p_sigcatch), UINT, "x"},
-	{"sigignore", "IGNORED",
-		NULL, 0, pvar, NULL, 8, POFF(p_sigignore), UINT, "x"},
-#else
 	{"sigcatch", "CAUGHT",
 		NULL, 0, evar, NULL, 8, EOFF(e_procsig.ps_sigcatch), UINT, "x"},
 	{"sigignore", "IGNORED",
 		NULL, 0, evar, NULL, 8, EOFF(e_procsig.ps_sigignore), UINT, "x"},
-#endif /* COMPAT_LINUX_THREADS */
 	{"sigmask", "BLOCKED",
 		NULL, 0, pvar, NULL, 8, POFF(p_sigmask), UINT, "x"},
 	{"sl", "SL", NULL, 0, pvar, NULL, 3, POFF(p_slptime), UINT, "d"},
diff --git a/lib/libc/sys/rfork.2 b/lib/libc/sys/rfork.2
index 5e57f1ff31f0..eea643e28e8f 100644
--- a/lib/libc/sys/rfork.2
+++ b/lib/libc/sys/rfork.2
@@ -56,6 +56,12 @@ types will be unaffected.  Subsequent forks by the parent will then
 propagate the shared data and bss between children.  The stack segment
 is always split.  May be set only with
 .Dv RFPROC .
+.It RFSIGSHARE
+If set, the kernel will force sharing the sigacts structure between the
+child and the parent.
+.It RFLINUXTHPN
+If set, the kernel will return SIGUSR1 instead of SIGCHILD upon thread 
+exit for the child.  This is intended to mimic certain Linux clone behaviour.
 .El
 .Pp
 File descriptors in a shared file descriptor table are kept
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index 02f9785fa8a3..da1293cb86a5 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.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_misc.c,v 1.50 1998/12/30 21:01:33 sos Exp $
+ *  $Id: linux_misc.c,v 1.51 1999/01/06 23:05:38 julian Exp $
  */
 
 #include <sys/param.h>
@@ -41,9 +41,7 @@
 #include <sys/resourcevar.h>
 #include <sys/stat.h>
 #include <sys/sysctl.h>
-#ifdef COMPAT_LINUX_THREADS
 #include <sys/unistd.h>
-#endif /* COMPAT_LINUX_THREADS */
 #include <sys/vnode.h>
 #include <sys/wait.h>
 #include <sys/time.h>
@@ -563,15 +561,6 @@ linux_fork(struct proc *p, struct linux_fork_args *args)
     return 0;
 }
 
-#ifndef COMPAT_LINUX_THREADS
-int
-linux_clone(struct proc *p, struct linux_clone_args *args)
-{
-    printf("linux_clone(%d): Not enabled\n", p->p_pid);
-    return (EOPNOTSUPP);
-}
-
-#else
 #define CLONE_VM	0x100
 #define CLONE_FS	0x200
 #define CLONE_FILES	0x400
@@ -635,7 +624,6 @@ linux_clone(struct proc *p, struct linux_clone_args *args)
     return 0;
 }
 
-#endif /* COMPAT_LINUX_THREADS */
 /* XXX move */
 struct linux_mmap_argv {
 	linux_caddr_t addr;
@@ -646,11 +634,8 @@ struct linux_mmap_argv {
 	int pos;
 };
 
-#ifdef COMPAT_LINUX_THREADS
 #define STACK_SIZE  (2 * 1024 * 1024)
 #define GUARD_SIZE  (4 * PAGE_SIZE)
-
-#endif /* COMPAT_LINUX_THREADS */
 int
 linux_mmap(struct proc *p, struct linux_mmap_args *args)
 {
@@ -683,10 +668,6 @@ linux_mmap(struct proc *p, struct linux_mmap_args *args)
 	bsd_args.flags |= MAP_FIXED;
     if (linux_args.flags & LINUX_MAP_ANON)
 	bsd_args.flags |= MAP_ANON;
-#ifndef COMPAT_LINUX_THREADS
-    bsd_args.addr = linux_args.addr;
-    bsd_args.len = linux_args.len;
-#else
 
 #ifndef VM_STACK
     /* Linux Threads will map into the proc stack space, unless
@@ -745,7 +726,7 @@ linux_mmap(struct proc *p, struct linux_mmap_args *args)
 	bsd_args.addr = linux_args.addr;
 	bsd_args.len  = linux_args.len;
     }
-#endif /* COMPAT_LINUX_THREADS */
+
     bsd_args.prot = linux_args.prot | PROT_READ;	/* always required */
     bsd_args.fd = linux_args.fd;
     bsd_args.pos = linux_args.pos;
@@ -972,9 +953,6 @@ linux_waitpid(struct proc *p, struct linux_waitpid_args *args)
 #endif
     tmp.pid = args->pid;
     tmp.status = args->status;
-#ifndef COMPAT_LINUX_THREADS
-    tmp.options = args->options;
-#else
     /* This filters out the linux option _WCLONE.  I don't
      * think we need it, but I could be wrong.  If we need
      * it, we need to fix wait4, since it will give us an
@@ -982,15 +960,11 @@ linux_waitpid(struct proc *p, struct linux_waitpid_args *args)
      * of course, it won't do anything with it.
      */
     tmp.options = (args->options & (WNOHANG | WUNTRACED));
-#endif /* COMPAT_LINUX_THREADS */
     tmp.rusage = NULL;
 
     if (error = wait4(p, &tmp))
-#ifndef COMPAT_LINUX_THREADS
 	return error;
-#else
-	return error;
-#endif /* COMPAT_LINUX_THREADS */
+
     if (args->status) {
 	if (error = copyin(args->status, &tmpstat, sizeof(int)))
 	    return error;
@@ -1023,9 +997,6 @@ linux_wait4(struct proc *p, struct linux_wait4_args *args)
 #endif
     tmp.pid = args->pid;
     tmp.status = args->status;
-#ifndef COMPAT_LINUX_THREADS
-    tmp.options = args->options;
-#else
     /* This filters out the linux option _WCLONE.  I don't
      * think we need it, but I could be wrong.  If we need
      * it, we need to fix wait4, since it will give us an
@@ -1033,7 +1004,6 @@ linux_wait4(struct proc *p, struct linux_wait4_args *args)
      * of course, it won't do anything with it.
      */
     tmp.options = (args->options & (WNOHANG | WUNTRACED));
-#endif /* COMPAT_LINUX_THREADS */
     tmp.rusage = args->rusage;
 
     if (error = wait4(p, &tmp))
diff --git a/sys/i386/linux/linux_misc.c b/sys/i386/linux/linux_misc.c
index 02f9785fa8a3..da1293cb86a5 100644
--- a/sys/i386/linux/linux_misc.c
+++ b/sys/i386/linux/linux_misc.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_misc.c,v 1.50 1998/12/30 21:01:33 sos Exp $
+ *  $Id: linux_misc.c,v 1.51 1999/01/06 23:05:38 julian Exp $
  */
 
 #include <sys/param.h>
@@ -41,9 +41,7 @@
 #include <sys/resourcevar.h>
 #include <sys/stat.h>
 #include <sys/sysctl.h>
-#ifdef COMPAT_LINUX_THREADS
 #include <sys/unistd.h>
-#endif /* COMPAT_LINUX_THREADS */
 #include <sys/vnode.h>
 #include <sys/wait.h>
 #include <sys/time.h>
@@ -563,15 +561,6 @@ linux_fork(struct proc *p, struct linux_fork_args *args)
     return 0;
 }
 
-#ifndef COMPAT_LINUX_THREADS
-int
-linux_clone(struct proc *p, struct linux_clone_args *args)
-{
-    printf("linux_clone(%d): Not enabled\n", p->p_pid);
-    return (EOPNOTSUPP);
-}
-
-#else
 #define CLONE_VM	0x100
 #define CLONE_FS	0x200
 #define CLONE_FILES	0x400
@@ -635,7 +624,6 @@ linux_clone(struct proc *p, struct linux_clone_args *args)
     return 0;
 }
 
-#endif /* COMPAT_LINUX_THREADS */
 /* XXX move */
 struct linux_mmap_argv {
 	linux_caddr_t addr;
@@ -646,11 +634,8 @@ struct linux_mmap_argv {
 	int pos;
 };
 
-#ifdef COMPAT_LINUX_THREADS
 #define STACK_SIZE  (2 * 1024 * 1024)
 #define GUARD_SIZE  (4 * PAGE_SIZE)
-
-#endif /* COMPAT_LINUX_THREADS */
 int
 linux_mmap(struct proc *p, struct linux_mmap_args *args)
 {
@@ -683,10 +668,6 @@ linux_mmap(struct proc *p, struct linux_mmap_args *args)
 	bsd_args.flags |= MAP_FIXED;
     if (linux_args.flags & LINUX_MAP_ANON)
 	bsd_args.flags |= MAP_ANON;
-#ifndef COMPAT_LINUX_THREADS
-    bsd_args.addr = linux_args.addr;
-    bsd_args.len = linux_args.len;
-#else
 
 #ifndef VM_STACK
     /* Linux Threads will map into the proc stack space, unless
@@ -745,7 +726,7 @@ linux_mmap(struct proc *p, struct linux_mmap_args *args)
 	bsd_args.addr = linux_args.addr;
 	bsd_args.len  = linux_args.len;
     }
-#endif /* COMPAT_LINUX_THREADS */
+
     bsd_args.prot = linux_args.prot | PROT_READ;	/* always required */
     bsd_args.fd = linux_args.fd;
     bsd_args.pos = linux_args.pos;
@@ -972,9 +953,6 @@ linux_waitpid(struct proc *p, struct linux_waitpid_args *args)
 #endif
     tmp.pid = args->pid;
     tmp.status = args->status;
-#ifndef COMPAT_LINUX_THREADS
-    tmp.options = args->options;
-#else
     /* This filters out the linux option _WCLONE.  I don't
      * think we need it, but I could be wrong.  If we need
      * it, we need to fix wait4, since it will give us an
@@ -982,15 +960,11 @@ linux_waitpid(struct proc *p, struct linux_waitpid_args *args)
      * of course, it won't do anything with it.
      */
     tmp.options = (args->options & (WNOHANG | WUNTRACED));
-#endif /* COMPAT_LINUX_THREADS */
     tmp.rusage = NULL;
 
     if (error = wait4(p, &tmp))
-#ifndef COMPAT_LINUX_THREADS
 	return error;
-#else
-	return error;
-#endif /* COMPAT_LINUX_THREADS */
+
     if (args->status) {
 	if (error = copyin(args->status, &tmpstat, sizeof(int)))
 	    return error;
@@ -1023,9 +997,6 @@ linux_wait4(struct proc *p, struct linux_wait4_args *args)
 #endif
     tmp.pid = args->pid;
     tmp.status = args->status;
-#ifndef COMPAT_LINUX_THREADS
-    tmp.options = args->options;
-#else
     /* This filters out the linux option _WCLONE.  I don't
      * think we need it, but I could be wrong.  If we need
      * it, we need to fix wait4, since it will give us an
@@ -1033,7 +1004,6 @@ linux_wait4(struct proc *p, struct linux_wait4_args *args)
      * of course, it won't do anything with it.
      */
     tmp.options = (args->options & (WNOHANG | WUNTRACED));
-#endif /* COMPAT_LINUX_THREADS */
     tmp.rusage = args->rusage;
 
     if (error = wait4(p, &tmp))
diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c
index a0a228466784..56f9d621d62b 100644
--- a/sys/kern/imgact_elf.c
+++ b/sys/kern/imgact_elf.c
@@ -26,7 +26,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: imgact_elf.c,v 1.43 1998/12/04 22:54:51 archie Exp $
+ *	$Id: imgact_elf.c,v 1.44 1998/12/19 02:55:33 julian Exp $
  */
 
 #include "opt_rlimit.h"
@@ -854,11 +854,7 @@ elf_corehdr(p, vp, cred, numsegs, hdr, hdrsize)
 	status.pr_gregsetsz = sizeof(gregset_t);
 	status.pr_fpregsetsz = sizeof(fpregset_t);
 	status.pr_osreldate = osreldate;
-#ifndef COMPAT_LINUX_THREADS
-	status.pr_cursig = p->p_sigacts->ps_sig;
-#else
 	status.pr_cursig = p->p_sig;
-#endif /* COMPAT_LINUX_THREADS */
 	status.pr_pid = p->p_pid;
 	fill_regs(p, &status.pr_reg);
 
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 246684f88362..ed621ebad2af 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -39,7 +39,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)init_main.c	8.9 (Berkeley) 1/21/94
- * $Id: init_main.c,v 1.102 1998/12/30 10:38:58 dfr Exp $
+ * $Id: init_main.c,v 1.103 1999/01/07 21:23:39 julian Exp $
  */
 
 #include "opt_devfs.h"
@@ -83,9 +83,7 @@ static struct session session0;
 static struct pgrp pgrp0;
 struct	proc proc0;
 static struct pcred cred0;
-#ifdef COMPAT_LINUX_THREADS
 static struct procsig procsig0;
-#endif /* COMPAT_LINUX_THREADS */
 static struct filedesc0 filedesc0;
 static struct plimit limit0;
 static struct vmspace vmspace0;
@@ -418,12 +416,10 @@ proc0_init(dummy)
 	p->p_ucred = crget();
 	p->p_ucred->cr_ngroups = 1;	/* group 0 */
 
-#ifdef COMPAT_LINUX_THREADS
 	/* Create procsig. */
 	p->p_procsig = &procsig0;
 	p->p_procsig->ps_refcnt = 2;
 
-#endif /* COMPAT_LINUX_THREADS */
 	/* Create the file descriptor table. */
 	fdp = &filedesc0;
 	p->p_fd = &fdp->fd_fd;
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index 7be01af67fac..22965f510248 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_exit.c	8.7 (Berkeley) 2/12/94
- * $Id: kern_exit.c,v 1.70 1998/12/19 02:55:33 julian Exp $
+ * $Id: kern_exit.c,v 1.71 1999/01/07 21:23:41 julian Exp $
  */
 
 #include "opt_compat.h"
@@ -73,9 +73,7 @@
 #include <vm/pmap.h>
 #include <vm/vm_map.h>
 #include <vm/vm_zone.h>
-#ifdef COMPAT_LINUX_THREADS
 #include <sys/user.h>
-#endif
 
 static MALLOC_DEFINE(M_ZOMBIE, "zombie", "zombie proc status");
 
@@ -184,9 +182,6 @@ exit1(p, rv)
 	 */
 	p->p_flag &= ~(P_TRACED | P_PPWAIT);
 	p->p_flag |= P_WEXIT;
-#ifndef COMPAT_LINUX_THREADS
-	p->p_sigignore = ~0;
-#endif /* COMPAT_LINUX_THREADS */
 	p->p_siglist = 0;
 	if (timevalisset(&p->p_realtimer.it_value))
 		untimeout(realitexpire, (caddr_t)p, p->p_ithandle);
@@ -287,9 +282,7 @@ exit1(p, rv)
 		LIST_REMOVE(q, p_sibling);
 		LIST_INSERT_HEAD(&initproc->p_children, q, p_sibling);
 		q->p_pptr = initproc;
-#ifdef COMPAT_LINUX_THREADS
 		q->p_sigparent = 0;
-#endif /* COMPAT_LINUX_THREADS */
 		/*
 		 * Traced processes are killed
 		 * since their existence means someone is screwing up.
@@ -314,11 +307,7 @@ exit1(p, rv)
 	 * flag set, notify process 1 instead (and hope it will handle
 	 * this situation).
 	 */
-#ifndef COMPAT_LINUX_THREADS
-	if (p->p_pptr->p_flag & P_NOCLDWAIT) {
-#else
 	if (p->p_pptr->p_procsig->ps_flag & P_NOCLDWAIT) {
-#endif /* COMPAT_LINUX_THREADS */
 		struct proc *pp = p->p_pptr;
 		proc_reparent(p, initproc);
 		/*
@@ -330,15 +319,12 @@ exit1(p, rv)
 			wakeup((caddr_t)pp);
 	}
 
-#ifndef COMPAT_LINUX_THREADS
-	psignal(p->p_pptr, SIGCHLD);
-#else
 	if (p->p_sigparent && p->p_pptr != initproc) {
 	        psignal(p->p_pptr, p->p_sigparent);
 	} else {
 	        psignal(p->p_pptr, SIGCHLD);
 	}
-#endif /* COMPAT_LINUX_THREADS */
+
 	wakeup((caddr_t)p->p_pptr);
 #if defined(tahoe)
 	/* move this to cpu_exit */
@@ -508,14 +494,13 @@ loop:
 			LIST_REMOVE(p, p_list);	/* off zombproc */
 			LIST_REMOVE(p, p_sibling);
 
-#ifdef COMPAT_LINUX_THREADS
 			if (--p->p_procsig->ps_refcnt == 0) {
 				if (p->p_sigacts != &p->p_addr->u_sigacts)
 					FREE(p->p_sigacts, M_SUBPROC);
 			        FREE(p->p_procsig, M_SUBPROC);
 				p->p_procsig = NULL;
 			}
-#endif /* COMPAT_LINUX_THREADS */
+
 			/*
 			 * Give machine-dependent layer a chance
 			 * to free anything that cpu_exit couldn't
@@ -627,7 +612,6 @@ rm_at_exit(function)
 	return (count);
 }
 
-#ifdef COMPAT_LINUX_THREADS
 void check_sigacts (void)
 {
 	struct proc *p = curproc;
@@ -644,4 +628,4 @@ void check_sigacts (void)
 		FREE(pss, M_SUBPROC);
 	}
 }
-#endif
+
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index 732712b32fd8..1ee86ae241e3 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_fork.c	8.6 (Berkeley) 4/8/94
- * $Id: kern_fork.c,v 1.53 1998/12/19 02:55:33 julian Exp $
+ * $Id: kern_fork.c,v 1.54 1999/01/07 21:23:42 julian Exp $
  */
 
 #include "opt_ktrace.h"
@@ -62,10 +62,9 @@
 #include <vm/vm_extern.h>
 #include <vm/vm_zone.h>
 
-#ifdef COMPAT_LINUX_THREADS
 #include <machine/frame.h>
 #include <sys/user.h>
-#endif /* COMPAT_LINUX_THREADS */
+
 #ifdef SMP
 static int	fast_vfork = 0;	/* Doesn't work on SMP yet. */
 #else
@@ -329,7 +328,6 @@ again:
 	p2->p_cred->p_refcnt = 1;
 	crhold(p1->p_ucred);
 
-#ifdef COMPAT_LINUX_THREADS
 	if (flags & RFSIGSHARE) {
 		p2->p_procsig = p1->p_procsig;
 		p2->p_procsig->ps_refcnt++;
@@ -366,7 +364,7 @@ again:
 	if (flags & RFLINUXTHPN) {
 	        p2->p_sigparent = SIGUSR1;
 	}
-#endif /* COMPAT_LINUX_THREADS */
+
 	/* bump references to the text vnode (for procfs) */
 	p2->p_textvp = p1->p_textvp;
 	if (p2->p_textvp)
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index 0c6feac328a0..f44fb1f3ceee 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_proc.c	8.7 (Berkeley) 2/14/95
- * $Id: kern_proc.c,v 1.42 1999/01/10 01:58:24 eivind Exp $
+ * $Id: kern_proc.c,v 1.43 1999/01/13 03:11:42 julian Exp $
  */
 
 #include <sys/param.h>
@@ -415,11 +415,9 @@ fill_eproc(p, ep)
 		if (p->p_ucred)
 			ep->e_ucred = *p->p_ucred;
 	}
-#ifdef COMPAT_LINUX_THREADS
 	if (p->p_procsig){
 		ep->e_procsig = *p->p_procsig;
 	}
-#endif
 	if (p->p_stat != SIDL && p->p_stat != SZOMB && p->p_vmspace != NULL) {
 		register struct vmspace *vm = p->p_vmspace;
 
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index bf89d8a745de..5da472523c66 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)kern_sig.c	8.7 (Berkeley) 4/18/94
- * $Id: kern_sig.c,v 1.52 1999/01/08 17:31:10 eivind Exp $
+ * $Id: kern_sig.c,v 1.53 1999/01/10 01:58:24 eivind Exp $
  */
 
 #include "opt_compat.h"
@@ -135,17 +135,9 @@ sigaction(p, uap)
 			sa->sa_flags |= SA_RESETHAND;
 		if ((ps->ps_signodefer & bit) != 0)
 			sa->sa_flags |= SA_NODEFER;
-#ifndef COMPAT_LINUX_THREADS
-		if (signum == SIGCHLD && p->p_flag & P_NOCLDSTOP)
-#else
 		if (signum == SIGCHLD && p->p_procsig->ps_flag & P_NOCLDSTOP)
-#endif /* COMPAT_LINUX_THREADS */
 			sa->sa_flags |= SA_NOCLDSTOP;
-#ifndef COMPAT_LINUX_THREADS
-		if (signum == SIGCHLD && p->p_flag & P_NOCLDWAIT)
-#else
 		if (signum == SIGCHLD && p->p_procsig->ps_flag & P_NOCLDWAIT)
-#endif /* COMPAT_LINUX_THREADS */
 			sa->sa_flags |= SA_NOCLDWAIT;
 		if ((error = copyout((caddr_t)sa, (caddr_t)uap->osa,
 		    sizeof (vec))))
@@ -203,15 +195,9 @@ setsigvec(p, signum, sa)
 #endif
 	if (signum == SIGCHLD) {
 		if (sa->sa_flags & SA_NOCLDSTOP)
-#ifndef COMPAT_LINUX_THREADS
-			p->p_flag |= P_NOCLDSTOP;
-		else
-			p->p_flag &= ~P_NOCLDSTOP;
-#else
 			p->p_procsig->ps_flag |= P_NOCLDSTOP;
 		else
 			p->p_procsig->ps_flag &= ~P_NOCLDSTOP;
-#endif /* COMPAT_LINUX_THREADS */
 		if (sa->sa_flags & SA_NOCLDWAIT) {
 			/*
 			 * Paranoia: since SA_NOCLDWAIT is implemented by
@@ -220,21 +206,11 @@ setsigvec(p, signum, sa)
 			 * forbidden to set SA_NOCLDWAIT.
 			 */
 			if (p->p_pid == 1)
-#ifndef COMPAT_LINUX_THREADS
-				p->p_flag &= ~P_NOCLDWAIT;
-			else
-				p->p_flag |= P_NOCLDWAIT;
-#else
 				p->p_procsig->ps_flag &= ~P_NOCLDWAIT;
 			else
 				p->p_procsig->ps_flag |= P_NOCLDWAIT;
-#endif /* COMPAT_LINUX_THREADS */
 		} else
-#ifndef COMPAT_LINUX_THREADS
-			p->p_flag &= ~P_NOCLDWAIT;
-#else
 			p->p_procsig->ps_flag &= ~P_NOCLDWAIT;
-#endif /* COMPAT_LINUX_THREADS */
 	}
 	/*
 	 * Set bit in p_sigignore for signals that are set to SIG_IGN,
@@ -409,11 +385,7 @@ osigvec(p, uap)
 		if ((ps->ps_signodefer & bit) != 0)
 			sv->sv_flags |= SV_NODEFER;
 #ifndef COMPAT_SUNOS
-#ifndef COMPAT_LINUX_THREADS
-		if (signum == SIGCHLD && p->p_flag & P_NOCLDSTOP)
-#else
 		if (signum == SIGCHLD && p->p_procsig->ps_flag & P_NOCLDSTOP)
-#endif /* COMPAT_LINUX_THREADS */
 			sv->sv_flags |= SV_NOCLDSTOP;
 #endif
 		if ((error = copyout((caddr_t)sv, (caddr_t)uap->osv,
@@ -498,12 +470,7 @@ sigsuspend(p, uap)
 	 * save it here and mark the sigacts structure
 	 * to indicate this.
 	 */
-#ifndef COMPAT_LINUX_THREADS
-	ps->ps_oldmask = p->p_sigmask;
-	ps->ps_flags |= SAS_OLDMASK;
-#else
 	p->p_oldsigmask = p->p_sigmask;
-#endif /* COMPAT_LINUX_THREADS */
 	p->p_sigmask = uap->mask &~ sigcantmask;
 	while (tsleep((caddr_t) ps, PPAUSE|PCATCH, "pause", 0) == 0)
 		/* void */;
@@ -762,13 +729,8 @@ trapsignal(p, signum, code)
 			ps->ps_sigact[signum] = SIG_DFL;
 		}
 	} else {
-#ifndef COMPAT_LINUX_THREADS
-		ps->ps_code = code;	/* XXX for core dump/debugger */
-		ps->ps_sig = signum;	/* XXX to verify code */
-#else
 		p->p_code = code;	/* XXX for core dump/debugger */
 		p->p_sig = signum;	/* XXX to verify code */
-#endif /* COMPAT_LINUX_THREADS */
 		psignal(p, signum);
 	}
 }
@@ -817,11 +779,7 @@ psignal(p, signum)
 		 * and if it is set to SIG_IGN,
 		 * action will be SIG_DFL here.)
 		 */
-#ifndef COMPAT_LINUX_THREADS
-		if (p->p_sigignore & mask)
-#else
 		if ((p->p_sigignore & mask) || (p->p_flag & P_WEXIT))
-#endif /* COMPAT_LINUX_THREADS */
 			return;
 		if (p->p_sigmask & mask)
 			action = SIG_HOLD;
@@ -903,11 +861,7 @@ psignal(p, signum)
 				goto out;
 			p->p_siglist &= ~mask;
 			p->p_xstat = signum;
-#ifndef COMPAT_LINUX_THREADS
-			if ((p->p_pptr->p_flag & P_NOCLDSTOP) == 0)
-#else
 			if ((p->p_pptr->p_procsig->ps_flag & P_NOCLDSTOP) == 0)
-#endif /* COMPAT_LINUX_THREADS */
 				psignal(p->p_pptr, SIGCHLD);
 			stop(p);
 			goto out;
@@ -1114,11 +1068,7 @@ issignal(p)
 					break;	/* == ignore */
 				p->p_xstat = signum;
 				stop(p);
-#ifndef COMPAT_LINUX_THREADS
-				if ((p->p_pptr->p_flag & P_NOCLDSTOP) == 0)
-#else
 				if ((p->p_pptr->p_procsig->ps_flag & P_NOCLDSTOP) == 0)
-#endif /* COMPAT_LINUX_THREADS */
 					psignal(p->p_pptr, SIGCHLD);
 				mi_switch();
 				break;
@@ -1191,13 +1141,8 @@ postsig(signum)
 #ifdef KTRACE
 	if (KTRPOINT(p, KTR_PSIG))
 		ktrpsig(p->p_tracep,
-#ifndef COMPAT_LINUX_THREADS
-		    signum, action, ps->ps_flags & SAS_OLDMASK ?
-		    ps->ps_oldmask : p->p_sigmask, 0);
-#else
 		    signum, action, p->p_oldsigmask ?
 		    p->p_oldsigmask : p->p_sigmask, 0);
-#endif /* COMPAT_LINUX_THREADS */
 #endif
 	STOPEVENT(p, S_SIG, signum);
 
@@ -1224,15 +1169,9 @@ postsig(signum)
 		 * restored after the signal processing is completed.
 		 */
 		(void) splhigh();
-#ifndef COMPAT_LINUX_THREADS
-		if (ps->ps_flags & SAS_OLDMASK) {
-			returnmask = ps->ps_oldmask;
-			ps->ps_flags &= ~SAS_OLDMASK;
-#else
 		if (p->p_oldsigmask) {
 			returnmask = p->p_oldsigmask;
 			p->p_oldsigmask = 0;
-#endif /* COMPAT_LINUX_THREADS */
 		} else
 			returnmask = p->p_sigmask;
 		p->p_sigmask |= ps->ps_catchmask[signum] |
@@ -1248,22 +1187,12 @@ postsig(signum)
 		}
 		(void) spl0();
 		p->p_stats->p_ru.ru_nsignals++;
-#ifndef COMPAT_LINUX_THREADS
-		if (ps->ps_sig != signum) {
-#else
 		if (p->p_sig != signum) {
-#endif /* COMPAT_LINUX_THREADS */
 			code = 0;
 		} else {
-#ifndef COMPAT_LINUX_THREADS
-			code = ps->ps_code;
-			ps->ps_code = 0;
-			ps->ps_sig = 0;
-#else
 			code = p->p_code;
 			p->p_code = 0;
 			p->p_sig = 0;
-#endif /* COMPAT_LINUX_THREADS */
 		}
 		(*p->p_sysent->sv_sendsig)(action, signum, returnmask, code);
 	}
@@ -1298,11 +1227,7 @@ sigexit(p, signum)
 
 	p->p_acflag |= AXSIG;
 	if (sigprop[signum] & SA_CORE) {
-#ifndef COMPAT_LINUX_THREADS
-		p->p_sigacts->ps_sig = signum;
-#else
 		p->p_sig = signum;
-#endif /* COMPAT_LINUX_THREADS */
 		/*
 		 * Log signals which would cause core dumps
 		 * (Log as LOG_INFO to appease those who don't want
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index 1b7d5ad15710..5351016afcb2 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)proc.h	8.15 (Berkeley) 5/19/95
- * $Id: proc.h,v 1.65 1998/12/31 13:23:16 bde Exp $
+ * $Id: proc.h,v 1.66 1999/01/07 21:23:45 julian Exp $
  */
 
 #ifndef _SYS_PROC_H_
@@ -47,9 +47,7 @@
 #include <sys/rtprio.h>			/* For struct rtprio. */
 #include <sys/select.h>			/* For struct selinfo. */
 #include <sys/signal.h>
-#ifdef COMPAT_LINUX_THREADS
 #include <sys/signalvar.h>
-#endif /* COMPAT_LINUX_THREADS */
 #ifndef KERNEL
 #include <sys/time.h>			/* For structs itimerval, timeval. */
 #endif
@@ -81,7 +79,6 @@ struct	pgrp {
 	int	pg_jobc;	/* # procs qualifying pgrp for job control */
 };
 
-#ifdef COMPAT_LINUX_THREADS
 struct	procsig {
 #define ps_begincopy ps_sigignore
 	sigset_t ps_sigignore;	/* Signals being ignored. */
@@ -91,7 +88,6 @@ struct	procsig {
 #define ps_endcopy ps_refcnt
 	int	 ps_refcnt;
 };
-#endif /* COMPAT_LINUX_THREADS */
 
 /*
  * pasleep structure, used by asleep() syscall to hold requested priority
@@ -123,14 +119,10 @@ struct	proc {
 	struct	pstats *p_stats;	/* Accounting/statistics (PROC ONLY). */
 	struct	plimit *p_limit;	/* Process limits. */
 	struct	vm_object *p_upages_obj;/* Upages object */
-#ifndef COMPAT_LINUX_THREADS
-	struct	sigacts *p_sigacts;	/* Signal actions, state (PROC ONLY). */
-#else
 	struct	procsig *p_procsig;
 #define p_sigacts	p_procsig->ps_sigacts
 #define p_sigignore	p_procsig->ps_sigignore
 #define p_sigcatch	p_procsig->ps_sigcatch
-#endif
 
 #define	p_ucred		p_cred->pc_ucred
 #define	p_rlimit	p_limit->pl_rlimit
@@ -195,12 +187,10 @@ struct	proc {
 	char	p_pad3[2];		/* padding for alignment */
 	register_t p_retval[2];		/* syscall aux returns */
 	struct	sigiolst p_sigiolst;	/* list of sigio sources */
-#ifdef COMPAT_LINUX_THREADS
 	int	p_sigparent;		/* signal to parent on exit */
 	sigset_t p_oldsigmask;		/* saved mask from before sigpause */
 	int	p_sig;			/* for core dump/debugger XXX */
         u_long	p_code;	  	        /* for core dump/debugger XXX */
-#endif /* COMPAT_LINUX_THREADS */
 
 /* End area that is zeroed on creation. */
 #define	p_endzero	p_startcopy
@@ -209,10 +199,6 @@ struct	proc {
 #define	p_startcopy	p_sigmask
 
 	sigset_t p_sigmask;	/* Current signal mask. */
-#ifndef COMPAT_LINUX_THREADS
-	sigset_t p_sigignore;	/* Signals being ignored. */
-	sigset_t p_sigcatch;	/* Signals being caught by user. */
-#endif /* COMPAT_LINUX_THREADS */
 	u_char	p_priority;	/* Process priority. */
 	u_char	p_usrpri;	/* User-priority based on p_cpu and p_nice. */
 	char	p_nice;		/* Process "nice" value. */
@@ -388,11 +374,7 @@ void	wakeup_one __P((void *chan));
 void	cpu_exit __P((struct proc *)) __dead2;
 void	exit1 __P((struct proc *, int)) __dead2;
 void	cpu_fork __P((struct proc *, struct proc *));
-#ifndef COMPAT_LINUX_THREADS
-int		fork1 __P((struct proc *, int));
-#else
 int	fork1 __P((struct proc *, int));
-#endif /* COMPAT_LINUX_THREADS */
 int	trace_req __P((struct proc *));
 void	cpu_wait __P((struct proc *));
 int	cpu_coredump __P((struct proc *, struct vnode *, struct ucred *));
diff --git a/sys/sys/signalvar.h b/sys/sys/signalvar.h
index 658c6cb29c78..a9f9c4052a96 100644
--- a/sys/sys/signalvar.h
+++ b/sys/sys/signalvar.h
@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)signalvar.h	8.6 (Berkeley) 2/19/95
- * $Id: signalvar.h,v 1.21 1998/12/19 02:55:34 julian Exp $
+ * $Id: signalvar.h,v 1.22 1999/01/07 21:23:46 julian Exp $
  */
 
 #ifndef	_SYS_SIGNALVAR_H_		/* tmp for user.h */
@@ -55,15 +55,8 @@ struct	sigacts {
 	sigset_t ps_sigintr;		/* signals that interrupt syscalls */
 	sigset_t ps_sigreset;		/* signals that reset when caught */
 	sigset_t ps_signodefer;		/* signals not masked while handled */
-#ifndef COMPAT_LINUX_THREADS
-	sigset_t ps_oldmask;		/* saved mask from before sigpause */
-#endif /* COMPAT_LINUX_THREADS */
 	int	ps_flags;		/* signal flags, below */
 	struct	sigaltstack ps_sigstk;	/* sp & on stack state variable */
-#ifndef COMPAT_LINUX_THREADS
-	int	ps_sig;			/* for core dump/debugger XXX */
-	u_long	ps_code;		/* for core dump/debugger XXX */
-#endif /* COMPAT_LINUX_THREADS */
 	sigset_t ps_usertramp;		/* SunOS compat; libc sigtramp XXX */
 };
 
@@ -175,9 +168,7 @@ void	psignal __P((struct proc *p, int sig));
 void	sigexit __P((struct proc *p, int signum));
 void	siginit __P((struct proc *p));
 void	trapsignal __P((struct proc *p, int sig, u_long code));
-#ifdef COMPAT_LINUX_THREADS
 void check_sigacts (void);
-#endif
 /*
  * Machine-dependent functions:
  */
diff --git a/sys/sys/user.h b/sys/sys/user.h
index 2f8e393f0934..72298546d6e8 100644
--- a/sys/sys/user.h
+++ b/sys/sys/user.h
@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)user.h	8.2 (Berkeley) 9/23/93
- * $Id: user.h,v 1.18 1999/01/07 21:23:47 julian Exp $
+ * $Id: user.h,v 1.19 1999/01/13 03:11:42 julian Exp $
  */
 
 #ifndef _SYS_USER_H_
@@ -69,9 +69,7 @@ struct kinfo_proc {
 		struct	session *e_sess;	/* session pointer */
 		struct	pcred e_pcred;		/* process credentials */
 		struct	ucred e_ucred;		/* current credentials */
-#ifdef COMPAT_LINUX_THREADS
 		struct  procsig e_procsig;	/* shared signal structure */
-#endif
 		struct	vmspace e_vm;		/* address space */
 		pid_t	e_ppid;			/* parent process id */
 		pid_t	e_pgid;			/* process group id */
@@ -128,13 +126,8 @@ struct	user {
 #define	U_tsize	u_kproc.kp_eproc.e_vm.vm_tsize
 #define	U_dsize	u_kproc.kp_eproc.e_vm.vm_dsize
 #define	U_ssize	u_kproc.kp_eproc.e_vm.vm_ssize
-#ifndef COMPAT_LINUX_THREADS
-#define	U_sig	u_sigacts.ps_sig
-#define	U_code	u_sigacts.ps_code
-#else
 #define	U_sig	u_kproc.kp_proc.p_sig
 #define	U_code	u_kproc.kp_proc.p_code
-#endif /* COMPAT_LINUX_THREADS */
 
 #ifndef KERNEL
 #define	u_ar0	U_ar0
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
index 19b46d8ab49d..bd592be24e57 100644
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -59,7 +59,7 @@
  * any improvements or extensions that they make and grant Carnegie the
  * rights to redistribute these changes.
  *
- * $Id: vm_glue.c,v 1.81 1999/01/21 08:29:10 dillon Exp $
+ * $Id: vm_glue.c,v 1.82 1999/01/21 09:36:23 dillon Exp $
  */
 
 #include "opt_rlimit.h"
@@ -238,16 +238,6 @@ vm_fork(p1, p2, flags)
 
 	up = p2->p_addr;
 
-#ifndef COMPAT_LINUX_THREADS
-	/*
-	 * p_stats and p_sigacts currently point at fields in the user struct
-	 * but not at &u, instead at p_addr. Copy p_sigacts and parts of
-	 * p_stats; zero the rest of p_stats (statistics).
-	 */
-	p2->p_stats = &up->u_stats;
-	p2->p_sigacts = &up->u_sigacts;
-	up->u_sigacts = *p1->p_sigacts;
-#else
 	/*
 	 * p_stats currently points at fields in the user struct
 	 * but not at &u, instead at p_addr. Copy parts of
@@ -263,7 +253,7 @@ vm_fork(p1, p2, flags)
 		p2->p_sigacts = &up->u_sigacts;
 		up->u_sigacts = *p1->p_sigacts;
 	}
-#endif /* COMPAT_LINUX_THREADS */
+
 	bzero(&up->u_stats.pstat_startzero,
 	    (unsigned) ((caddr_t) &up->u_stats.pstat_endzero -
 		(caddr_t) &up->u_stats.pstat_startzero));