diff -urN linux/fs/binfmt_elf.c linux-2.3.18-zeropage/fs/binfmt_elf.c
--- linux/fs/binfmt_elf.c	Tue Aug  3 18:18:39 1999
+++ linux-2.3.18-zeropage/fs/binfmt_elf.c	Fri Oct  1 17:04:30 1999
@@ -738,16 +738,15 @@
 	printk("(brk) %lx\n" , (long) current->mm->brk);
 #endif
 
-	if ( current->personality == PER_SVR4 )
-	{
-		/* Why this, you ask???  Well SVr4 maps page 0 as read-only,
-		   and some applications "depend" upon this behavior.
-		   Since we do not have the power to recompile these, we
-		   emulate the SVr4 behavior.  Sigh.  */
-		/* N.B. Shouldn't the size here be PAGE_SIZE?? */
-		error = do_mmap(NULL, 0, 4096, PROT_READ | PROT_EXEC,
-				MAP_FIXED | MAP_PRIVATE, 0);
-	}
+	/* Why this, you ask???  Well SVr4/UW7 maps page 0 as read-only,
+	   and some applications "depend" upon this behavior.
+	   Since we do not have the power to recompile these, we
+	   emulate the SVr4/UW7 behavior. */
+
+	if (current->personality & MAP_PAGE_ZERO)
+		error = do_mmap(NULL, 0, PAGE_SIZE, 
+			PROT_READ | PROT_EXEC, MAP_FIXED | MAP_PRIVATE, 0);
+
 
 #ifdef ELF_PLAT_INIT
 	/*
diff -urN linux/include/linux/personality.h linux-2.3.18-zeropage/include/linux/personality.h
--- linux/include/linux/personality.h	Sat Sep  4 21:06:08 1999
+++ linux-2.3.18-zeropage/include/linux/personality.h	Fri Oct  1 17:03:44 1999
@@ -8,6 +8,7 @@
 /* Flags for bug emulation. These occupy the top three bytes. */
 #define STICKY_TIMEOUTS		0x4000000
 #define WHOLE_SECONDS		0x2000000
+#define MAP_PAGE_ZERO		0x100000
 #define ADDR_LIMIT_32BIT	0x0800000
 
 /* Personality types. These go in the low byte. Avoid using the top bit,
@@ -16,7 +17,7 @@
 #define PER_MASK		(0x00ff)
 #define PER_LINUX		(0x0000)
 #define PER_LINUX_32BIT		(0x0000 | ADDR_LIMIT_32BIT)
-#define PER_SVR4		(0x0001 | STICKY_TIMEOUTS)
+#define PER_SVR4		(0x0001 | STICKY_TIMEOUTS | MAP_PAGE_ZERO)
 #define PER_SVR3		(0x0002 | STICKY_TIMEOUTS)
 #define PER_SCOSVR3		(0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS)
 #define PER_WYSEV386		(0x0004 | STICKY_TIMEOUTS)
