Index: /trunk/ccl/lisp-kernel/x86-exceptions.c
===================================================================
--- /trunk/ccl/lisp-kernel/x86-exceptions.c	(revision 5371)
+++ /trunk/ccl/lisp-kernel/x86-exceptions.c	(revision 5372)
@@ -517,11 +517,22 @@
 handle_fault(TCR *tcr, ExceptionInformation *xp, siginfo_t *info)
 {
+#ifdef FREEBSD
+  BytePtr addr = (BytePtr) xp->uc_mcontext.mc_addr;
+#else
   BytePtr addr = (BytePtr) info->si_addr;
-  protected_area *a = find_protected_area(addr);
-  protection_handler *handler;
-
-  if (a) {
-    handler = protection_handlers[a->why];
-    return handler(xp, a, addr);
+#endif
+
+  if (addr && (addr == tcr->safe_ref_address)) {
+    xpGPR(xp,Iimm0) = 0;
+    xpPC(xp) = xpGPR(xp,Ira0);
+    return true;
+  } else {
+    protected_area *a = find_protected_area(addr);
+    protection_handler *handler;
+
+    if (a) {
+      handler = protection_handlers[a->why];
+      return handler(xp, a, addr);
+    }
   }
   return false;
@@ -760,4 +771,8 @@
 #endif
     
+#if SIGSEGV != SIGNUM_FOR_INTN_TRAP
+  case SIGSEGV:
+    return handle_fault(tcr, context, info);
+#endif    
     
   default:
