#include "interr.h"
#include "lispregs.h"
#include "thread.h"
+#include "runtime.h"
+#include "genesis/static-symbols.h"
+#include "genesis/fdefn.h"
#include <sys/types.h>
#include <signal.h>
os_context_t *context = arch_os_get_context(&void_context);
if (!gencgc_handle_wp_violation(fault_addr))
- if(!handle_control_stack_guard_triggered(context,fault_addr))
- /* FIXME is this context or void_context? not that it */
- /* makes a difference currently except on linux/sparc */
- interrupt_handle_now(signal, siginfo, void_context);
+ 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, siginfo, context);
+#endif
}
void
os_install_interrupt_handlers(void)
addr = arch_get_bad_addr(signal,info,context);
if(!interrupt_maybe_gc(signal, info, context))
- if(!handle_control_stack_guard_triggered(context,addr))
+ if(!handle_guard_page_triggered(context,addr))
interrupt_handle_now(signal, info, context);
/* Work around G5 bug; fix courtesy gbyers */
- sigreturn(void_context);
+ DARWIN_FIX_CONTEXT(context);
}
void