Index: /trunk/ccl/lisp-kernel/pmcl-kernel.c
===================================================================
--- /trunk/ccl/lisp-kernel/pmcl-kernel.c	(revision 5638)
+++ /trunk/ccl/lisp-kernel/pmcl-kernel.c	(revision 5639)
@@ -1221,10 +1221,5 @@
 {
   extern opcode spjump_start, spjump_end;
-  pc new = mmap((pc) 0x5000,
-                0x1000,
-                PROT_READ | PROT_WRITE | PROT_EXEC,
-                MAP_PRIVATE | MAP_ANON | MAP_FIXED,
-                -1,
-                0),
+  pc new,
     old = &spjump_start,
     limit = &spjump_end,
@@ -1234,17 +1229,25 @@
   int disp;
   
-  if (new != (pc) 0x5000) {
-    _exit(1);
-  }
-  
-  for (work = new; old < limit; work++, old++) {
-    instr = *old;
-    disp = instr & ((1<<26)-1);
-    target = (void*)old+disp;
-    disp = target-(void *)work;
-    *work = ((instr >> 26) << 26) | disp;
-  }
-  xMakeDataExecutable(new, (void*)work-(void*)new);
-  mprotect(new, 0x1000, PROT_READ | PROT_EXEC);
+  if (old != (pc)0x5000) {
+    new = mmap((pc) 0x5000,
+               0x1000,
+               PROT_READ | PROT_WRITE | PROT_EXEC,
+               MAP_PRIVATE | MAP_ANON | MAP_FIXED,
+               -1,
+               0);
+    if (new != (pc) 0x5000) {
+      _exit(1);
+    }
+    
+    for (work = new; old < limit; work++, old++) {
+      instr = *old;
+      disp = instr & ((1<<26)-1);
+      target = (void*)old+disp;
+      disp = target-(void *)work;
+      *work = ((instr >> 26) << 26) | disp;
+    }
+    xMakeDataExecutable(new, (void*)work-(void*)new);
+    mprotect(new, 0x1000, PROT_READ | PROT_EXEC);
+  }
 }
 #endif
@@ -1692,5 +1695,5 @@
     error = dlerror();
     *resultType = 0;
-    return error;
+    return (void *)error;
   }
   *resultType = 1;
