+#if defined LISP_FEATURE_GENCGC
+
+void
+sigsegv_handler(int signal, siginfo_t *info, void* void_context)
+{
+ os_context_t *context = arch_os_get_context(&void_context);
+ void* fault_addr = (void*)info->si_addr;
+ if(info->si_code == 1)
+ {
+ perror("error: SEGV_MAPERR\n");
+ exit(1);
+ }
+
+ if (!gencgc_handle_wp_violation(fault_addr))
+ if(!handle_guard_page_triggered(context, fault_addr))
+#ifdef LISP_FEATURE_C_STACK_IS_CONTROL_STACK
+ arrange_return_to_lisp_function(context,
+ SymbolFunction(MEMORY_FAULT_ERROR));
+#else
+ interrupt_handle_now(signal, info, context);
+#endif
+}
+
+#else