FSHOW((stderr, "Memory fault at: %p, PC: %p\n", fault_addr, *os_context_pc_addr(context)));
+#ifdef LISP_FEATURE_SB_SAFEPOINT
+ if (!handle_safepoint_violation(context, fault_addr))
+#endif
+
if (!gencgc_handle_wp_violation(fault_addr))
if(!handle_guard_page_triggered(context,fault_addr))
lisp_memory_fault_error(context, fault_addr);
memory_fault_handler);
#endif
-#ifdef THREADS_USING_GCSIGNAL
+#ifdef LISP_FEATURE_SB_THREAD
+# ifdef LISP_FEATURE_SB_SAFEPOINT
+# ifdef LISP_FEATURE_SB_THRUPTION
+ undoably_install_low_level_interrupt_handler(SIGPIPE, thruption_handler);
+# endif
+# else
undoably_install_low_level_interrupt_handler(SIG_STOP_FOR_GC,
sig_stop_for_gc_handler);
+# endif
#endif
SHOW("leaving os_install_interrupt_handlers()");
}
# define LoadCurrentThreadSlot(offset,reg); \
movl SBCL_THREAD_BASE_EA, reg ; \
movl offset(reg), reg ;
-#elif defined(LISP_FEATURE_LINUX) || defined(LISP_FEATURE_SUNOS)
+#elif defined(LISP_FEATURE_LINUX) || defined(LISP_FEATURE_SUNOS) || defined(LISP_FEATURE_FREEBSD)
/* see comment in arch_os_thread_init */
# define SBCL_THREAD_BASE_EA %fs:THREAD_SELFPTR_OFFSET
# define MAYBE_FS(addr) addr