;;;; -*- coding: utf-8; -*-
changes in sbcl-0.9.9 relative to sbcl-0.9.8:
* optimization: faster implementation of EQUAL
+ * fixed segfaults on x86 FreeBSD 7-current (thanks to NIIMI Satoshi)
changes in sbcl-0.9.8 relative to sbcl-0.9.7:
* minor incompatible change: (SETF CLASS-NAME) and (SETF
whose elements are EQUAL. Strings and bit-vectors are EQUAL if they
are the same length and have identical components. Other arrays must be
EQ to be EQUAL."
+ ;; Non-tail self-recursion implemented with a local auxiliary function
+ ;; is a lot faster than doing it the straightforward way (at least
+ ;; on x86oids) due to calling convention differences. -- JES, 2005-12-30
(labels ((equal-aux (x y)
(cond ((%eql x y)
t)
(and (bit-vector-p y)
(bit-vector-= x y)))
(t nil))))
+ ;; Use MAYBE-INLINE to get the inline expansion only once (instead
+ ;; of 200 times with INLINE). -- JES, 2005-12-30
(declare (maybe-inline equal-aux))
(equal-aux x y)))
SHOW("os_install_interrupt_handlers()/bsd-os/defined(GENCGC)");
undoably_install_low_level_interrupt_handler(SIG_MEMORY_FAULT,
memory_fault_handler);
+#ifdef SIG_MEMORY_FAULT2
+ undoably_install_low_level_interrupt_handler(SIG_MEMORY_FAULT2,
+ memory_fault_handler);
+#endif
SHOW("leaving os_install_interrupt_handlers()");
}
SHOW("os_install_interrupt_handlers()/bsd-os/!defined(GENCGC)");
undoably_install_low_level_interrupt_handler(SIG_MEMORY_FAULT,
sigsegv_handler);
+#ifdef SIG_MEMORY_FAULT2
+ undoably_install_low_level_interrupt_handler(SIG_MEMORY_FAULT2,
+ sigsegv_handler);
+#endif
}
#endif /* defined GENCGC */
* step flag bit by messing with the flags stored in a signal context,
* so we need to implement single stepping in a more roundabout way. */
#define CANNOT_GET_TO_SINGLE_STEP_FLAG
-#define SIG_MEMORY_FAULT SIGBUS
+#define SIG_MEMORY_FAULT SIGSEGV
+/* Sometime in late 2005 FreeBSD was changed to signal SIGSEGV instead
+ * of SIGBUS for memory faults, as required by POSIX. In order to
+ * support both new and old FreeBSD at the same time, both signals are
+ * hooked to the GC write barrier machinery. If you're reading this
+ * message in the far future where FreeBSD 6 and earlier are just
+ * quaint memories, feel free to delete this hack (and any code that's
+ * #ifdef SIG_MEMORY_FAULT2'ed). -- JES, 2005-12-30
+ */
+#define SIG_MEMORY_FAULT2 SIGBUS
#elif defined __OpenBSD__
(sigaction_nodefer_works ? SA_NODEFER : 0);
#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
if((signal==SIG_MEMORY_FAULT)
+#ifdef SIG_MEMORY_FAULT2
+ || (signal==SIG_MEMORY_FAULT2)
+#endif
#ifdef SIG_INTERRUPT_THREAD
|| (signal==SIG_INTERRUPT_THREAD)
#endif
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.8.4"
+"0.9.8.5"