X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2Finterrupt.c;h=94b38b81658b6dc147bc7e9868ec74e706db37ab;hb=3b90774a1ea68bf42579594c872de16fb33f1454;hp=48bec248805ec4dc120b64c3cba736b70aa97fc7;hpb=1de12891f900d156ed035a097561ecd7755a256a;p=sbcl.git diff --git a/src/runtime/interrupt.c b/src/runtime/interrupt.c index 48bec24..94b38b8 100644 --- a/src/runtime/interrupt.c +++ b/src/runtime/interrupt.c @@ -125,7 +125,7 @@ static sigset_t blockable_sigset; void check_blockables_blocked_or_lose() { -#ifndef LISP_FEATURE_WIN32 +#if !defined(LISP_FEATURE_WIN32) /* Get the current sigmask, by blocking the empty set. */ sigset_t empty,current; int i; @@ -584,7 +584,6 @@ run_deferred_handler(struct interrupt_data *data, void *v_context) { * pending handler before calling it. Trust the handler to finish * with the siginfo before enabling interrupts. */ void (*pending_handler) (int, siginfo_t*, void*)=data->pending_handler; - os_context_t *context = arch_os_get_context(&v_context); data->pending_handler=0; (*pending_handler)(data->pending_signal,&(data->pending_info), v_context); @@ -1391,4 +1390,17 @@ siginfo_code(siginfo_t *info) { return info->si_code; } +os_vm_address_t current_memory_fault_address; + +void +lisp_memory_fault_error(os_context_t *context, os_vm_address_t addr) +{ + /* FIXME: This is lossy: if we get another memory fault (eg. from + * another thread) before lisp has read this, we the information. + * However, since this is mostly informative, we'll live with that for + * now -- some address is better then no address in this case. + */ + current_memory_fault_address = addr; + arrange_return_to_lisp_function(context, SymbolFunction(MEMORY_FAULT_ERROR)); +} #endif