X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Finterrupt.c;h=0067a1002a60419499038ed836a9a5ae09201887;hb=77d94d36bcfd3d5eea73ad51e6ee621a8938f995;hp=1dcc462074b32d765c5282c2670b3ad9dfe14cc7;hpb=1f763fa8eca17771d2c091094855fcb8b84d66da;p=sbcl.git diff --git a/src/runtime/interrupt.c b/src/runtime/interrupt.c index 1dcc462..0067a10 100644 --- a/src/runtime/interrupt.c +++ b/src/runtime/interrupt.c @@ -720,11 +720,10 @@ void thread_exit_handler(int num, siginfo_t *info, void *v_context) { /* called when a child thread exits */ mark_dead_threads(); } - #endif -boolean handle_control_stack_guard_triggered(os_context_t *context,void *addr){ +boolean handle_guard_page_triggered(os_context_t *context,void *addr){ struct thread *th=arch_os_get_current_thread(); /* note the os_context hackery here. When the signal handler returns, @@ -752,6 +751,12 @@ boolean handle_control_stack_guard_triggered(os_context_t *context,void *addr){ protect_control_stack_return_guard_page(th->pid,0); return 1; } + else if (addr >= undefined_alien_address && + addr < undefined_alien_address + os_vm_page_size) { + arrange_return_to_lisp_function + (context, SymbolFunction(UNDEFINED_ALIEN_ERROR)); + return 1; + } else return 0; }