Index: /trunk/source/lisp-kernel/arm-exceptions.c
===================================================================
--- /trunk/source/lisp-kernel/arm-exceptions.c	(revision 14654)
+++ /trunk/source/lisp-kernel/arm-exceptions.c	(revision 14655)
@@ -1486,5 +1486,20 @@
 {
   TCR *tcr=get_tcr(true);
-  if (signo == SIGSEGV) {
+  
+  if (signo == SIGBUS) {
+    BytePtr addr = (BytePtr)(xp->uc_mcontext.fault_address); 
+    area *a = tcr->cs_area;
+    if (((BytePtr)truncate_to_power_of_2(addr,log2_page_size))== a->softlimit) 
+{
+      if (mmap(a->softlimit,
+               page_size,
+               PROT_READ|PROT_WRITE|PROT_EXEC,
+               MAP_PRIVATE|MAP_ANON|MAP_FIXED,
+               -1,
+               0) == a->softlimit) {
+        return;
+      }
+    }
+  } else if (signo == SIGSEGV) {
     BytePtr addr = (BytePtr)(xp->uc_mcontext.fault_address);
     area *a = tcr->cs_area;
@@ -1799,4 +1814,5 @@
     install_signal_handler(SIGILL, (void *)sigill_handler, true, false);
     install_signal_handler(SIGSEGV, (void *)ALTSTACK(signal_handler),true, true);
+    install_signal_handler(SIGBUS, (void *)ALTSTACK(signal_handler),true,true);
 
   }
