diff --git a/lisp/Darwin-os.c b/lisp/Darwin-os.c
index 82f0f9c2a38a8ea5841f7a8428b026e742f5e051..01a5d01e23a0bfa490118d8a826cef39516adc12 100644
--- a/lisp/Darwin-os.c
+++ b/lisp/Darwin-os.c
@@ -14,7 +14,7 @@
  * Frobbed for OpenBSD by Pierre R. Mai, 2001.
  * Frobbed for Darwin by Pierre R. Mai, 2003.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Darwin-os.c,v 1.32 2011/09/01 04:39:56 rtoy Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Darwin-os.c,v 1.33 2011/09/01 05:18:26 rtoy Exp $
  *
  */
 
@@ -99,6 +99,9 @@ timebase_init(void)
 }
 #endif
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
 
 void
 os_init(const char *argv[], const char *envp[])
diff --git a/lisp/FreeBSD-os.c b/lisp/FreeBSD-os.c
index 1e91906f4c22450430e792b675c7ff8a444d775a..84e0b085422af694aaaae3d127d4b4ecdc65ddfd 100644
--- a/lisp/FreeBSD-os.c
+++ b/lisp/FreeBSD-os.c
@@ -12,7 +12,7 @@
  * Much hacked by Paul Werkowski
  * GENCGC support by Douglas Crosher, 1996, 1997.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/FreeBSD-os.c,v 1.37 2010/12/26 16:04:43 rswindells Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/FreeBSD-os.c,v 1.38 2011/09/01 05:18:26 rtoy Exp $
  *
  */
 
@@ -38,6 +38,10 @@
 
 vm_size_t os_vm_page_size;
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
diff --git a/lisp/Linux-os.c b/lisp/Linux-os.c
index 3e3df735e1b73fecc649e2f00b17fc3e1bf81912..26e1224086653409afe144ba99495ead91dfc6b3 100644
--- a/lisp/Linux-os.c
+++ b/lisp/Linux-os.c
@@ -15,7 +15,7 @@
  * GENCGC support by Douglas Crosher, 1996, 1997.
  * Alpha support by Julian Dolby, 1999.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Linux-os.c,v 1.51 2010/12/26 16:04:43 rswindells Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Linux-os.c,v 1.52 2011/09/01 05:18:26 rtoy Exp $
  *
  */
 
@@ -131,6 +131,15 @@ check_personality(struct utsname *name, const char *argv[], const char *envp[])
 #endif
 }
 
+void
+os_init0(const char *argv[], const char *envp[])
+{
+    struct utsname name;
+
+    uname(&name);
+    check_personality(&name, argv, envp);
+}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
@@ -146,8 +155,6 @@ os_init(const char *argv[], const char *envp[])
     }
 
     os_vm_page_size = getpagesize();
-
-    check_personality(&name, argv, envp);
 }
 
 #ifdef __i386
diff --git a/lisp/NetBSD-os.c b/lisp/NetBSD-os.c
index df268cd034f518359e1a944399e9bfc4dcb95213..1399c402c7edc09081ca053c27ba573226f3accd 100644
--- a/lisp/NetBSD-os.c
+++ b/lisp/NetBSD-os.c
@@ -15,7 +15,7 @@
  * Frobbed for OpenBSD by Pierre R. Mai, 2001.
  * Frobbed for NetBSD by Pierre R. Mai, 2002.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/NetBSD-os.c,v 1.19 2010/12/26 16:04:43 rswindells Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/NetBSD-os.c,v 1.20 2011/09/01 05:18:26 rtoy Exp $
  *
  */
 
@@ -45,6 +45,10 @@ size_t os_vm_page_size;
 #endif
 
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
diff --git a/lisp/OpenBSD-os.c b/lisp/OpenBSD-os.c
index 66978af1dacedf3cc838cb380f825a2f023515e3..40b2a700c62ce7b8cf71857d9bfd707842d1a746 100644
--- a/lisp/OpenBSD-os.c
+++ b/lisp/OpenBSD-os.c
@@ -13,7 +13,7 @@
  * GENCGC support by Douglas Crosher, 1996, 1997.
  * Frobbed for OpenBSD by Pierre R. Mai, 2001.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/OpenBSD-os.c,v 1.10 2010/02/01 16:04:43 rtoy Rel $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/OpenBSD-os.c,v 1.11 2011/09/01 05:18:26 rtoy Exp $
  *
  */
 
@@ -40,6 +40,10 @@ vm_size_t os_vm_page_size;
 #endif
 
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
diff --git a/lisp/hpux-os.c b/lisp/hpux-os.c
index e02e0490deae55d99c490e41fc4c531b3d69159c..4a614f620553004f492bb4cb607e4308b58cf7fa 100644
--- a/lisp/hpux-os.c
+++ b/lisp/hpux-os.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/hpux-os.c,v 1.10 2010/02/01 16:04:43 rtoy Rel $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/hpux-os.c,v 1.11 2011/09/01 05:18:26 rtoy Exp $
  *
  * OS-dependent routines.  This file (along with os.h) exports an
  * OS-independent interface to the operating system VM facilities.
@@ -52,6 +52,10 @@ static struct segment {
     os_vm_address_t protected;
 } segments[MAX_SEGMENTS];
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
diff --git a/lisp/irix-os.c b/lisp/irix-os.c
index 75b36b4399d273887837cabbc82e87c66ea5fe0a..97d6a0519ce23e664a3406c1a9f7f7b84ef3bccc 100644
--- a/lisp/irix-os.c
+++ b/lisp/irix-os.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/irix-os.c,v 1.6 2010/02/01 16:04:43 rtoy Rel $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/irix-os.c,v 1.7 2011/09/01 05:18:26 rtoy Exp $
  *
  * OS-dependent routines.  This file (along with os.h) exports an
  * OS-independent interface to the operating system VM facilities.
@@ -29,6 +29,10 @@ os_vm_size_t os_vm_page_size = (-1);
 
 int zero_fd;
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
diff --git a/lisp/lisp.c b/lisp/lisp.c
index 1b56f8ad651655a7043250694d728ad5bd74b67f..396478d05cbb2f71931bf4cd57555a27bccc77fb 100644
--- a/lisp/lisp.c
+++ b/lisp/lisp.c
@@ -1,7 +1,7 @@
 /*
  * main() entry point for a stand alone lisp image.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/lisp.c,v 1.83 2011/06/10 19:32:31 rtoy Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/lisp.c,v 1.84 2011/09/01 05:18:26 rtoy Exp $
  *
  */
 
@@ -461,6 +461,16 @@ main(int argc, const char *argv[], const char *envp[])
     }
     
 
+    /*
+     * Do any special OS initialization that needs to be done early.
+     * In particular, on Linux, we might re-exec ourselves to set our
+     * personality correctly.  Not normally a problem, but this does
+     * cause any output to happen twice.  That can be confusing.
+     *
+     * So make sure we don't do any output before this point!
+     */
+    
+    os_init0(argv, envp);
 #if defined(SVR4)
     tzset();
 #endif
diff --git a/lisp/mach-os.c b/lisp/mach-os.c
index 28c2970b0744c57baeb12a5b37429b975e9fbc3c..0b08cdcd8d6cb04d0a7e7ea3f8a654809aafd7a2 100644
--- a/lisp/mach-os.c
+++ b/lisp/mach-os.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/mach-os.c,v 1.8 2010/02/01 16:04:43 rtoy Rel $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/mach-os.c,v 1.9 2011/09/01 05:18:26 rtoy Exp $
  *
  * OS-dependent routines.  This file (along with os.h) exports an
  * OS-independent interface to the operating system VM facilities.
@@ -37,6 +37,10 @@ task_self(void)
 }
 #endif
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
diff --git a/lisp/os.h b/lisp/os.h
index 9a2a8fd46a75a66b39f6a7f602cbfb89c2e7743b..4c76df2a89bb7d1563030c29f4977e040483606e 100644
--- a/lisp/os.h
+++ b/lisp/os.h
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/os.h,v 1.27 2010/12/26 16:04:43 rswindells Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/os.h,v 1.28 2011/09/01 05:18:26 rtoy Exp $
  *
  * Common interface for os-dependent functions.
  *
@@ -72,6 +72,7 @@
 
 extern os_vm_size_t os_vm_page_size;
 
+extern void os_init0(const char *argv[], const char *envp[]);
 extern void os_init(const char *argv[], const char *envp[]);
 extern void os_install_interrupt_handlers(void);
 
diff --git a/lisp/osf1-os.c b/lisp/osf1-os.c
index a4c043afc021cba0874c6163e2b04d969aa775e5..af10b8ef80d0e6fd0a9544a8bf27a60760bae127 100644
--- a/lisp/osf1-os.c
+++ b/lisp/osf1-os.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/osf1-os.c,v 1.6 2010/02/01 16:04:43 rtoy Rel $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/osf1-os.c,v 1.7 2011/09/01 05:18:26 rtoy Exp $
  *
  * OS-dependent routines.  This file (along with os.h) exports an
  * OS-independent interface to the operating system VM facilities.
@@ -25,6 +25,10 @@
 
 vm_size_t os_vm_page_size;
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
diff --git a/lisp/solaris-os.c b/lisp/solaris-os.c
index 140e5db5439f8ae9f6c2d16cc6095ebcbfe69c9d..815a36dde30d04ed958806bbeab7daf4cbcf6567 100644
--- a/lisp/solaris-os.c
+++ b/lisp/solaris-os.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/solaris-os.c,v 1.29 2010/12/26 16:04:43 rswindells Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/solaris-os.c,v 1.30 2011/09/01 05:18:26 rtoy Exp $
  *
  * OS-dependent routines.  This file (along with os.h) exports an
  * OS-independent interface to the operating system VM facilities.
@@ -72,6 +72,10 @@ os_init_bailout(char *arg)
     exit(1);
 }
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {
diff --git a/lisp/sunos-os.c b/lisp/sunos-os.c
index 536ae7ba8dbac02d8be6dc6d4ed2787664bbf8b1..775eb4060bd601ec7cea9007effda72707e4df7f 100644
--- a/lisp/sunos-os.c
+++ b/lisp/sunos-os.c
@@ -1,5 +1,5 @@
 /*
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/sunos-os.c,v 1.12 2010/02/01 16:04:43 rtoy Rel $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/sunos-os.c,v 1.13 2011/09/01 05:18:26 rtoy Exp $
  *
  * OS-dependent routines.  This file (along with os.h) exports an
  * OS-independent interface to the operating system VM facilities.
@@ -80,6 +80,10 @@ os_init_bailout(arg)
     exit(1);
 }
 
+void
+os_init0(const char *argv[], const char *envp[])
+{}
+
 void
 os_init(const char *argv[], const char *envp[])
 {