Index: /trunk/source/lisp-kernel/pmcl-kernel.c
===================================================================
--- /trunk/source/lisp-kernel/pmcl-kernel.c	(revision 15450)
+++ /trunk/source/lisp-kernel/pmcl-kernel.c	(revision 15451)
@@ -317,12 +317,18 @@
   BytePtr lowlimit = (BytePtr) (((((natural)bottom)-size)+4095)&~4095);
   area *a = new_area((BytePtr) bottom-size, bottom, AREA_CSTACK);
-  a->hardlimit = lowlimit+CSTACK_HARDPROT;
-  a->softlimit = a->hardlimit+CSTACK_SOFTPROT;
+  if (size > (CSTACK_HARDPROT + CSTACK_SOFTPROT)) {
+    a->hardlimit = lowlimit+CSTACK_HARDPROT;
+    a->softlimit = a->hardlimit+CSTACK_SOFTPROT;
+  } else {
+    a->softlimit = a->hardlimit = lowlimit;
+  }
 #ifdef USE_SIGALTSTACK
   setup_sigaltstack(a);
 #endif
 #ifdef PROTECT_CSTACK
-  a->softprot=new_protected_area(a->hardlimit,a->softlimit,kSPsoftguard,CSTACK_SOFTPROT,true);
-  a->hardprot=new_protected_area(lowlimit,a->hardlimit,kSPhardguard,CSTACK_HARDPROT,true);
+  if (a->softlimit != a->harlimit) {
+    a->softprot=new_protected_area(a->hardlimit,a->softlimit,kSPsoftguard,CSTACK_SOFTPROT,true);
+    a->hardprot=new_protected_area(lowlimit,a->hardlimit,kSPhardguard,CSTACK_HARDPROT,true);
+  }
 #endif
   add_area_holding_area_lock(a);
Index: /trunk/source/lisp-kernel/thread_manager.c
===================================================================
--- /trunk/source/lisp-kernel/thread_manager.c	(revision 15450)
+++ /trunk/source/lisp-kernel/thread_manager.c	(revision 15451)
@@ -1546,7 +1546,5 @@
   tcr->last_lisp_frame = (natural)(a->high);
 #endif
-  if (!(tcr->flags & (1<<TCR_FLAG_BIT_FOREIGN))) {
-    TCR_AUX(tcr)->cs_limit = (LispObj)ptr_to_lispobj(a->softlimit);
-  }
+  TCR_AUX(tcr)->cs_limit = (LispObj)ptr_to_lispobj(a->softlimit);
 #ifdef LINUX
 #ifdef PPC
